個人的によく聴くInterFMですが、プレイリストをTwitterで流して欲しいなと思ったけれど無かったのでjavaでそんなことをしてくれるbotを作ってみました。作ったのはこれ → https://twitter.com/InterfmNowplay
実行可能なjarをさくらVPSにデプロイしてcronで10秒ごとに動かしています。
結果いろいろと知ったのでメモです。
###■Twitter4JによるTwitter操作
Twitter4J - http://twitter4j.org/ja/index.html
JavaでTwitterのAPIを扱う場合、Twitter4Jというライブラリが便利です。
認証関連はTwitterのページで作成できるキー4つ(consumerKey/consumerSecret/accessToken/accessTokenSecret)をpropertiesファイルに定義するだけです。
また、Tweetするためのコードはこれだけ。
Twitter twitter = TwitterFactory.getSingleton();
User user = twitter.verifyCredentials();
Status status = twitter.updateStatus(singer + "/\"" + music + "\"" + "\t" + time);
Twitter用のオブジェクトを作って、認証通して、ツイートという流れですね。
###■jsoupによるHTMLのパース
jsoup - http://jsoup.org/
プレイリストの元ネタですが、InterFMで特にAPIを用意してくれてるわけでもないので、HPからスクレイピングするしかありません。パースするのに何かいいライブラリないかなと探したところ、jsoupというライブラリが良さ気だったのでとりあえず試してみました。
あるページのHTMLを取得するコードはこれだけです。
Document document = Jsoup.connect("https://www.interfm.co.jp/search/").get();
以下のコードでHTML全体を文字列で取得できます。
document.outerHtml();
要素の取り出しですが、CSSのセレクタも使えますし、
Elements elements = document.select("table tr");
jsoup特有の取り出し方もあります。
Element element = elements.last();
結果、例えば以下が同義だったりします。
Element element = document.select("table tr").last();
Element element = document.select("table tr:last-child").get(0);
で、ごにょごにょやって、下記のようなtableから時間と曲名とアーティストを抜き出します。あとはそれをさっきのTwitter4Jを使ってtweet。
###■Twitterアカウント作成に電話番号認証が必要になっていた
ラジオのNowPlayingを呟くBotなんて当然サブ垢で作りたかったのでとっても困りました。2014年の12月頃から?電話番号認証が必要になった模様です。電話番号を登録し、その番号にSMSで送られてくるキーを入力することで認証が通ります。これまでのように自由にサブ垢が作れなくなったということです。
とりあえず作成に必要だということで、メイン垢の方にはまだ番号登録していなかったので、仕方なく今回作ったサブ垢に番号を登録しました。番号認証はあとで外したいと思いますが、外したらBot動かなくなるのかな・・?
###■おまけ
InterFMは洋楽中心(去年くらいから邦楽も流すようになってきたらしい)ですが、フジロックのオフィシャルメディアだけあってか、上質な洋楽()がどんどん流れてきて良いですよ〜。うちではiPhoneのRadikoをBluetoothでスピーカに繋げてずっと流してます。フジロック系の音楽が好きな方なら絶対ハマると思います!