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