INCM_MODULEモジュールヘルプ | [ダウンロード] |
---|---|
+-------------------------------------------------------------------------+ | − INCM Plug-in用モジュール : INCM_MODULE − | | | | Ver1.23 2004/04/07 by GETWILD'74 | +-------------------------------------------------------------------------+ はじめにGAEさん作、Web掲示板巡回ツール INCM(http://www.kaede.sakura.ne.jp/~nikeno/incm/)の、Plug-in用のモジュールです。 プラグイン自動更新プラグイン(cm_PluginUpdate.pl)を使うと自動で最新版に差し替えてくれます。 このモジュールによってプラグインは解析のための定義をメインに作成できます。 ベータ版ですので、まだ仕様が固まっていません。 ですから、更新のたびに仕様が変更になる可能性があります。 ※INCM_MODULEフォルダに各クラスファイルが必要です。 フォルダとファイルの構成Plugins├INCM_MODULE | ├BbsIni.PM | ├CMT.PM | ├CodeCnv.PM | ├Data.PM | ├Http.PM | ├IO.PM | └Parse.PM ├INCM_MODULE.PM └cm_KENT-WEB.pl Unicodeの変換が必要な場合はUnicode::Japaneseが必要になります。 Unicode::Japaneseモジュールは http://tech.ymirlink.co.jp/ で手に入ります。 INCM_MODULEフォルダ内にUnicodeというフォルダを作って、その中に Japanese.pmだけを入れて下さい INCM_MODULEを利用したプラグイン開発の手順プラグインの構成コメント部(バージョン等)モジュールのパス設定フォルダプロパティの設定初期化と巡回フォルダプロパティの定義(*)掲示板自動判別定義(*)掲示板毎の設定(*)*サブルーチンなので順序が前後しても問題ありません モジュールのパス設定$_=$0; s/[^\\]+$//; s/data\\.*$/Plugins\\/; require ($_.'INCM_MODULE.PM'); のようにINCM_MODULEを呼出しておいて下さい。 フォルダプロパティの設定フォルダプロパティの設定部分は従来通りです。但し、掲示板の情報は必須です。 #L000=L,,----- 掲示板の情報 ----- #L001=TS,L_BBS_Name,掲示板の種類 #L002=TS,L_BBS_Ver,掲示板のバージョン 正規表現で置き換える為の設定を使う場合「L_Reg***」という名前にすると記事の各項目取得の解析定義を置き換えることが出来ます。「L_Prm***」という名前にすると記事取得の為のパラメータ定義を置き換えることが出来ます。 例: L_RegMain:Num,記事番号. 初期化と巡回if ($INCM = new INCM_MODULE) {$INCM->Main; } exit; if内の $INCM = new INCM_MODULE; で、INCMクラスのインスタンスを作成します。 $INCM->Main で、Mainメソッドを呼出し巡回します。 exit で、プラグインの処理を終了します。 上記の例そのままに記述すれば問題ありません。 フォルダプロパティの定義INCM上でフォルダプロパティを開いた時の挙動を設定します。sub SetProperty { my ($BBS_Name, $BBS_Ver) = @_; my %Property; # フォルダプロパティ書き換え用の定義 if ($BBS_Name eq 'bbs1') { $Property{PARAM1} = 1; # パラメータ1欄を非表示 $Property{L000} = 1; # 詳細設定L000を表示(以下同様) $Property{L001} = 1; $Property{L002} = 1; $Property{L003} = 1; } elsif ($BBS_Name eq 'bbs2') { $Property{PARAM1} = 1; $Property{L000} = 1; $Property{L001} = 1; $Property{L002} = 1; $Property{L003} = 1; # ETC(当てはまるタイプがない場合に表示するもの) } else { $Property{L000} = 1; $Property{L001} = 1; $Property{L002} = 1; } # 掲示板ごとのフォルダプロパティ定義の連想配列リファレンスを返す return \%Property; } サブルーチン名は「SetProperty」でなければなりません。 if構文の内容以外は例そのままを記述すれば問題ありません。 if ($BBS_Name eq 'bbs1') { # bbs1用のプロパティ設定 } elsif ($BBS_Name eq 'bbs2') { # bbs2用のプロパティ設定 # ETC(当てはまるタイプがない場合に表示するもの) } else { # ETC用のプロパティ設定 } $BBS_Name eq '***'の「***」部分に掲示板のタイプを記述します。 if構文の各ブロック内にプロパティ定義を記述します。 $Property{PARAM1} = 1; # パラメータ1欄を非表示 $Property{L000} = 1; # 詳細設定L000を表示(以下同様) $Property{****}の「****」に設定対象のキーを記述します。 PARAM1ならパラメータ1欄の設定を意味します。 巡回設定のパラメータはデフォルトでは表示されるようになっています。 1を代入すると非表示になります、文字を代入すると表示するラベルを変更できます。 詳細設定のパラメータはデフォルトでは非表示になっています。 1を代入すると表示されるようになります。 文字を代入すると表示するラベルを変更できます。 掲示板自動判別定義掲示板の種類を自動判別するのに必要な処理を記述します。sub AutoSelect { my %AutoHOST; my %AutoURL; my %AutoHTML; # HTMLから判断するための定義 $AutoHTML{'bbs1'} = sub { my $STR = shift; if ($STR =~ /bbs1 Ver([\d\.]+) Created by INCM<\/a>/s) { return 'bbs1', $1; } }; # URLから判断するための定義 $AutoURL{'bbs2'} = sub { my $STR = shift; if ($STR =~ m#http://www.sample.ne.jp/bbs/bbs2.cgi#s) { return 'bbs2', 1; } }; # HOSTから判断するための定義 $AutoHOST{'bbs3'} = sub { my $STR = shift; if ($STR =~ /www.sample.co.jp/) { return 'bbs3', 1; } }; # 自動判別定義を返す return ( HTML => \%AutoHTML, URL => \%AutoURL, HOST => \%AutoHOST ); } サブルーチン名は「AutoSelect」でなければなりません。 $Auto***{'***'}への代入処理以外は例そのままを記述すれば問題ありません。 判別処理の代入は HTML解析なら、$AutoHTML{'***'}に URL解析なら、$AutoURL{'***'}に HOST解析なら、$AutoHOST{'***'}に 無名のサブルーチンを代入します。 サブルーチンは my $STR = shift; if (判定式、例では$STRに対して単純なマッチをしています) { return 掲示板等の種類, 掲示板等のバージョン; } のような形式で記述します。 $STRに代入された文字列に対して何らかの判定式を記述します。 判定によって掲示板等が特定できたら、種類とバージョンを戻り値とします。 掲示板毎の設定BBSの種類ごとの定義をします。すでに判別されている掲示板の種類とバージョンによって定義を設定します。 sub SetBBSdef { my ($BBS_Name, $BBS_Ver) = @_; # 掲示板の種類とバージョンの受け取り my (%Basic, %CMT, %Reg, %Prm); # 戻り値に使うハッシュの初期化 # デフォルトの定義があれば先に記述 # スクリプト種別ごとの解析用定義 # bbs1 if ($BBS_Name eq 'bbs1') { # ここにbbs1デフォルト定義を記述 # バージョンによる分岐 if ($BBS_Ver >= 0.0) { # バージョン0.0以上の定義を記述する } else { # 当てはまるバージョンがない場合の定義 } # bbs2 } elsif ($BBS_Name eq 'bbs2') { # ここにbbs2デフォルト定義を記述 # バージョンによる分岐 if ($BBS_Ver >= 0.0) { # バージョン0.0以上の定義を記述する } else { # 当てはまるバージョンがない場合の定義 } } # 解析用定義を返す return ( Basic => \%Basic, CMT => \%CMT, Reg => \%Reg, Prm => \%Prm); } サブルーチン名は「SetBBSdef」でなければなりません。 戻り値は上記の例の通りにして下さい。 定義の仕様については次の項で説明します。 記事取得時の解析定義仕様Basic定義解析の為の基本的な定義をします。%Basicというハッシュに代入していきます。 Page(ページめくり時の引数名)CGI側でページめくりに利用する引数の名前を定義します。HttpSkip(HTTP接続時に読み飛ばす末尾部分)HTTP接続時に読み飛ばす末尾部分のHTMLタグ等を定義します。HttpStep(HTTP読み込み時の記事ごとの区切り)記事ごとの区切りとなるHTMLタグ等を定義します。HttpStepTop(HTTP読み込み時のページ上部読み飛ばし定義)ページ上部を読み飛ばす区切りとなるHTMLタグ等を定義します。HttpStepBottom(HTTP読み込み時のページ下部切り捨て定義)ページ下部を切り捨てる区切りとなるHTMLタグ等を定義します。Frame(フレーム対策)フレームタイプの場合にログ表示用のCGI引数を定義。例: mode=log PagePlus(CGIに対するリクエストメソッド)GETやPOSTなどを定義する。PageParam(HTTP接続時にCGIに渡す引数)認証の為の引数等、固定で渡すもの例: id=log&pass=0123 UpCgi(書き込み用CGIファイル名の定義)書き込み用のCGIが記事表示用と異なり、さらにファイル名が分かっている場合に定義。例: write.cgi UpLoad(書き込み時プラグイン側で処理するかどうか)プラグイン側で書き込み処理をする場合は「1」を設定。HttpCookie(HTTP接続時に渡すクッキーを設定)クッキー認証等で使用HttpFirstSkip(初回HTTP接続をしない)「1」を設定すると別途接続する場合に最初の接続を回避するCmtFile(複数CMT作成時のファイル指定)$Basic{CmtFile}[配列番号] = 'CMTファイル名(拡張子なし),固定の場合は掲示板タイトル'CMT定義CMTヘッダの定義。$CMT{Head}または$CMT{Files}というハッシュに代入していきます。 HeadMode(書き込むヘッダの方式)ALL: 全てを書き込むHead&Parent: ヘッダと親記事投稿用指定を書き込む Child: 子記事投稿用指定のみ書き込む NumMode(記事番号のデータ形式)記事番号に数値以外の文字列が存在する場合に指定例: $CMT{Head}{NumMode} = 'String' Attribute(記事属性)CMT書き出し時の記事属性を指定例: $CMT{Head}{Attribute} = 'V'(仮想記事) 「Parentキー($CMT{Head}{Parent})およびChildキー($CMT{Head}{Child})」 Type(投稿設定は固定か記事毎に変化するか)Fix: 固定Dynamic: 記事毎に変化 Method(投稿時の送信方法)POST or GET: INCM本体から指定リクエストメソッドで送信LIB: プラグインによる送信処理 URL(投稿時に使用するURL)Read: 読み込み用アドレスWrite: 書き込み用アドレス Fix(投稿用固定のCGI引数)例: mode=registFixCMT(投稿用の展開されるCGI引数)$CMT{Parent}{FixCMT} = '展開対象 => CGI引数, 左記の繰り返し'「展開対象」(*)はプラグイン側の送信でのみ展開する Name: 投稿時の名前 Mail: メールアドレス Sub: タイトル HP: サイトアドレス Mes: 本文 Mes2: タイトルがない場合に一行目も本文とする Key: 削除キー等 Res: 返信元番号 Icon: アイコン Icon2: アイコン予備 Color: 色指定 Color2: 色指定予備 Area: 地域 Sex: 性別 Age: 年齢 Opt1: 拡張設定 Opt2: 拡張設定 Opt3: 拡張設定 Opt4: 拡張設定 Opt5: 拡張設定 ID: 認証などのID Pass: 認証などのパスワード File: 添付ファイル File2: 添付ファイル予備 File3: 添付ファイル予備 File4: 添付ファイル予備 NameO: プラグインによる書き込み時の名前* MailO: プラグインによる書き込み時のメールアドレス* HPO: プラグインによる書き込み時のサイトアドレス* MesO: プラグインによる書き込み時の本文* SubO: プラグインによる書き込み時のタイトル* Dynamic(動的投稿用定義)記事毎にCGIに渡す引数が異なる場合$CMT{Child}{Dynamic} = '置き換え対象:CGI引数名, 左記繰り返し' 「置き換え対象」 Num: 記事番号 ResNum: 返信元番号 TreeNo: ツリールート番号 RootNo: スレッドのルート番号 eval: 式を実行 eval(Reg定義の名前を用いて式を記述) 例: eval(MainSpace + 15):space($Reg{Main}{Space}) Files(CMTファイルごとの設定)001等(CMTファイル名)Title(掲示板タイトルに関する定義)$CMT{Files}{'001'}{Title}等Mode(掲示板タイトルの取得方法)AUTO: titleタグから自動抽出Match: 正規表現により抽出 Fix: 固定文字列 Cut(掲示板タイトル中で削除する部分がある場合の定義)掲示板タイトル中で削除する部分がある場合に正規表現で定義する例: $CMT{Files}{'001'}{Title}{Cut} = '\[All Tree[^\]]+\]' Value(掲示板タイトル取得用の定義)ModeがFixの場合はタイトルにする文字列を記述ModeがMatchの場合は抽出する正規表現を記述 例: $CMT{Files}{'001'}{Title}{Value} = '<h1>(.*?)' Point(詳細設定から未読ポインタを設定する場合)例: $CMT{Files}{'001'}{Point} = $INCM->GetParam('Point1', 'L')SetNo(掲示板タイトルの先頭に001等の番号を付ける場合)例: $CMT{Files}{'001'}{SetNo} = 1Write(プラグインによる投稿時の設定)ParamEval(投稿直前に送信内容に追記する場合の処理)Prm定義記事ごとではなく広範囲に及ぶ定義。%Prmというハッシュに代入していきます。 Type(掲示板の記事表示タイプ)Date: 時系列Thread: スレッド Tree: ツリー(以下の組み合わせで利用する) TreeDate: ツリータイプで記事は時系列 TreeThread: ツリータイプで記事はスレッド Split(親記事と子記事の分割)$Prm{Split} = '親記事と子記事の区切り,子記事を記事ごとに分割する区切り'Root(親記事判定)解析中の記事を親記事とみなす定義LoopTree(ツリー表示ページを複数取得しておく場合)プラグインごとに独自にサブルーチンで取得するこの定義にはそのサブルーチン名を記述 例: $Prm{LoopTree} = 'SetTreeUrl' HttpCheckFalse(エラーページであることの判定)マッチで得た$1が偽ならばエラーと判断する例: $Prm{HttpCheckFalse} = 'Last-Modified: (.*)' GetHeadMes(ツリーヘッダ取得時の巡回ウィンドウ表示)GetHeaders:に変わる独自の表示をする場合例: $Prm{GetHeadMes} = '#FixTitle# Headers:' #FixTitle#は掲示板のタイトルで置き換える指定 InfoMes(記事取得時の巡回ウィンドウ表示)Page 1:に変わる独自の表示をする場合例: $Prm{InfoMes} = '#FixTitle# Reading:' #FixTitle#は掲示板のタイトルで置き換える指定 TreeP(ツリー解析の親記事判定)ツリー形式では必須TreeC(ツリー解析の子記事判定)なくても動作する場合が多いTreeS(ツリー解析時の読み込みの区切り)親記事のヘッダを複数含まないように指定HeadBody(記事ヘッダと本文の区切り)分割できない場合は無理にしていしなくても良いTreeNo(ツリーのルート番号)ツリーの最上位の親記事番号orgParse(独自の拡張解析)CMT定義のDynamic展開で利用$Prm{orgParse}[0]のように配列に設定 正規表現,()の対応$1なら1など,展開時に利用する名前' NoReadPoint(未読ポインタを使用しない)1が設定されていれば、次のページを読もうとしないPassDate(子記事に日付がない場合に記事として認識させる定義)子記事に日付がない場合これにマッチしたら記事とするReg定義各記事ごとの項目の抽出定義。%Regというハッシュに代入していきます。 NameCの用にキーに「C」を付けるとレス記事用の定義になります。 「C」が存在しない場合は親記事のものがレス記事にも適用されます。 「書式」 $Reg{キー} = '正規表現,()の対応$1なら1など,キー中の何番目に使用するか,オプション' 「キー」 Num(記事番号)例: \[<b>(\d+)<\/b>\],1,1ResNum(返信元記事番号)例: <b>Re:\[(\d+)\].*?<\/b>,1,2,mName(発言者名)例: <b>(]+>)?(.*?)(<\/a>)?<\/b>,2,4Title(記事題名)例: <b>(.*?)<\/b>,1,3Comment(記事本文)例: <blockquote>(.*?)<\/blockquote>,1,5OptionName(地域、昇進状態等の特殊なもの)発言者名に付加されます。OptionName1のように1から番号を付ける 例: <font[^>]+>[^\[]*\[(.*?)\] *,1,4 CommentPutUrl(記事中の添付ファイル)記事中の添付ファイル抽出例: <a href=\"?\.\/([^\"> ]+)\"?[^>]*> DM(ダミー)先に消去したい部分がある場合mオプションを付けてしまうと意味がない 「オプション」 m 抽出後にマッチ部分を削除しない i 大文字小文字の区別をしない 「その他」 定義の内容をPassという文字にすれば何も抽出しないように出来ます 問題点内容が最新版に更新されていない。(CMT定義のみ更新済み)記事解析はテストが不十分なので、今後も仕様が変わると思います。旧バージョンへの対応状況が悪い。ソースが手に入らないので対応は非常に厳しいです。発言処理が「001.cmt」の1ファイルにしか対応していない。複数ファイルが必要な時が来たら対応します。モジュールの大幅な修正に伴い、以前は正常だった部分に不具合が生じている可能性があります。何か問題がありましたらお知らせ下さい。更新履歴Ver0.01 2002/05/02 :CMLIB15を元にモジュール作成Ver0.02 2002/05/20 :機能ごとにモジュールを分割Ver0.03 2002/08/27 :ページ数指定巡回に対応Ver0.04 2002/10/21 :index.htmlを表示する掲示板に対応、次のページのURLをセットするVer0.05 2002/10/22 :拡張パラメータの取得メソッドを追加Ver0.06〜0.10 2002/10/26 :プラグインからの発言処理メソッドを追加通常のパラメータの取得メソッドを追加 Ver0.11 2002/11/02 :Proxy経由の場合はUserAgentをMozillaにVer0.12 2002/11/15 :書込み先URLおよび未読ポインタのキーがincm_BBS.iniに存在しないと書き込めなかった不具合を修正 Ver0.12 2002/11/15 :書込み先URLおよび未読ポインタのキーがincm_BBS.iniに存在しないと書き込めなかった不具合を修正 Ver0.12〜0.20 2002/11/20 :いくつかのメソッドの追加全体的な修正 Ver0.21 2002/11/20 :ページタイトルの部分消去する設定用メソッドの追加Ver0.22〜0.23 2002/11/24 :終了処理時に文字コード情報を書き込むようにした巡回処理時の文字コード変換処理を追加 Ver0.24 2002/11/28 :未読管理をしない定義を追加し、未読ポインタをincm_BBS.iniに出力しないようにしたVer0.25〜0.40 2002/12/07 :フォルダプロパティの表示を動的に変更するようにしたVer0.41〜0.56 2003/02/14 :いくつかのメソッドの追加全体的な修正、各クラスを継承をしないようにした Dateクラスの廃止 Ver0.57〜0.60 2003/02/21 :HTTPクラスのUri指定定義の追加TreeListをプラグインから定義できるようにした 巡回ウィンドウの文字数の限界を超えないように出力を調整 Ver0.61〜0.63 2003/03/11 :未読ポインタ比較に記事番号での比較も追加未読ポインタ更新に記事番号の場合の処理も追加 巡回処理の未読ポインタ比較判定位置を変更 Ver0.64〜0.65 2003/03/12 :巡回ウィンドウの表示に関する修正記事番号が存在する場合にINIに日付形式のものがあれば削除する処理追加 Ver0.66〜0.67 2003/04/09 :Httpクラスへの設定処理にパラメータ追加記事番号による未読処理の不具合修正 Ver0.68 2003/04/15 :TreeListの取り出し時にshiftまたはpopの選択が出来るようにしたVer0.69 2003/04/16 :プラグインによる書き込み処理を一部修正Ver0.70〜0.75 2003/05/06 :全体的な修正Ver0.76〜0.78 2003/05/07 :投稿用Url解析追加に伴ういくつかの修正Ver0.79 2003/05/14 :掲示板判別時にParseクラスのインスタンスを生成するように変更Ver0.79〜0.82 2003/05/15 :別HTML取得巡回に対応Ver0.83〜0.86 2003/05/20 :ReadMainのUri設定を変更複数CMT巡回の初期化関連修正 Ver0.87 2003/05/21 :UpLoadモードの自動設定処理を修正Ver0.87〜0.90 2003/05/21 :書き込み処理の大幅な修正Agentモードの保持 Ver0.91〜1.00 2003/05/22 :投稿処理のファイル送信対応Ver1.01〜1.02 2003/05/22 :送信用ファイル設定処理修正送信処理の置換内容追加 Ver1.03 2003/05/23 :送信用ファイル設定処理の不具合修正Ver1.04〜1.05 2003/05/23 :SetParseにNumを追加ListOffの処理を追加 Ver1.06 2003/05/27 :発言記事送信時のURLエンコード処理をカットVer1.07〜1.08 2003/05/28 :複数解析定義に対応ページ末読み飛ばしの記述ミス修正 Ver1.09 2003/06/03 :SetParseにオプションを追加Ver1.10〜1.11 2003/06/04 :巡回のログイン対応投稿のログイン対応 Ver1.12 2003/06/07 :リスト内が複数ページ構成の場合に対応Ver1.13 2003/06/10 :デバッグ出力の見直しヘルプの一部を更新 Ver1.14 2003/06/12 :SetParseにDateを追加Ver1.15 2003/06/13 :送信用の設定にWorkを追加Ver1.16 2003/06/21 :拡張未読ポインタ用の処理を追加Ver1.20 2004/01/25 :Basic設定の拡張に対応記事取得および記事投稿処理にReferer送信の処理追加 Ver1.21 2004/01/26 :文章の修正とバージョン表記の誤り修正Ver1.22 2004/01/27 :別の巡回の際にTopic1のNextPageFlagを解除する処理を追加Ver1.23 2004/04/07 :無条件にRefererを設定するように修正終わりにより多くの掲示板に簡単に対応するために巡回処理をモジュール化しました。 このスクリプトの著作権は一応保持します。 仕様の統一のために、このスクリプトの改造を禁止します、何かあればINCMの プラグイン開発の掲示板にご報告下さい。 有償ソフトウェアでのこのスクリプトの利用を禁止します。 INCM以外での利用に関しては動作確認していませんし、バグ等のサポートもしません。 http://www3.wind.ne.jp/getwild/incm/InfoCgi/ e-mail:getwild@mail.wind.ne.jp GETWILD'74 |
|
INCM_MODULEモジュールヘルプ | [ダウンロード] |
- Plugin Infomation - Ver 1.34 | Produced by GETWILD'74 |