読者です 読者をやめる 読者になる 読者になる

ゼータの鼓動

ゼータです。情報Gackt,ガノタ,オーディオ,酒

本日の1曲BotでVisual Rock布教活動

 
こんにちは

こんにちは

Visual Rockが好き

私zetaはVisual Rockと呼ばれる音楽のジャンルが好きです。いわゆるヴィジュアル系と呼ばれるやつです。去年の10月のVISUAL JAPAN SUMMITの3日目にも参戦しました。

Visual Rockの中でも特に90年台に活躍したバンドの曲が好きで、X JAPANLUNA SEABUCK-TICKといったバンドの曲を普段から聴いています。

Visual Rockは音を通して世界観を放ってくる強い魅力があります。

布教したい

この私の趣味を人々に布教したいと考え、サークルのSlackに #visual-rock というチャンネルを作りました。

そこで毎日本日に1曲を

f:id:MSZ006AEUG:20170422144033p:plain

このような具合に手書きで投稿していました。

 

人間が手書きで投稿していると以下のような問題が生じます。

・忘れる

・飽きる

・めんどくさくなる

これらのような問題が生じた結果サービスがそのうち終了してしまうということは想像に難くありませんね。

というわけで、

自動化したい

我々人間は問題を抱えていますが、我々はコンピュータを持っています。コンピュータを持っている我々は自動化という手段を講じることができるのです。

ざっくりした設計

自動で本日の1曲を投稿するBotを作るにあたってざっくりとした設計というかデータフローみたいなものを考えました。

・音楽再生アプリから楽曲一覧を取得

・一曲ランダムで選択して情報取得

・Slackに投稿

こんな具合です。言語はPythonを使いました。理由は楽そうだったから。

楽曲一覧を入手

私は普段音楽再生はDSDネイティブで再生可能なfoobar2000を使用しているのですが、foobarのAPIとかややこしそうという偏見があったのと、Visual Rockの曲だけを取り扱いたいという方針があったので普段使っていないiTunesから楽曲情報を取得する方針にしました。

 

iTunesから楽曲一覧を取得する方法ですが、

minus9d.hatenablog.com

こちらを参考にさせていただきました。

 

まず、iTunes Music Library.xml を探しましたが見つかりません。 

iTunes ライブラリファイルについて - Apple サポート

これを見るとiTunes12.2からは自動でこのxmlを出力しないようになっているらしいです。設定を変更して無事xmlをゲット。

以下さっきのページの通りに楽曲情報リストを作成します。楽曲リストのsong_info_listができました。

ランダムに1曲選ぶ
import random
TodaysSong = random.choice(song_info_list)

こんな具合にランダムに1曲選びます。

SongTitle = TodaysSong["Name"]
ArtistName = TodaysSong["Artist"]
AlbumTitle = TodaysSong["Album"]
SongYear = TodaysSong["Year"]

Slackに投稿するときに必要な情報を格納。

Slackに投稿

テスト投稿用にSlackの #zeta-fortress にIncoming-webhookを設定します。

PythonでSlackに投稿する - Qiita

ここを参考に。

PostText = "本日の1曲\n" + SongTitle + " / " + ArtistName + " (" + SongYear + ") from " + AlbumTitle
requests.post("webhookのURL", data = json.dumps({
    "text": PostText,
    "username": u"Today's Recommend Song",
    "icon_emoji": u":psychedelic:",
}))

Post部分が書けたのでテスト実行。

f:id:MSZ006AEUG:20170422163116p:plain

2回実行したところちゃんとランダムに投稿できてそう。

 

というわけでweb-hookのURLを #visual-rock のものに書き換えてプログラムは完成。

1日1回投稿するようにする

 本日の1曲Botなので1日1回このプログラムが実行されてほしい。

Linuxではcronとかを使うといいらしいのですが、私のiTunesWindows上で動いているのでWindowsでできる方法がいいと思うわけです。

Windowsでこういうことをやる場合はタスクスケジューラという方法があるといいらしい。

Tech TIPS:タスクスケジューラの基本的な使い方(Windows 7/8.x/10編) (1/2) - @IT

ここを見つつ、タスクスケジューラを設定します。毎日18時にプログラムを開始するようにし、プログラム/スクリプトPythonのpath、引数の追加にプログラムのpathを入力し、またログオフ中でもプログラムを実行するように設定します。

実行結果

f:id:MSZ006AEUG:20170422195844p:plain

成功!めでたい!

今後

曲名とかだけ出てても味気ないのでアートワークもiTunes Storeから取ってくるなりして表示したいですね。