コラム > httpc

httpc.dllについてちょっと纏め


櫛ヶ浜やぎ氏作のhttpc.dllは想像力次第でかなり面白い動作をするSAORIである。
使い方が結構わかりにくいのでメモを残す。以下、SHIORIは里々を使用しているものとする。
整備記録SAORI COLLECTIONも参照のこと
…というより上記二つが非常によく纏められているのでわざわざ書く必要があるかどうか。
必要とあらば「ふしぎの国の世界大戦」内のdic14_testbed.txtも見て下さい。


ネットワークへの接続の有無を調べる(引数なし)
接続している場合は1を、そうでない場合は0を返します。もちろん、これだけでは意味がないのでトークへジャンプさせねばならないでしょう。
*例
$ネット接続=(httpc)
>繋がってる【タブ】(インターネット接続)==1
>繋がってない
ネットは繋がっているか否かの二つしかない、1でなければ0なので、いちいち
>繋がってない【タブ】(インターネット接続)==0
とする必要はありません。インターネットへの常時接続が当たり前とはいえ、チェック次第でトークの中身を変える、とかに使えるかも。

対象を取得し出力する(引数1つ)
これは上記「整備記録」の方がはるかに簡潔に纏めてあるので何をしても二番煎じな気が。
何に使えるか、例えばテキストファイルを取得させてトークに入れるとか。ネトワク更新した方が早い?

対象を取得しローカルにDL(引数2つ)
このモードに限りテキスト以外のあらゆるファイルを取得できる。例によって「整備記録」方で公開している方が分かり易いとな!
DLする場所を自由に選べるとのことなので、特定のイベントを発生させると使えるシェルとかも出来るでしょう。
出来たところでメリットは「イベント発生前にユーザにシェルを見せない」くらいしか無いだろうけど…
ところがどっこい使えるじゃないか! 詳細は下記参照

対象のページからある単語で囲まれた部分を取得する(引数3つ)
「ふしぎの国の世界大戦」で使用している使い方。
*例
$テスト【タブ】(httpc,A,B,C)
とすると、AというURLのページからBという単語とCという単語で囲まれた部分を取得し、「テスト」という変数に設定します。
もちろんそのまま喋らせる事も出来ます。管理が面倒なので変数として捕まえた方が楽でしょうけど。
ページ内に複数該当するテキストが存在する場合、問答無用で最初に引っかかった部分を取得してきます。
ウェブサイトのページから文章・文字列などを引用しようとする際はソースを見てきちんと確認すること。

「ふしぎの国の世界大戦」ではlivedoorねとらじを再生するためリスナ数、ラジオのURL、ラジオのタイトルと3つの文字列を取得していますが
動作が恐ろしく重いです。取得が完了するまでは仕様上ゴーストが操作不能になってしまいます。これを回避するため非同期モードというものが用意されていますが
げっかんにっき方によると引数1と引数3の場合は動作しないらしいようです…。
実際に引数3つの場合で非同期モードを試してみましたが空白を返して来るのみでした。
れしばで覗いてみるとやはり文字列の取得に時間が掛かっているようです。数KBもないだろうに馬鹿みたいに重くなるのはなんとか解決せねば。

追記
livedoorねとらじの仕様変更に伴い、
「引数3つでラジオのURLを取得→引数2つでそのURLからm3uファイルをダウンロード→スクリプトを用いて再生」という凄まじく遠回りなことをやらざるを得なくなりました。
聞けば聞くほどふしぎの国の世界大戦のghost\master直下にm3uファイルが溜まるのが難点。たかだか数十バイトなので1000個溜まったところでどうと言うことはないだろうけど…
install.txtのrefleshを1にしてあるので、ネトワク更新なりアーカイブ更新をすれば全て消える…ハズ。
ただ、再生するたび一々ブラウザを立ち上げなくて良くなったのが唯一の利点でしょうか。

複数返値を使うと2番目以降も取得できます。例えばhttp://test/ukgk.txtというURLの中にある
AあB
AいB
AうB
という文字列に対し(注意! ソースにこう記述されていると考える。実際はごちゃごちゃとhtmlタグが混ざってるはず)
*
:文字探し
(httpc,http://test/ukgk.txt,A,B)
(S0)
(S1)
という処理をすると
文字探し
あ
い
う
とさくら側が喋るはずです。もちろん変数として定義することも出来るし、splitでさらに細かく分けることも出来ます。

最終更新日 2010-04-27






.
最終更新:2010年04月27日 16:18