>>2.cgiプロトコル仕様書 ver1.00<< このドキュメントは、2.cgi<->iMona間のプロトコルの仕様書です。 記憶とソースから仕様書を起こしていますので何らかの間違いなどがあるかもしれません。 間違い、不明な点などがありましたらスレッド、メールなどで教えて頂ければ幸いです。 この仕様書を使用して、サーバに負荷を加えるいたずらなどはしないでください。 ■2.cgiの呼び出し方法 get,postの両方を使用することができます。 getの場合 http://imona.net/2.cgi?v=D&m=m&b=0&t=1234567890&c=s1t20 というようにして呼び出します。 この場合の意味は以下の項目を参照してください。 ■呼び出しオプション  ・v 意味:データ出力形式のバージョンを指定 値:1 2 3 4 5 6 7 8 9 A B C D 注意:  このドキュメントではそれぞれの値による違いは省略し、iMona 0.74.xで使用されているバージョンCおよび  バグを修正した、iMona 0.75で使用予定のバージョンDのみの解説となります。  ・m 意味:動作モードを設定 値:b t m s u w src me ver 値の意味:  b 板一覧の読み込み(省略可)  t スレッド一覧の読み込み(省略可)  m スレッドの読み込み(省略可)  s スレッドの検索  u URLを指定して読み込み  w 書き込み画面の出力(html)or2chの書き込み画面にリダイレクト(サーバの設定に依存)  src 2.cgiのソースを出力(アプリからは利用しません)  me iMona v0.52用の文字列リソースを出力(現在は使用しません)  ver 2.cgiのバージョンを出力します 注意:  b t mは省略してもその他のデータ(b=〜,t=〜)によって補完されます。  ・p 意味:オプション 値:i t m n x p a u 値の意味:  i IDを消去  t 時刻を消去  m メールを消去  n 名前を消去  x 圧縮なし  p 圧縮方法 p0:非可逆圧縮+可逆圧縮 p1:非可逆圧縮のみ p2:可逆圧縮のみ  a AAを消去(現在は不完全)  u URLを消去 注意:  p又はxを指定しないとデフォルトで非可逆圧縮+可逆圧縮がかかります。圧縮の詳細は、圧縮についてを参照してください。  複数のオプションを指定する場合は並べて書きます。例えばi,t,m,nを指定する場合は、  p=itmnと書きます。  ・b 意味:板番号 注意:  板番号とは、iMonaでそれぞれの板に勝手に割り当てた番号のことです。  URLを直接介さないことでパケット代を節約する目的で導入されています。  ・t 意味:スレッド番号 注意:  スレッド番号とは2chで使用されているスレがたったときの日付です。  iMonaのスレッド http://pc2.2ch.net/test/read.cgi/software/1055411823/  なら1055411823に当たる部分です。  ・c 意味:読む範囲の指定 書式:sXXXtYYY 又は lZZZ  sXXXtYYYは、XXXからYYYの範囲のスレッド一覧又はスレッドの取得を表します。  lZZZは、最新ZZZのスレッド一覧又はスレッドの取得を表します。 注意:  これが省略された場合、サーバではc=s1t10と補完して動作します。  ・w 意味:スレッド検索時のキーワード 注意:  これはm=sと同時に使用します。  ・u 意味:URLを指定して読み込む時のURL 注意:  2ch以外のURLを指定するとエラーが帰ります。 ■出力データのフォーマット  まず、1バイト目が0x00-0x0Fならばエラーとして処理します。 0x00:なんらかのエラー 0x01:読み込もうとしている範囲にレスがない(新しいレスがない) 0x02:iMonaサーバ<->2chの通信エラー 0x03:検索で何もヒットしなかった 0x04:スレッドはDAT落ち 0x05-0x0F:未定義。 注意:  未定義であっても、他のエラーと区別するためにサーバがこのエラーが返すこともあります。  次にエラーでないときです。  ・スレッド一覧の読み込み、スレッドの検索の時 圧縮後の容量(240) \t(0x09) 圧縮前の容量(240) \n(0x10) スレッドの数(240) ○以下の物が[スレッドの数]分続く○ スレッド番号(240) \t(0x09) スレッドタイトル(sjis) \t(0x09) レスの数(240) 注意:  (240)とは、数字を0x10-0xFFの範囲を使ってバイナリ化されているという意味です。便宜上240進数と呼びます。  例えば1000の場合、1000 = 4 * 240 + 40なので4+16 40+16つまり0x14 0x38となります。  また、ここで言う圧縮前後の容量とは、\nより後ろのバイト数を指しています。  ・スレッドの読み込みの時 圧縮後の容量(240) \t(0x09) 圧縮前の容量(240) \t(0x09) 開始レス番号(240) \t(0x09) 終了レス番号(240) \t(0x09) そのスレのレス数(240) \n(0x10) ○以下の物が[終了レス番号]-[開始レス番号]+1続く○ レスの内容(sjis) \t(0x09) 名前(sjis) \t(0x09) Mail(sjis) \t(0x09) 時間(sjis) (\t(0x09)) (ID(sjis)) \n(0x10) 注意:  IDは存在しないときはタブと一緒に省略されます。  ・m=u(URLを指定して読み込み)の時 ・出力されたデータはスレッド一覧の時   1バイト目:0x14(バージョンD)   板番号(240)   \t(0x09)   板の名前(sjis)   \n   この後、[・スレッド一覧の読み込み、スレッドの検索の時]の内容が続きます。   注意:    バージョンCの場合、0x14は0x04となっています(エラーとの区別がつかないバグがあります)。 ・出力されたデータはレスの時   1バイト目:0x13(バージョンD)   板番号(240)   \t(0x09)   スレッド番号(240)   \t(0x09)   スレッドの名前(sjis)   \n   この後、[・スレッドの読み込みの時]の内容が続きます。   注意:    バージョンCの場合、0x13は0x03となっています(エラーとの区別がつかないバグがあります)。  ・m=b(板一覧の読み込み)の時 圧縮後の容量(240) \t(0x09) 圧縮前の容量(240) \n(0x10) 板一覧のデータ(sjis) ・板一覧のフォーマットについて   カテゴリ1 \n   カテゴリ2 \n   ・   ・   カテゴリn \n   \n   カテゴリ1の板名1 \t カテゴリ1の板名2 \t カテゴリ1の板名3 \n   カテゴリ2の板名1 \t カテゴリ2の板名2 \t カテゴリ2の板名3 \t カテゴリ2の板名4 \n   ・   ・   カテゴリnの板名1 \t カテゴリnの板名2 \n   となっています。 ■圧縮について  ・圧縮の適用範囲 圧縮は、出力データのうちはじめの\n以降にかけられます。(m=uの時は二つ目の\nの後)  ・非可逆圧縮 非可逆圧縮が指定されている場合は、一番はじめに非可逆圧縮がかかります。 ここでは全角文字を半角文字に変換しています。  ・可逆圧縮 次に、可逆圧縮が指定されている場合 ひらがな圧縮 > 単純な辞書を使った圧縮 > ランレングス圧縮 の順にかかります。解凍するときは逆の順番で行います(実際のiMonaでは高速化のために後ろの2つを同時に解凍しています)。 ・ひらがな圧縮   ひらがな圧縮はひらがな0x82[0x9F-0xF1]が4つ以上続く場合、0x08 文字数(bin) 後ろの[0x9F-0xF1]の連続に変換します。   例えば、「ひらがな」(0x82 0xD0 0x82 0xE7 0x82 0xAA 0x82 0xC8)は0x08 0x04 0xD0 0xE7 0xAA 0xC8となります。 ・単純な辞書を使った圧縮   単純な辞書を使った圧縮は「名無しさん」を0x00 「い」を0x01 「う」を0x02 「ん」を0x03 「ttp://」を0x04に変換します。 ・ランレングス圧縮   ランレングス圧縮はまず3〜255回の1文字の連続を、0x0B 回数(bin) 圧縮する文字に変換します。   例えば、「aaaaaa」は0x0B 0x06 0x61(a)となります。   次に、4〜255文字の2〜255回数の連続を、0x07 圧縮する文字列の長さ(bin) 回数(bin) 圧縮する文字列に変換します。   例えば、「aabbccaabbccaabbcc」は0x07 0x06 0x03 0x61(a) 0x61(a) 0x62(b) 0x62(b) 0x63(c) 0x63(c)となります。  注意:   240進数化したデータにも可逆圧縮がかかることがあります。当然ですが非可逆圧縮はかかりません。 ■呼び出し方法のサンプルと解説  以下は全てget形式で書いていますが、post形式でも同様です。  1.http://imona.net/2.cgi?v=D&m=m&b=0&t=1234567890&c=s1t20 冒頭に書いたものですが、これが基本形でバージョンD,スレッドの読み込み,板番号0, スレ番号1234567890,レスを読む範囲は1〜20を表しています。m=mは省略可能ですので http://imona.net/2.cgi?v=D&b=0&t=1234567890&c=s1t20でも同じです。  2.http://imona.net/2.cgi?v=D&b=0&c=s1t20 これは板番号0のスレッド一覧を読みます。  3.http://imona.net/2.cgi?v=D&b=0&t=1234567890&c=s1t20&p=xiu これは1.に圧縮無し,IDの消去,URLの消去のオプションをつけたものです。  4.http://imona.net/2.cgi?v=D&b=0&s=テスト これは板番号0の板で、「テスト」という文字列がスレッドタイトルに含まれているスレッドを出力します。 getの場合は、URLエンコードしてください。  5.http://imona.net/2.cgi?v=D&m=u&u=http://xxx.2ch.net/test/read.cgi/yyy/1234567890/1-5 これはサーバがhttp://xxx.2ch.net/test/read.cgi/yyy/1234567890/1-5を解析して 適切なデータを返します。この場合はyyy板のスレ番号1234567890の1〜5が出力されます。  以下で実際にどのようなデータが落ちてくるか確認してください。 iMonaのスレッド http://imona.net/2.cgi?v=D&b=3009&t=1055411823&c=s1t20 ソフトウェア板 http://imona.net/2.cgi?v=D&b=3009 以上です。