twbot3.rb - Twitter Bot Support Library in Ruby

[English]

注意

"Twitter" は "X" に改称されましたが、本記事では名称の特定性の高さのため「Twitter」の名称を使っております。

ダウンロード

現行バージョン

終了バージョン(Twitterへのアクセスはできません)

お知らせ

twbot3.rbを新規にリリースしました。Twitter API v1の大部分が利用できなくなったことへの対応のためです。(2024.6.8)

twbot2.rbのバージョン0.21をリリースしました。Twitter API v1.1への対応済みです。またtwbot2.rbのAPIが更新されています(なお、バージョン0.20向けに書かれたプログラムはだいたいバージョン0.21でも動きます)。バージョン0.21向けドキュメントはGitHub wiki pageをご覧ください(現在は英語のみ)。 (2013.2.5)

2011年7月より、ダイレクトメッセージ関連のAPIが、古いOAuthトークンでは利用不可能になります。利用されたい場合は、再度認証をお願いします。なお再度認証を行うには、まずconfig.ymlファイルから'users/USERNAME'のエントリ(直下の'token'や'secret'も含む)を削除し、その後'ruby BOT_SCRIPT_NAME.rb add=USERNAME'を実行します。(2011.6.28)

twbot.rbの新しいバージョン「twbot2.rb」を公開開始しました。古いtwbot.rbはOAuthに対応しておらず、8月31日以降は利用出来なくなりますのでご注意下さい。なお、twbot.rbからtwbot2.rbへの移行は少ない労力で行えるようになっております。(2010.5.16)

概略

twbot3.rbは、RubyにてTwitterのbot(プログラムにより自動的に発言を行うアカウント)作成を行う際に、その補助を行う(主に、OAuthトークンの管理を行う)ライブラリです。どちらかといえばフレームワークに近いかもしれません。

特に、定期的に特定の位置からデータを取得し(RSSやTwitterのタイムラインなど)、それに基づいて発言を行うbotを作るのに適したものとなっています。

必要な環境

Rubyインタプリタの導入されている、定期的にプログラムを実行させるためのPC

サンプル

あいさつをランダムに発言するbot

require "./twbot3"
TwBot.new("config-file.yml", "log-file.log").cui_menu do
  # ここに話す内容を定義する  tweet_list = ["Good morning", "Good afternoon", "Good evening"]
  [tweet_list[rand(tweet_list.size)]] # 返り値は配列end

RSSの内容を発言するbot

#!/usr/bin/env ruby
# -*- coding: utf-8 -*-

RSS_URL = "http://d.hatena.ne.jp/maraigue/rss"

require "cgi"
require "open-uri"
require "./twbot3"

SELFDIR = File.dirname(__FILE__)
TwBot.new("#{SELFDIR}/config-rsspost.yml", "#{SELFDIR}/error-rsspost.log").cui_menu do
  # Download RSS
  buf = nil
  open(RSS_URL){ |file| buf = file.read }
  
  result = []
  @config["already_retrieved"] ||= ""
  newest_entry = false
  
  # Retrieve entries in RSS
  # (It is better to use REXML library; this program omits it
  # for simpleness.)]
  buf.scan(/<item.*?>.*?<\/item>/m).each do |entry|
    # Extract titles and URLs of entries from downloaded RSS
    title = nil
    entry.scan(/<title>(.*?)<\/title>/){|tmp| title = CGI.escapeHTML(tmp[0])}
    link = nil
    entry.scan(/<link>(.*?)<\/link>/){|tmp| link = CGI.escapeHTML(tmp[0])}
    
    # Ignore entries already retrieved by this program
    #
    # NOTE: @config["..."] values are kept for the next running
    # of the program.
    break if link == @config["already_retrieved"]
    
    # Adds a message to the list to be tweeted later.
    #
    # Because RSS stores entries from newer one, to post messages in the
    # original order, the message have to be added to the bottom of the
    # array 'result'.
    result.unshift(TwBot."[AUTO POST] #{link} #{title}") if title && link
    
    # Keep the URL of the newest entry in the data retrieved now
    unless newest_entry
      newest_entry = true
      @config["already_retrieved"] = link
    end
  end
  
  
  # Set logged message
  @logmsg = "(#{result.size} post added)"
  
  # Return the result
  #
  # NOTE: the returned value must be an array of tweets when a bot
  # is constructed (called by 'ruby SCRIPTNAME.rb load')
  result
end
詳細(英語): maraigue/twbot3.rb · GitHub

詳細リファレンス

Help for twbot3.rb version 0.30 (English)

OLD VERSIONS:

おまけ

バージョン履歴

Version 0.10(2008.10.26)
初版公開
Version 0.11(2008.12.14)
同一の発言を2連続で投稿可能にした。これに伴い、@config変数に["last_post/"]キーを追加。
Version 0.12(2008.12.18)
Twitter運営からの認可を得て、twbot.rbからの投稿時に「from twbot.rb」と表示されるようにした。
Version 0.13(2009.03.09)
  • Ruby1.9に対応させた。
  • 「in_reply_to_status_id」を付与した発言を可能にした。
Version 0.14(2009.04.14)
  • TwBot#new の第1パラメータの書式を拡張した。(従来の"post"に加え、"post=5,2"のような書式が可能になりました)
  • Twitterのreplyの仕様変更に対応するため、クラスメソッド TwBot.remove_reply を追加した。
Version 0.15(2009.12.10)
  • @が全角でもreplyとみなされるようになったため、メソッド TwBot.remove_reply を更新した。
  • フォロー管理のメソッド(TwBot#get_followers, TwBot#get_friends, TwBot#follow, TwBot#unfollow, TwBot#following_status, TwBot.retrieve_followers, TwBot.retrieve_friends, TwBot.make_following, TwBot.make_unfollowing, TwBot.check_following)を追加した。
Version 0.20(2010.05.16)
OAuth対応のため一から書き直した。
Version 0.21(2013.02.05)
Twitter API v1.1のために作り直した。
twbot2.rbのAPIを更新した。
Version 0.22(2015.10.30)
設定ファイルをファイルロックするようにした。
Version 0.23(2018.07.29)
  • twbot2.rbのアプリケーションキー・シークレット(アプリケーション単位で割り当てられる、Twitter APIにアクセスする際に用いる文字列)をデフォルトでは指定されていない状態にした。これはTwitterが2018年9月10日より、アプリケーション単位のツイート数制限を設けるためである。(参照:New developer requirements to protect our platform (Twitterの開発者向けブログ)
  • プロンプトメッセージを表示する際に、標準出力をフラッシュするようにした。
Version 0.30(2024.06.08)
Twitter API v2を利用するよう変更した。

著作権表示

(C)2008- H.Hiro(Maraigue)

twbot.rbの複製・改変の条件は、(新)BSDライセンスに合わせます。BSDライセンス(原文) BSDライセンス(参考訳)
簡単に言えば、このソフトは無保証であり、また再配布(改変した上での再配布含む)の場合にも元の著作権表示などの部分が記されている必要があります。

私が使いやすいように書いているため、使いにくい点があるかもしれません。あらかじめご了承下さい。要望は可能な限りお受けします。

スクリプトに関する報告は、Twitter/h_hiro_および、メールアドレスmain(あっとまーく)hhiro.netにお願いします。


Maraigue's roomに戻る


(C)2008- H.Hiro (Maraigue / Sinryow)

Creative Commons Attribution-Noncommercial-NoDerivs (表示-非営利-改変禁止) 2.1 Japan HHiro.netのコンテンツは、別途記載があるものを除き、Creative Commons 表示-非営利-改変禁止 2.1 日本の条件のもとでご利用頂けます。