15
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Twitter4Jを使ってTwitterのBotを作ってみた結果

Last updated at Posted at 2015-02-23

個人的によく聴く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するためのコードはこれだけ。

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を取得するコードはこれだけです。

HTML取得
Document document = Jsoup.connect("https://www.interfm.co.jp/search/").get();

以下のコードでHTML全体を文字列で取得できます。

文字列取得
document.outerHtml();

要素の取り出しですが、CSSのセレクタも使えますし、

CSSのセレクタ
Elements elements = document.select("table tr");

jsoup特有の取り出し方もあります。

CSSのセレクタ
Element element = elements.last();

結果、例えば以下が同義だったりします。

Element element = document.select("table tr").last();
Element element = document.select("table tr:last-child").get(0);

で、ごにょごにょやって、下記のようなtableから時間と曲名とアーティストを抜き出します。あとはそれをさっきのTwitter4Jを使ってtweet。

スクリーンショット 2015-02-20 18.23.35.png

###■Twitterアカウント作成に電話番号認証が必要になっていた
ラジオのNowPlayingを呟くBotなんて当然サブ垢で作りたかったのでとっても困りました。2014年の12月頃から?電話番号認証が必要になった模様です。電話番号を登録し、その番号にSMSで送られてくるキーを入力することで認証が通ります。これまでのように自由にサブ垢が作れなくなったということです。
とりあえず作成に必要だということで、メイン垢の方にはまだ番号登録していなかったので、仕方なく今回作ったサブ垢に番号を登録しました。番号認証はあとで外したいと思いますが、外したらBot動かなくなるのかな・・?

###■おまけ
InterFMは洋楽中心(去年くらいから邦楽も流すようになってきたらしい)ですが、フジロックのオフィシャルメディアだけあってか、上質な洋楽()がどんどん流れてきて良いですよ〜。うちではiPhoneのRadikoをBluetoothでスピーカに繋げてずっと流してます。フジロック系の音楽が好きな方なら絶対ハマると思います!

15
14
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?