Skip to content

twbot2.rb README(日本語)

H.Hiro edited this page Jul 28, 2018 · 8 revisions

twbot2.rbについて

twbot2.rbは、OAuthのトークン管理機能と統合された、Twitterのbotを作成するためのフレームワークです。TwitterのAPIを利用するには、OAuthの取り扱い、特にトークンの取得が面倒であるため、それをCUIから実行できるようにするとともに、取得したトークンを用いてTwitterのAPIを利用するためのクラスを自動的に生成するようにしています。

バージョン0.21より、twbot2.rbを単にOAuthのトークン管理のために利用する、すなわちTwitterのbot以外のTwitter用プログラムとしても利用しやすいよう作り直しました。

インストール

gem install json    # needed in Ruby 1.8 or before
gem install oauth
gem install devnull

その後、twbot2.rbをダウンロードし、ボットのプログラムと同じディレクトリに置きます。

バージョン0.23以降で必要なこと

バージョン0.22までは、twbot2.rbのアプリケーションキー・シークレット(アプリケーション単位で割り当てられる、Twitter APIにアクセスする際に用いる文字列)をデフォルトで指定していました。バージョン0.23ではこれをデフォルトで指定するのをやめました。これはTwitterが2018年9月10日より、アプリケーション単位のツイート数制限を設けるためです。(参照:New developer requirements to protect our platform (Twitterの開発者向けブログ)

  1. まずTwitterにアプリケーションの登録を行います。すると、"Consumer Key"と"Consumer Secret"を取得できます。
  2. twbot2.rbを開き、set_consumer("", "")というコードにkeyとsecretを指定します。

なお、単に試したい場合は、アプリケーションの登録を行う代わりに、コメントに書かれたコードを利用してください。

botにツイートさせたい内容を、以下に示す形で記述します。

$ cat greeting_bot.rb

require "./twbot2"
TwBot.create("config-file.yml", "log-file.log").cui_menu do
  # Define what the bot tweets here
  tweet_list = ["Good morning", "Good afternoon", "Good evening"]
  [tweet_list[rand(tweet_list.size)]] # return as an array
end

このプログラムを "load" パラメータで呼び出すことで、ツイートされる内容を設定ファイルに追加します。

$ ruby greeting_bot.rb load

Running mode 'load'...
[2000-00-00 00:00:00 +0000]
[cui_menu:mode=load]

"load" パラメータにより設定ファイルに追加された内容を実際にツイートするには、このプログラムを "post" パラメータで呼び出します。

$ ruby greeting_bot.rb post

Running mode 'post'...
[2000-00-00 00:00:00 +0000]
[cui_menu:mode=post]<Error in updating> A String (user name) or Hash
(parameters) is required as the argument (NilClass given)
* Perhaps you have not finished authentication. Try 'greeting_bot.rb init' to
register the default user.
ArgumentError: A String (user name) or Hash (parameters) is required as the
argument (NilClass given)
* Perhaps you have not finished authentication. Try 'greeting_bot.rb init' to
register the default user.
(snipped)

ただしこれは失敗します。というのも、ユーザが設定ファイルに登録されていないためです。そこで、設定ファイルにデフォルトのユーザを追加します。

$ ruby greeting_bot.rb init

Running mode 'init'...
============================================================
Here I help you register your bot account to the setting file.
Please prepare a browser to retrieve OAuth tokens.

Input the screen name of your bot account.
============================================================
User name >h_hiro_
============================================================
To retrieve OAuth token of user "h_hiro_":
(1) Log in Twitter with a browser for user "h_hiro_".
(2) Access the URL below with same browser:
    https://api.twitter.com/oauth/authorize?oauth_token=****
(3) Check the application name is "twbot2.rb" and
    click "Allow" link in the browser.
(4) Input the shown number (PIN number).
    To cancel, input nothing and press enter key.
============================================================
PIN number >*******
User "h_hiro_" is successfully registered.
Default user is set to @h_hiro_.
[2000-00-00 00:00:00 +0000]
[cui_menu:mode=init]
  • "User name >" が表示された際には、Twitterのユーザ名を入力します。
  • (1) = Twitterにブラウザで、入力したユーザ名でログインします。
  • (2) = そのブラウザで、表示されたURLにアクセスします。
  • (3) = 表示されているアプリケーション名が "twbot2.rb" であることを確認し、"Allow"(許可)をクリックします。
  • (4) = 表示されたPIN numberを入力します。キャンセルするには何も入力せずにEnterキーを押します。

これが終わったら、もう一度このプログラムを "post" パラメータで呼び出します。Twitterに投稿が行えていれば大丈夫です。

$ ruby greeting_bot.rb post

Running mode 'post'...
[Updated!] Good afternoon
[2000-00-00 00:00:00 +0000]
[cui_menu:mode=post](A tweet has been posted)

リファレンス

※リンク先はまだ英語のままです。

  • コンストラクタ
    • TwBot.create - TwBotのインスタンスを生成
    • TwBot.new - TwBotのインスタンスを生成し実行する
  • botプログラムの実行
    • TwBot#cui_menu - プログラムを動かすためのCUIを提供する
    • TwBot#run{ ... } - 指定されたブロックを実行する
    • TwBot#load_tweet{ ... } - 指定されたブロックを実行し、返り値をツイートととして保存する
    • TwBot#post_tweet - TwBot#load_tweetで保存したツイートをTwitterに投稿する
  • bot定義を記述するのに利用する変数
    • @config - 設定ファイルに書き込まれた内容
    • @logmsg - ログファイルに書き込みたい内容をここに指定する
    • @list - 保存されたツイートのリスト名
  • bot定義を記述するのに利用するメソッド
    • TwBot#user_registered? - 指定されたユーザが設定ファイルに登録されているか調べる
    • TwBot#auth_http - OAuthで認証されたHTTPアクセス用インスタンスを取得する
    • TwBot#get_followers, TwBot#get_followers_ids - フォローされているユーザを取得する
    • TwBot#get_friends, TwBot#get_friends_ids - フォローしているユーザを取得する
    • TwBot#follow_by_screen_name, TwBot#follow_by_user_id - ユーザをフォローする
    • TwBot#unfollow_by_screen_name, TwBot#unfollow_by_user_id - ユーザのフォローを外す
    • TwBot#following_status - ユーザのフォロー関係を取得する
  • ユーティリティ
    • TwBot.set_consumer - コンシューマトークンを設定する
    • TwBot.remove_reply - 返信にならないようにテキストを変形する ("Hi, @h_hiro_" -> "Hi, @ h_hiro_")
    • TwBot.user_details - ユーザIDからユーザの詳細情報を取得する
    • TwBot.truncate_to_length - 文字列が一定の文字数以上であった場合に切り落とす