11.1 データをタウンロードする(その1)

今回から11章になるわけだけど、前回も言った通り、今回はちょっと趣向を変えてみることにするね。
確か、インターネットを使ってデータをダウンロードする機能をつけるって言ってたよね?
ん、そう。
でもそれって普通はできないんだよね?
まぁね。
ところで、“.dll”っていう拡張子がついてるプラグインは知ってるよね?
それって動画を再生する時に使う krmovie.dll とかのこと?
そうそう。
そういうプラグインの中に、インターネット上からデータをダウンロードする機能を追加できるプラグインもあるの。
へぇ、そうなんだ。
ただ、そのプラグインは krmovie.dll みたいに吉里吉里本体と一緒に配布されてないんだ。
えっ、じゃあそのプラグインってどうやって使うの?
えっとね、吉里吉里本体とか吉里吉里用プラグインとかの開発をする人向けに、 「吉里吉里開発サイト」っていうウェブサイトがあって、そこで公開されてるから、 そこからダウンロードして使わせてもらうことにするね。
吉里吉里開発サイト:
https://sv.kikyou.info/trac/kirikiri/
へぇ、そんなサイトがあるんだ。知らなかった。
吉里吉里開発サイトには色んな情報があるから、余裕があれば見てみると良いんじゃないかな。
で、その中にプラグインが色々公開されてるページがあるんだ。
※トップページから“Browse Source”→“kirikiri2”→“trunk”→“kirikiri2”→“bin”→“win32”→“plugin”の順にリンクをたどります。
ホントだ。すごいいっぱいプラグインがあるね。
その中に“httprequest.dll”っていう項目があるでしょ。
うん。あるね。
じゃ、そのリンクをクリックして…
“downloading”って書いてあるリンクか、下の方にある“Original Format”っていうリンクのどっちかをクリックすると、 プラグインがダウンロードできるよ。
どっちでもいいの?
うん。どっちをクリックしても同じものがダウンロードできるよ。
そっか。
…うん、ダウンロードできたよ。
あと、ReadMe とかプラグインのマニュアルとか(manual.tjs)も公開されてるから、 プラグインを使う前にちゃんと確認しといてね。
※トップページから“Browse Source”→“kirikiri2”→“trunk”→“kirikiri2”→“src”→“plugins”→“win32”→“httprequest”の順にリンクをたどります。
はーい。
で、この httprequest.dll っていうプラグインだけど、正確にはマニュアルにも書いてある通り「HTTP/HTTPS による非同期通信機能を提供する」プラグインなんだ。
えっと、それってどういうこと?
まず、HTTP っていうのは、簡単に言うとブラウザでウェブサイトを見たりする時に使われる通信方式のことだね。
ほら、URL って“http://”から始まることがよくあるでしょ。 これは HTTP っていう通信方式を使ってデータを送ったり受け取ったりするってことなの。
確かに http:// ってよく見かけるね。 あれってそういう意味だったんだね。
ちなみに HTTPS っていうのは通信データを暗号化して、もっと安全に通信できるようにしてある方式のことだよ。
それから、「非同期通信機能」っていうのは、通信してる間も普通に吉里吉里を動作させられるよ、っていうくらいの意味だと思っといて。
りょーかい。
で、このプラグインを loadplugin タグとか Plugins.link メソッドで読み込むと、HttpRequestクラスっていう、 「HTTP/HTTPS による非同期通信機能を提供する」クラスが使えるようになるんだ。
Plugins クラスの link メソッドについては§3.11参照。
プラグインを読み込むとクラスが使えるようになるの?
そ。例えば Layer クラスのオブジェクトを作ると、実際にレイヤが作られて、 そのオブジェクトのメソッドを呼び出すと、画像を表示したり加工したりできるでしょ。
うん、そーだね。
Layer クラスについては§3.2参照。
それと同じように、このプラグインを読み込むと HttpRequest クラスのオブジェクトが作れるようになって、HttpRequest クラスのオブジェクトを作ると、 そのオブジェクトのメソッドやプロパティを使って HTTP/HTTPS で通信ができるようになるの。
そーなんだ。
まぁ今回は KAG で使いやすくするために、HttpRequest クラスをちょっと拡張したクラスを作って、それを使うんだけどね。
拡張するってことは、その HttpRequest クラスを継承して新しいクラスを作るってこと?
ん、そう。
それじゃあ、今回は HttpRequest クラスを拡張していくんだね…なんか難しそうかも。
いや、HttpRequest クラスを拡張するスクリプトの説明はパスさせてもらうつもりだよ。
えっ、そーなの?
うん、その辺のスクリプトを見ていくより、そのクラスを使って実際にデータをダウンロードするスクリプトを見てった方が役に立ちそうかなって思って。
ん〜、確かにそうかもね。
ってワケだから、早速データをダウンロードするスクリプトを作っていくことにするね。
は〜い!
じゃまずはこのスクリプトをダウンロードしてね。
りょーかい。
……HttpRequestEx.ks っていうファイルと manual.ks っていうファイルがあるね。
HttpRequestEx.ksHttpRequest の KAG 用のプラグインで、 manual.ks は使い方とかを書いてるファイルだよ。
えっと、じゃあ HttpRequestEx.ks を読み込めば HttpRequest クラスが使えるようになるってこと?
うん。あと、読み込む前に httprequest.dll をプロジェクトフォルダに置いといてね。
わかった。
それじゃ、まずは一番簡単な使い方から見てくね。

downloadマクロを使ってテキストファイルをダウンロードするスクリプト>

; HttpRequestEx.ks を読み込みます
[call storage="HttpRequestEx.ks"]

; http://tjs2.info/sample.txt をダウンロードして、その内容を tf.text に代入します
[download url="http://tjs2.info/sample.txt" text=tf.text]
[if exp="tf.text !== void"]
; ダウンロードに成功すると tf.text の内容をメッセージレイヤに表示します
[emb exp="tf.text"]
[else]
; ダウンロードに失敗すると tf.text が void になるので、その場合はエラーメッセージを表示します
[eval exp="System.inform('データをダウンロードできませんでした。')"]
[endif]

…これってどんなスクリプトなの?
テキストファイルをダウンロードしてきて、その内容をメッセージレイヤに表示するスクリプトだよ。
じゃ最初からスクリプトを見ていこっか。
最初の call タグのとこは、 HttpRequestEx.ks を読み込んでるんだよね?
ん。ちなみに HttpRequestEx.ks の中で httprequest.dll を読み込んでるから、 loadplugin マクロとかで httprequest.dll を読み込まなくてもOKだよ。
そーなんだ。
じゃ次いくね。
downloadっていうマクロ?…を実行してるみたいだね。
download マクロは、さっき読み込んだ HttpRequestEx.ks の中で定義してるマクロで、指定した URL からデータをダウンロードするマクロだよ。
確かに“url”っていう属性があるね。
この例だと、url 属性に指定されてる http://tjs2.info/sample.txt っていうテキストファイルをダウンロードしてくるわけだね。
ちなみにこのリンクをクリックすると、テキストファイルの中身を確認できるよ。
※テキストは Shift-JIS 形式で保存されていますので、ブラウザで表示した時に文字化けする場合は、ブラウザの文字エンコーディングを Shift-JIS(シフトJIS)に設定してください。
「ダウンロード完了!」って書いてあるね。
つまり、このスクリプトが正しく実行されると、メッセージレイヤに「ダウンロード完了!」って表示されるわけね。
なるほどね。
…えっと、url 属性の他に text っていう属性も指定されてるみたいだけど、これって何なの?
ダウンロードが成功すると、url 属性に指定されてるテキストファイルに保存されてるテキストが、 text 属性に指定されてる変数に代入されるの。
じゃあこの場合は、ダウンロードが成功したら tf.text っていう変数に「ダウンロード完了!」っていうテキストが代入されるの?
そうそう。
ちなみにインターネットに接続されてなかったり、url 属性に指定したファイルが存在しなかったりしてダウンロードに失敗したら、 tf.textvoid になるんだ。
あ、だから次の if タグのとこで tf.textvoid じゃないかどうかチェックしてるんだ。
そ。tf.textvoid じゃなかったらダウンロードが成功してるってことだから、 emb タグでダウンロードしたテキストの内容をメッセージレイヤに表示してるの。
ダウンロードに失敗したら tf.textvoid になって else タグ以下のスクリプトが実行されるから、 eval タグの System.inform メソッドが呼び出されて「データをダウンロードできませんでした。」っていうメッセージが表示されるんだね。
そういうこと。
じゃ実際にやってみよっか。
さっきのスクリプトを first.ks に書き込んで実行してみて。
はーい。じゃ実行してみるね。
ダウンロードにちょっと時間がかかるかもしれないから、実行したら少し待っててね。
それから、当然だけどインターネットに接続してる環境で実行してね。
うん、わかった。

<実行結果>

あっ、「ダウンロード完了!」って表示された!
これってテキストファイルがちゃんとダウンロードできたってことだよね。
ん、そうだよ。
わりと簡単にできるでしょ。
そーだね。
ただ、テキストファイルをダウンロードする時に1つ注意しなくちゃいけないことがあるんだ。
え、それって何なの?
半角の英数字とか記号だけのテキストファイルなら、大抵の場合は別に気にしなくていいんだけど、 さっきの例みたいに日本語の文字が入ってたりする場合は、 テキストをシフトJIS形式で保存しないと文字化けしてちゃんと表示されなくなっちゃうんだ。
シフトJIS形式?
シフトJISってのは、文字を表現する形式の一つなんだけど、 大抵のテキストエディタはシフトJIS形式でテキストを保存できるようになってるはずだから、特に問題はないんじゃないかな。
例えば、Windowsのメモ帳だと、保存する時の“文字コード”の設定を“ANSI”にすると、シフトJIS形式でテキストが保存されるよ。
そーなんだ。
downloadoptマクロを使用することで、シフトJIS形式以外のテキストファイルを読み込むこともできます。詳しくはmanual.ksをご覧下さい。
さて、それじゃ実際に試せたことだし、今回はこれくらいにしとこっか。
あ、えっと、ちょっと気になったんだけど、ダウンロードできるのってテキストファイルだけなの?
ブラウザだと画像とか色んな種類のファイルがダウンロードできるよね?
もちろんテキスト以外のファイルもダウンロードできるよ。
その辺は次回にやってみるつもりだよ。
そっか。わかった。
それじゃ、今回はここまで。
また次回ね!


前へ | TOP | 次へ