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 件のコメント:
コメントを投稿