#なうぷれいんぐ を作った
久しぶりのブログ更新ですが技術ネタです。
iTunesで再生している曲をTwitterに投稿するものを作りました(n番煎じ)。
使うもの
普段のbotと同様に投稿したいのでRuby
ターミナルからiTunesを操作するためAppleScript
実際に作ったもの
まず普通にTwitterに投稿する準備をする。
#!/usr/local/bin/ruby -Ku #coding : utf-8 require'twitter' require'yaml' keys = YAML.load_file 'userconf.yml' #任意のディレクトリ @client = Twitter::REST::Client.new do |config| config.consumer_key = keys["api_key"] config.consumer_secret = keys["api_secret"] config.access_token = keys["access_token"] config.access_token_secret = keys["access_token_secret"] end
AppleScriptをRuby中で使いたいのでosascriptを使います。
osascript は指定されたファイルか、コードを AppleScript として実行します。
http://macwiki.sourceforge.jp/wiki/index.php/コマンド/osascript
Ruby内でosascriptコマンドを実行し、出力を変数に代入します。
track = `osascript << SCRIPT
~~~ここからAppleScript~~~
tell application "アプリケーション名"
で操作対象のアプリケーションを指定してブロックに入ります。(ブロック終わるときはend tell)
AppleScriptでは変数への代入は
set 変数名 to 値
で行うようです。
tell application "iTunes" set trackname to name of current track set trackartist to artist of current track set albumname to album of current track return trackname & " - " & trackartist & " / "& albumname & " #なうぷれいんぐ" end tell SCRIPT`
どういう値が扱えるのかは
iTunes for Mac まとめ - AppleScript
この辺参照してください。
これでトラック名,アーティスト名,アルバム名が取得出来たのであとはツイートするだけ。
@client.update(track) end
はい、これで完成です。
HAPPY LIFE - GRANRODEO / 愛のWarrior #かすぷれいんぐ
— こまKISHOW (@Kasu_miko) 2015, 2月 2
ちょっと待って、なんか寂しくない?画像がないやん!ジャケットが見たくてなうぷれしたの!
じゃけんジャケットも投稿できるようにしましょうね〜
というわけでジャケットも同時に投稿するようにしましょう。
まず、iTunesのAlbum Artworkは1つの項目に対して複数設定することができます。
また、Artworkが設定されていない項目も存在します。
i = `osascript << SCRIPT tell application "iTunes" tell current track if exists artwork 1 then return artwork 1 end if end tell end tell SCRIPT`
こんな感じで条件判定します。
※ifもtellと同様忘れずにend ifすること
さてiにartworkが入ったかな、と思ったのですが、これをupdate_with_mediaしてもエラーを吐いてしまいました。
エラーの解決法がわからなかったので、とても遠回りになりますが、一旦ファイルに書き出してそれを読み込み直すことにしました。
i = `osascript << SCRIPT tell application "iTunes" tell current track if exists artwork 1 then set d to raw data of artwork 1 set filepath to ((path to desktop) as text) & "hoge.png" set b to open for access file filepath with write permission set eof b to 0 write d to b starting at 0 close access b return 1 end if end tell end tell SCRIPT`
あとは仕上げ
if i == "1\n" @client.update_with_media(track,open("~/Desktop/hoge.png")) else @client.update(track) end
なんか数字をiに代入できないし後ろに改行入るしで悲しいことになった。
これでとりあえずは動くようになりました。
(画像書きだすのでめちゃくちゃ重い)
HAPPY LIFE - GRANRODEO / CRACK STAR FLASH #かすぷれいんぐ pic.twitter.com/AfSE3KvlQ5
— こまKISHOW (@Kasu_miko) 2015, 2月 28
気が向いたら画像書き出さない方法考えます。(なんか方法あったら教えて頂けるとうれしいです)