はじめに
これまではFS APIの解説をしてきましたが、今回からより実践的な利用方法を紹介しましょう。
まずは、pastebinサイトからのAPIファイル自動ダウンロード機能です。
どのようなケースを想定しているのか
あるLuaプログラムがいくつかのファイル、たとえば他の人が作ったAPIなど、を使って構成されているとします。
このようなとき、プログラムファイルの先頭にはAPIを読み込むための以下のような記述があるはずです。
-- test api を読み込んでから、 os.loadAPI("test_api") -- このAPIを使います test_api.testPrint()
このとき当然ながら、このプログラムファイルと同じ場所に「test_api」というAPIファイルを保存しておかなくてはなりません。
ということは、
このプログラムを他のコンピュータ上で使いたいと思ったら、このプログラム本体と「test_api」というAPIファイルの2つを用意しなくてはならないのです。
ちょっとだけ面倒ですよね。Pastebinサイトを使ってファイルのアップロード&ダウンロードで楽しようとしても、2回もダウンロードするのはめんどくさい・・・
そこで自動ダウンロード
プログラム本体に、使用するAPIファイルを自動ダウンロードする機能をつけてあげましょう。
APIファイル
これから紹介するLuaプログラムは「test_api」というAPIを使っています。
「test_api」の中身は以下の通りです。
-- test_api testPrint = function() print("test!") end
testPrint()
という関数を追加するだけのシンプルなAPIです。
このAPIファイルはPastebinサイトに以下のURLで保存しています。
なおこのURLの末尾にある「TeWK9FBw」は、Pastebinコード(pastebin code)という一意な文字列で、Pastebinサイトにファイルをアップすると自動的に割り振られます。
自動ダウンロードプログラム
それではこのAPIファイルを自動ダウンロードしつつ利用する、「auto_download」プログラムを紹介します。
- ソースコード: http://pastebin.com/6XbjtMkF
auto_download プログラムの概説
6~7行目
- 使用するAPIファイルの情報です。APIの名前とPastebinコードをあらかじめ書いておきます。
- なお、APIの名前と同じファイル名で手元に保存します。
10~18行目
- installAPI()という関数を定義しています。この関数の働きは以下の通り
- 指定した
code
を使ってpastebinサイトからファイルをダウンロードし、name
という名前で手元に保存する。 - nameというファイルがすでに存在しているならば、すでにそのAPIファイルはダウンロードされているということなので何もしない。
- 最後に、
os.loadAPI()
関数を使って、そのAPIを読み込んで使えるようにする。
21~22行目
- Configで書いた情報を使って、
installAPI()
を実行する。 - 「test_api」の関数である
testPrint()
を実行して、問題ないか確認。
- Configで書いた情報を使って、
いくつかの重要なポイント
- ファイルが存在するかどうかを確認するために、FS APIの
fs.exists()
関数を使っています。- ファイルが存在するかどうかで、true/false を返す関数でした。
- IF文でファイルが存在するときとしないときの条件分岐をしています。
shell.run()
は、プログラムの中で他のプログラムを実行するための関数です。- 通常、
pastebin
コマンド(プログラム)は、ターミナルのプロンプトが出ているときに実行します。 shell.run("pastebin", "get", "TeWK9FBw", "test_api")
のようにプログラム中で記述すると、プロンプトで以下のように命令・実行したのと同じになります。> pastebin get TeWK9FBw test_api
- 通常、
なお、
pastebin
プログラムはget
オプションをつけて実行すると次のような動きをします。pastebin get <code> <name>
<code>
を使ってpastebinサイトからファイルをダウンロードし、<name>
という名前で保存する。
まとめ
このような関数をプログラムの先頭に書いておけば、pastebinコマンドを使ってAPIファイルをダウンロードする手間がはぶけますね。
紹介したプログラムは使っているAPIが一つだけでしたが、複数のAPIを使っているときには以下のようにすると良いでしょう。
関数にしているとこのように応用が効くので便利ですね。
- ソースコード: http://pastebin.com/f3k3sQmj