2012年2月12日日曜日

twitter botプログラムを作ってみた

このエントリーをはてなブックマークに追加
twitter botプログラムを作ってみました。このbotは、インターネットを定期的に移動して、今いるページのURLをサムネイル付きでTwitterに投稿します。

botプログラムのTwitterアカウント
http://twitter.com/#!/wandering_bot



要素技術は、次の通りです。
  • プログラムは、Twitter APIがすでにあるRubyで作っています。
  • RubyのMechanizeを使ってページ情報を取得し、ページ内に含まれているURL情報から、次のURLをランダムに決めています。
  • サムネイル画像の取得は、こちらのサービスを利用しています。http://capture.heartrails.com/
  • サーバは、AWSを利用しています。
  • 定期的なプログラムの実行には、crontabを利用しています。

以下、Rubyのソースです。

#!/usr/bin/ruby

require 'rubygems'
require 'twitter'
require 'mechanize'
require 'json'
require 'date'

# Settings and Resources
work_dir = "/your-working-dir/"
url_list = work_dir + "urls.txt"
thumbnail_site_url = "http://capture.heartrails.com/"
wait_time_sec = 10

last_url = ""
File.open(url_list, "rb") do |file|
    file.each_line do |line|
        last_url = line
    end
end

agent = Mechanize.new
agent.max_history = 10

last_page = agent.get(last_url)
links = last_page.links
next_page = links[Integer(links.length * rand)].click()

thumbnail_fig_url = thumbnail_site_url + "free?" + next_page.uri.to_s

thumbnail_site_page = agent.get(thumbnail_site_url)
form = thumbnail_site_page.forms.first
form["enter[url]"] = next_page.uri
form.submit

sleep(wait_time_sec)
thumbnail_page = agent.get(thumbnail_fig_url)
fig_fname = "thumbnail.jpg"
File.open(fig_fname, "wb") do |file|
    file << thumbnail_page.body
end

Twitter.configure do |config|
    config.consumer_key = 'your_consumer_key'
    config.consumer_secret = 'your_consumer_secret'
    config.oauth_token = 'your_oauth_token'
    config.oauth_token_secret = 'your_oauth_token_secret'
end

now = DateTime.now
now = "#{now.year}-#{now.month}-#{now.day} #{now.hour}:#{now.min}:#{now.sec}"
Twitter.update_with_media("I'm at \"#{next_page.title}\". #{next_page.uri}\n#{now}", File.new(fig_fname))

File.open(url_list, "ab+") do |file|
   file << "\n#{next_page.uri}"
end


今のところの問題点

  • ページ内に含まれているURLだけをもとにして次のページを決定するので、ドメイン的・サイト的袋小路にとどまってしまう可能性がある。
  • Twitterの140文字制限を考慮していない。
  • そのほか…

とりあえずYahooのトップページから移動を始めさせましたが、Yahooのドメイン内をひたすらさまよいそうな気がします。。

参考ページ
http://route477.net/w/?RubyTwitterJa
http://rubydoc.info/gems
http://mechanize.rubyforge.org/
http://nokogiri.org/tutorials/installing_nokogiri.html
http://capture.heartrails.com/



0 件のコメント:

コメントを投稿