トップ 差分 一覧 Farm ソース 検索 ヘルプ PDF RSS ログイン

Diary/2011-5-7

SWoPPの投稿状況ボット

を確認するbotを昨年作ったのだけど
ベーシック認証じゃだめだったので,OAuthに対応させた.
http://twitter.com/miyox_bot で,とりあえず10分に一度つぶやいています.
コードは↓の通り.

#!/usr/bin/ruby

require 'rubygems'
gem 'twitter'
require 'twitter'
require 'open-uri'

str = ""
open("http://www.hpcc.jp/swopp/swopp2011/cgi-bin/swopp_app_summary.cgi").read.split("\n").each{|l|
  if /<tr><th>(\w+)<\/th><td align=center.*>(\d+)<.*\/td><td align=center>(\d+)<\/td><\/tr>/ =~ l then
    str += " #{$1}: #{$2}/#{$3}"
  end
}
message = "#{str} - #{Time.now}"

CONSUMER_KEY = ここにはアプリ登録したときに表示されるキーをかく
CONSUMER_SECRET = ここにはアプリ登録したときに表示されるSECRETキーをかく
ACCESS_TOKEN = これは,適当に取得する
ACCESS_TOKEN_SECRET = これも適当に取得する

Twitter.configure do |config|
  config.consumer_key = CONSUMER_KEY
  config.consumer_secret = CONSUMER_SECRET
  config.oauth_token = ACCESS_TOKEN
  config.oauth_token_secret = ACCESS_TOKEN_SECRET
end

base = Twitter::Client.new
base.update(message)

ちなみに,http://twitter.com/apps/ から登録ができるのだけど,
何度試してもRead & Writeのチェックが有効にならなかった.
http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1261621202
にあった,

「設定」→「アプリ連携」→右下の開発者「こちら」→「Edit Details 」

とかして対応.

OAuthのTokenとToken Secretは
http://d.hatena.ne.jp/shibason/20090802/1249204953
にあった↓のコードで取得した.

require 'rubygems'
require 'oauth'

CONSUMER_KEY = ここにはアプリ登録したときに表示されるキーをかく
CONSUMER_SECRET = ここにはアプリ登録したときに表示されるSECRETキーをかく

consumer = OAuth::Consumer.new(
  CONSUMER_KEY,
  CONSUMER_SECRET,
  :site => 'http://twitter.com',
  :proxy => プロキシが必要な場合
)

request_token = consumer.get_request_token

puts "Access this URL and approve => #{request_token.authorize_url}"

print "Input OAuth Verifier: "
oauth_verifier = gets.chomp.strip

access_token = request_token.get_access_token(
  :oauth_verifier => oauth_verifier
)

puts "Access token: #{access_token.token}"
puts "Access token secret: #{access_token.secret}"

実行環境では,プロキシを介してのWebアクセスのみしか許されていないので
環境変数のhttp_proxyを設定して実行している.