元ネタが修正してたので
自分も修正してみた。
元ネタ→http://d.hatena.ne.jp/sin-idea/20080911/1221119488
変わってるのは
msg = CGI.escape(info.toutf8)
↓
msg = CGI.escape(info)
になってるだけ。
元ネタと自分のやつの変更点は
「再生やめたときに[♪]NowPlaying: ? - [?] [fb2k]みたいなメッセージが送信されるのを防ぐ」だけです。
あと送信間隔を60秒にしてるのは「曲を飛ばすと送信しまくるから」ってだけ。
require 'net/http' require 'time' require 'kconv' require 'yaml' require 'cgi' $KCODE= 'utf-8' #ログイン情報ファイル cfgname="conf.yaml" #ここは自分の設定に合わせて変える #foobar2000で設定しているストップ時のメッセージ stopmsg='[♪]NowPlaying: ? - [?] [fb2k]' #fb2k動いてないときのメッセージ endmsg='not running' #おまじない Net::HTTP.version_1_2 $env_code = Kconv::UTF8 if RUBY_PLATFORM =~ /mswin/i then $env_code = Kconv::SJIS elsif ENV['LANG'] =~ /euc/i $env_code = Kconv:: Kconv::EUC end #YAML形式のファイルを読み込んでパスとアカウント情報を保存 conf = YAML.load_file(cfgname) config = conf["twitter"] account = config["login"] password = config["password"] #値の初期化 new = 0 #メインループ while true newer = test("M","np.txt")#ファイル最終更新時刻を取得 if new != newer open("np.txt","r") do |readinfo| info = readinfo.gets.chomp msg = CGI.escape(info.toutf8)#URI.escapeだとうまくいかない if info.casecmp(stopmsg)==0 #音楽停止中ならメッセージを送信しない elsif info.casecmp(endmsg)==0 #fb2kが停止中でもメッセージを送信しない else #fb2kで音楽再生中のみメッセージ送信 params = 'status=' + msg #ベーシック認証&投稿 req = Net::HTTP::Post.new("/statuses/update.xml?") req.basic_auth "#{account}", "#{password}" Net::HTTP.start('twitter.com', 80) {|http| response = http.request(req,params) } end end new = newer #最終更新時刻更新 else end sleep 60 #あまりやるとHDDいじめなので60秒おきに取得 end