CGI State: None
document

HEADLINE/1.0 - deleted -
HEADLINE/1.1

概要


ヘッドラインセンサ機構により、Sakura は任意のサイトのヘッドラインを取得/表示します。

plugin ディレクトリ内に任意のディレクトリを作り、そこにファイル一式を置くと、メインメニューの「ヘッドラインセンサ」サブメニューにそのプラグインが取得するサイトが出現します。

home
  +-plugin
      +-techside
          +-techside.dll
          +-descript.txt
          +-banner.png

HEADLINE/1.1


ヘッドラインセンサの実体は設定ファイル descript.txt と execute 関数をエクスポートする DLL ファイルの2つです。


  • descript.txt


    name,TECHSIDE
    dllname,techside.dll
    url,http://www.iris.dti.ne.jp/~spec/news2/bbsf.html
    openurl,http://www.iris.dti.ne.jp/~spec/


    name エントリはそのサイトの名前です。メニュー名等に使用されます。

    dllname エントリはプラグインとなる dll のファイル名です。

    url エントリはプラグインが取得する URL です。

    openurl エントリはサイトにジャンプする際に実際にオープンされる URL です。


  • DLL


    extern "C" __declspec(dllexport) HGLOBAL __cdecl getversion(long *len);
    function getversion(var len: longint): hglobal; cdecl; export;


    DLLロード直後、他の関数がインポートされる前にまずこの関数が呼ばれます。ヘッドラインセンサプラグインは "HEADLINE/1.1" という12バイトの文字列を返して下さい。


    extern "C" __declspec(dllexport) HGLOBAL __cdecl execute(HGLOBAL h, long *len);
    function execute(h: hglobal; var len: longint): hglobal; cdecl; export;


    execute は指定のファイルダウンロード直後に呼ばれ、引数にはダウンロードされたファイルのパスが gmem_fixed で渡されます。このファイルは必ず存在します。dll はこのパスを用いてファイルを読み込み、ヘッドラインを作成して gmem_fixed で返して下さい。

    戻り値はSAKURAスクリプト断片ではありません。よってタグ等は使用できません。CR+LF を改行コードとする完全にプレーンな文字列を構成して下さい。

    整形方法は自由ですが、一般的には以下のように整形されます。


    ■ヘッドライン0[CR+LF]■ヘッドライン1[CR+LF]■ヘッドライン2[CR+LF]‥‥


    ヘッドラインセンサは10行を越える(CR+LF の総数が 10 を越える)ヘッドラインを返してはなりません。

    処理は成功したが返すべきヘッドラインがない場合は空文字列を返して下さい。

    処理自体の失敗、もしくはhtmlの構造が異なるなど、それが明らかなエラーである場合はメモリをアロケートせずに 0 を返して下さい。 0 が帰ると embryo はそれをエラーと判断し、ユーザに「解析失敗」を通知します。


    DLLロード時およびアンロード時に以下の関数が呼ばれます。


    extern "C" __declspec(dllexport) BOOL __cdecl load(HGLOBAL h, long len);
    function load(h: thandle; len: longint): boolean; export; cdecl;

    extern "C" __declspec(dllexport) BOOL __cdecl unload();
    function unload: boolean; export; cdecl;


    load の第1引数にDLLのディレクトリパスが渡されます。データファイル等を持つ場合はここからカレントディレクトリを取得し、そこにデータファイルを作って下さい(つまり自分のディレクトリ内で全てを収めて下さい)。

    パス文字列が必要ない場合でも関数内で必ずハンドルを解放して下さい。

    戻り値はboolですが現在のところ本体側はこの値を見ていません(何が返ってきても処理を続行します)。

  • 戻る