全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:
-
#!/usr/bin/ruby
-
-
require 'rubygems'
-
require 'twitter'
-
$KCODE = 'u'
-
-
filename = "kanikosen.txt"
-
log_file = "published.log"
-
-
#マルチバイト文字列を指定文字数で分割して配列を返す(なんか方法ないのかな?
-
def div_string(str,num=140)
-
packed = Array.new
-
while part = str.slice!(/.{#{num}}/)
-
packed.push part
-
end
-
-
packed.push(str) unless str == ""
-
return packed
-
end
-
-
-
last_line = File.read(log_file).to_i
-
httpauth = Twitter::HTTPAuth.new('loginid','password');
-
twit = Twitter::Base.new(httpauth)
-
-
-
File.open(filename){|fp1|
-
while line = fp1.gets
-
if fp1.lineno> last_line
-
posts = div_string(line,140)
-
posts.each do |post|
-
p post
-
twit.update(post)
-
end
-
-
if line =~ /。$/
-
File.open(log_file,"w"){|fp2|
-
fp2.puts fp1.lineno
-
}
-
exit
-
end
-
end
-
end
-
}
行末の「。」までをPOSTしているだけです。
*実行には、POSTした行数を記録しておくファイルが必要です
まとめ
計算してみたところ491日後に終るようです。楽しみですね!
参考サイト
図書カード:蟹工船
3700のつぶやきと48万文字を経て、今Twitterで創作小説が読める
Ruby Twitter Gem by John Nunemaker
7月 16th, 2009 at 0:53:03
すごおい!次はドグマグお願いします!