ごちゃペディア

はなまるデジタル創作紀行(DTM、TAS、いろいろな技術)

LuaでTwitterにpost!

LuaスクリプトTwitterにツイートを投稿する手順をお教えします!

半年前に同じ記事を書いたときはBasic認証を利用していましたが、Basic認証は廃止されてしまいました。そこで今回はOAuth認証を行うことにします。

基本的にはignacioさんのLuaOAuthをそのまま利用して実現しています。この場を借りてお礼申し上げます。

OAuth認証して投稿するための手順

OAuth認証と言われてもぴんとこない人もいるかもしれませんが、ある程度Twitterを使っている人なら、下の画像のような「拒否する」「許可する」の画面を一度は見たことがあると思います。

今回、Luaからツイートできるようにするために、事前にこのような認証を完了しておかねばなりません。

本記事でのツイート完了までの大まかな道のりはこんな感じです。

  1. アプリケーションの存在をTwitterに登録し、Consumer keyを取得
  2. Consumer keyをキーに生成される認証URLにブラウザでアクセスして認証し、暗証番号を取得
  3. 認証で得た暗証番号をTwitterに送信し、OAuth tokenを取得
  4. OAuth tokenを利用してツイートを送信(2度目以降はこの手順だけで良い)

スクリプト実行環境の整備

多数のモジュールとともにスクリプトの動作環境が整えられて便利なため、本記事ではLua for Windows (5.1.4-40)でスクリプトを動作させます。他のホストを利用する場合も、実行環境整備以降の作業が変わることはありません。

後々出てくるスクリプトの実行にはさまざまなモジュールが必要です。先に準備してしまいましょう。

執筆当時はともかく、現在であれば LuaRocks を利用することもできるかもしれません。

Json モジュール取得

dkjson のページから dkjson.lua をダウンロードして、Lua for Windowslua ディレクトリにコピーしてください。

ssl.https モジュール取得

LuaSec -- TLS/SSL Support for Lua から luasec-0.4-openssl-0.9.8-lua-5.1-win32-dll9.zip をダウンロードして、INSTALL.txt の指示通りにファイルを配置します。Lua for Windows 用に読み替えると次の手順となります。

※追記:後々 libeay32.dll のエラーが出るようでしたら、DLLのインストールを行ってください。

Lua AIO Distribution からのモジュール取得 (crypto, curl, iconv)

LuaForge: Lua AIO: Project Info から luaaio_2.0_windows.zip をダウンロードします。lib ディレクトリの中に多数のライブラリが格納されているので、その中の crypto.dll, curl.dll, iconv.dll を clibs ディレクトリにコピーします。

しかし、これだけではこれらのモジュールは動作しません。Lua for Windowsディレクトリにある lua51.dll を、lua.dll の名前でコピーすることを忘れずに行ってください。

OAuth モジュール取得

ignacio's LuaOAuth at master - GitHub から OAuth.lua をダウンロードし、lua ディレクトリにコピーしてください。

アプリケーションの登録

Twitter / アプリケーションから、新しいアプリケーションを登録にアクセスします。日本語のページなので個々の項目の説明は割愛しますが、以下の項目は変更してください。

  • アプリケーションの種類: クライアントアプリケーション
  • Default Access type: Read & Write

登録後に表示されるConsumer keyConsumer secretスクリプトの動作のために必要となります。


OAuth認証

続いてOAuth認証を行います。まずは以下のスクリプトをダウンロードしてください。

テキストエディタで開くと、冒頭に consumer_key, consumer_secret の2つの変数がありますので、先ほど取得したCustomer keyを設定してください。

コンソールからスクリプトを実行すると、以下のような表示があらわれます。

Navigate to this url with your browser, please...
http://api.twitter.com/oauth/authorize?oauth_callback=oob&oauth_consumer_key=EOUmHM4t85aJ9189riFHAw&oauth_nonce=583ba7c6f4c7fa0703dc9a7dcd81bb96b3b16549&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1287748790&oauth_token=UEjzHtNc9gkaN7uMogWDYXXcAXZDn6mQmmVtFXY9n4k&oauth_version=1.0&oauth_signature=fKSS%2BRfhR5IJYHy4iEx8rn9Ty9g%3D

Once you have logged in and authorized the application, enter the PIN

表示されているURLが認証ページのURLです。早速ブラウザのアドレスバーにコピペしてページを開きましょう(改行コードに注意)。

よく見る認証画面が出てくるので「許可する」をクリックして次に進みます。

暗証番号が表示されましたか? 先ほど実行したスクリプトの画面に戻り、暗証番号を入力してEnterキーを押しましょう。

Once you have logged in and authorized the application, enter the PIN
0265389
screen_name     tassanbot
oauth_token     7778532-JCgVbX6nUYEvAIIuSIkwuFZzsqa6W1VC5ejVxESfni
oauth_token_secret      U2Scku3UIykJMt7ddtkJz2qvFGlH4li4YLQtTrhyNs
user_id 1234567

以上のように表示されれば認証は成功です。oauth_tokenoauth_token_secretを記録しておきましょう。

LuaTwitterに投稿 - 最後の準備

以下のスクリプトをダウンロードしてください。

Twitter.lua

テキストエディタで開いて、4つの変数 consumer_key, consumer_secret, oauth_token, oauth_token_secret にここまでの過程で得たキーを設定します。

LuaTwitterなう!

Twitter.lua と同じディレクトリに以下のスクリプトを作成して、実行してみてください!

require "Twitter"
Twitter.Post("ヾ(*>ヮ<)シ わーい!Luaでツイートできたよ! #TwitterLua")

おつかれさまでした!