全491回 蟹工船をTwitterで読む with Ruby

7月 15th, 2009 admin Posted in Ruby |

蟹工船

青空文庫(http://www.aozora.gr.jp/)で公開されている蟹工船をTwitterで毎日1段落づつ読めるようにしました。
読書が苦手な人にオススメです

読み方

https://twitter.com/kanikosen
をフォローしてください。毎朝8時ごろ一段落だけPOSTされます。

コード

botのコードはRubyで書きました。gemのtwitterをつかったわけですが、このライブラリはバージョンごとに結構使いかたが違うようなので、ネットでの情報を探すより英語の公式サイトを見るのがよさそうです(コンストラクタの引数が1つになってるとか)

RUBY:
  1. #!/usr/bin/ruby
  2.  
  3. require 'rubygems'
  4. require 'twitter'
  5. $KCODE = 'u'
  6.  
  7. filename = "kanikosen.txt"
  8. log_file = "published.log"
  9.  
  10. #マルチバイト文字列を指定文字数で分割して配列を返す(なんか方法ないのかな?
  11. def div_string(str,num=140)
  12.   packed = Array.new
  13.   while part = str.slice!(/.{#{num}}/)
  14.     packed.push part
  15.   end
  16.  
  17.   packed.push(str) unless str == ""
  18.   return packed
  19. end
  20.  
  21.  
  22. last_line = File.read(log_file).to_i
  23. httpauth = Twitter::HTTPAuth.new('loginid','password');
  24. twit = Twitter::Base.new(httpauth)
  25.  
  26.  
  27. File.open(filename){|fp1|
  28.   while line = fp1.gets
  29.     if fp1.lineno> last_line
  30.       posts = div_string(line,140)
  31.       posts.each do |post|
  32.         p post
  33.         twit.update(post)
  34.       end
  35.  
  36.       if line =~ /。$/
  37.         File.open(log_file,"w"){|fp2|
  38.           fp2.puts fp1.lineno
  39.         }
  40.         exit
  41.       end
  42.     end
  43.   end
  44. }

行末の「。」までをPOSTしているだけです。
*実行には、POSTした行数を記録しておくファイルが必要です

まとめ

計算してみたところ491日後に終るようです。楽しみですね!

参考サイト

図書カード:蟹工船
3700のつぶやきと48万文字を経て、今Twitterで創作小説が読める
Ruby Twitter Gem by John Nunemaker

One Response to “全491回 蟹工船をTwitterで読む with Ruby”

  1. すごおい!次はドグマグお願いします!

Leave a Reply