Phase.5 自動巡回エージェントで画像をダウンロードする(『スタパライフ』 Ver 1.10)

 Chapter.20 巡回エージェントへファイルのダウンロード機能を組み込む

 セットアップエージェントの修正により、画像を取得するかどうか、カスタムブラウザを使用するかどうかといった設定は既にレジストリィに書き込まれています。自動巡回エージェントは、それを読み込んで必要な処理を行わなければなりません。
 それでは、具体的にVer1.01からの変更点を追っていきましょう。全ソースについては、こちらをご覧下さい。


・レジストリィから設定値を読み込む(main)

 245:        UseCustomBrowser=leg_readbool(leg, "/common/UseCustomBrowser", 0);
 246:        COLLECTIONIMAGE=leg_readbool(leg, "/common/CollectionImage", 0);

 追加の設定項目を、レジストリィから読み込んでいます。UseCustomBrowserはmain関数の中でしか使いませんが、COLLECTIONIMAGEの設定は、実際に必要になるのは本文ページの処理の時です。パラメタとして渡していっても良いのですが面倒ですので、mainの外で変数を宣言して、autostpl全体から参照可能にしています。


・画像ファイルをダウンロードする(checknewmessage)

 102://イメージファイルの保存
 103:                    imagefile="";
 104:                    if(COLLECTIONIMAGE){
 105:                        temppath = getenv("DATA_DIR")+"\\stpl";
 106:                        imagefile=page_element_att(page,&ea->items[index+9],"src");
 107:                        if(fp = fopen(temppath+"\\"+imagefile, "r")) {
 108:                            fclose(fp);
 109:                        }
 110:                        else{
 111:                            img=download(basepath+imagefile,temppath);
 112:                        }
 113:                    }

 COLLECTIONIMAGEが1である場合(つまりイメージ保存の設定が有効な場合)、IMGタグからファイル名を取り出し、download関数を使用してファイルをダウンロードしています。ダウンロード関数の開発者はLeg3氏で、ソースについてはこちらを参照してください。ちなみに、autostpl.rからdownload.h上のdownload関数を参照するために、Ver 1.10からはautostpl.rの先頭に『#include "download.h"』が追加されています。download関数の使い方は、111行目を見れば明らかですが、引き数にURLと保存先のディレクトリィ名を渡すだけです。もちろん、ダウンロードするファイルは、画像であろうが圧縮ファイルであろうが、何でもかまいません。ただし、保存先を指定できるのはディレクトリィだけで、ファイル名までは指定できませんので注意してください。今にして思えば、保存先が格納してある変数名にtemppathという名前を使うのは、ちょっと変ですね……。


 ・追記用変数へログを格納(storemessage)

  57:    if (strlen(imgfile)>0)
  58:        tmptext = tmptext + "X-ImageFile: " + imgfile + "\r\n";

 もしも画像のダウンロードを実行していた場合、imgfileには画像ファイル名が入っています。その場合には、従来の要素に加えて、新しく『X-ImageFile: (ファイル名)』というヘッダをログに保存することにします。カスタムブラウザで画像を表示する時には、このヘッダを頼りに画像ファイル名を取り出すことになります。


 ・ブラウザエージェントの起動(main)

 297:        if((ofs>0)&&autobrowseropen){
 298:            if(UseCustomBrowser)    spawnl(P_NOWAIT, "stpl\\stplbrowser.pas", "stpl\\stplbrowser.pas","-H",url,"-T","スタパライフ",mbox,NULL);
 299:            else                    spawnl(P_NOWAIT, "browser\\unibrowser.pas", "browser\\unibrowser.pas","-H",url,"-T","スタパライフ",mbox,NULL);
 300:        }

 ブラウザの自動起動も変更する必要があります。カスタムブラウザを使用するか否かによって、ブラウザエージェントのファイル名を変更しています。


 これで、画像ファイルをダウンロードする処理が巡回エージェントに追加されました。後は、カスタムブラウザを作って画像表示に対応させれば、今回のバージョンアップは完了します。