foobar2000で再生している曲の内容をTwitterに投稿するRubyスクリプト書いたよ

定期的に更新されるテキストファイルの内容をポストするだけという非常に単純なスクリプトです。小学生でも書けます。
exeにして配布しようと思ったらエラーが起こってできませんでした。誰か代わりに作ってください。
導入結構めんどくさいです。

注意:変な曲再生しても勝手にポストします。変な人に思われたくない人はあらかじめおかしな曲はライブラリから外しておいてください。

動作環境

OS
WindowsXP HomeEditon SP3
Ruby
ruby1.8.7-p72
ruby1.8.6-p287

foobar2000側の準備

Now Playing Simpleというコンポーネントを導入します。
dllファイルをダウンロードしたらfb2kのコンポーネントフォルダに入れるだけです。

そうしたらFile->Preferencesを開いて、Tools->Now Playing Simpleを開きます。
以下設定内容です。Formatting stringは最初の一行しか読み出さない設定になってます。

# Filename: テキストを書き出す場所を自由に設定してください。ファイル名はnp.txtにしましょう。
# Encording: UTF-8
# Formatting string:
BGM: %artist% - %title% in %album% on foobar2000!
# On exit: (空白にしておいてください)

Twitterログイン用ファイルの準備

無駄にyamlファイル使ってます。YAMLというのはYAML Ain't Markup Languageの略だそうです。何も言ってないのと同じでイライラしますが、どうやらRubyファイルシステムをあらわしたものらしいです。

yaml.conf


twitter:
login: ろぐいんねーむ
password: ぱすわーど

ファイル名はyaml.confで保存してください。保存場所はnp.txtと同じ場所です。loginとpasswordの行は前に半角スペースを2ついれること。

Rubyスクリプトの準備

Ruby動かせる環境がない人は。ActiveScriptRubyとかでRubyの実行環境を作ってください。
そしたら適当なテキストエディタ使って以下のソースコードコピー&ペーストするなり(UTF-8推奨)してください。

foo_twit.rb


require 'net/http'
require 'time'
require 'kconv'
require 'yaml'
require 'cgi'
$KCODE= 'utf-8'

cfgname="conf.yaml"

#おまじない
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だとうまくいかない
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
new = newer #最終更新時刻更新
end
sleep 5#あまりやるとHDDいじめなので5秒おきに取得
end

これを先ほどの二つのファイルと同じ場所に保存します。

実行

コマンドプロンプトを立ち上げて、3つのファイルが保存されているフォルダに移動します。
np.txtはfoobar2000の状態が変化したときに自動で更新されますのでなくても良いです。
そうしたらプロンプトに


>ruby foo_twit.rb
と打ち込んでください。

ほっとくとTwitter側のトラブルがない限り永遠に動きます。終了させたいときはCtrl-Cで。

FAQ

Q.なんでtwitter4r使ってないの? アホなの?
A.twitter4rがアホなのか僕がアホなのかわかりませんがどうしても半角&がエンコードできなかったため(投稿文中に&があるとそこで切断される)直接たたいてます。直接たたくやり方もわからなかったのでコピペです。


Q.なんで文字化けするの? バカなの?
A.よくわかりません。旧字にUTF-8が追いついてないとかですかねぇ。


Q.つーかコードおかしくね? 恥ずかしくないの?
A.切り貼りだからおかしいかもしれません。指摘のされ方によっては恥ずかしいかもしれないので恥ずかしくない形で誰か直してください。


Q.切り貼りを晒すのってどうなの?
A.うーん……。


Q.そもそも需要ないんじゃないの? オナニーなの?
A.YES!YES!YES!

今後の展望

もうちょいいじりやすくできると良いのかも。

最後に

exe化してうまく動作させられたら神。