アップデートは慎重に(あるいはPerlによるTweet from Last.fm2スクリプトのおはなし)

ゲームマーケット情報だと思った?
残念、プログラムネタの備忘録メモでした

何も考えずにiTunesを更新した結果、
Tweetmag1cはおろかLast.fm Scrobblerも弾かれるというちょっと笑えない状況に陥る。
そのため、再生環境をかねてから移動予定だったGoogle music Playerに移行して
「Google Play Last.fm Scrobbler」でLast.fmに飛ばすことに。

これはうまく行ったので今度はLast.fmの再生ログからTwitterにつぶやくスクリプトの改修にかかる。
テキストデータを取得できた以前とは違いAPIを介してJSONデータを取得するようになったので、APIトークンを発行した上で

  • APIを用いてJSONデータを取得
    request(GET)で取得JSONデータ$hogeに入れておく
  • 取得したデータをPerl用に整形(JSONモジュール)
    decode_json($hoge->hontent)でデータ構造体に変換し$hogehogeに入れる
  • 曲名と登録時間、延べ登録曲数を抽出し、曲数で更新の有無をチェック
    (なお、起動時にログから前回終了時点の登録時間と曲数を拾うためにFile::ReadBackwardsモジュールを使用)
    曲名:$hogehoge->{recenttracks}->{track}->[0]->{name}
    登録時間:$hogehoge->{recenttracks}->{track}->[0]->{date}->{uts}
    登録曲数:$hogehoge->{recenttracks}->{‘@attr’}->{total}
    注意:登録時間は最新の曲が再生中の場合存在しないことがあるので、
    $hogehoge->{recenttracks}->{track}->[0]->{‘@attr’}->{nowplaying}
    で再生中フラグが存在しない化確認する必要があります
  • 更新されていればTwitterでつぶやく(Net::Twitter::Lite::WithAPIv1_1)
  • ログに曲名とチェック時間、現在の登録曲数を記録

と言った感じで処理をしています。
#実はNET::LastFMモジュールの存在も知っていたんだけど、欲しいのはトラックリストだけだったのでモジュール無しで作っています
気をつけているのは前回と同じつぶやきをしようとしてTwitterから弾かれた場合、スクリプトが強制終了してしまうのを回避する辺りかな?

ソースそのものは過去に参考したサイトのものを流用したものですので非公開ってことでご了承を。

参考
・http://walterhiggins.net/lastfm_to_twitter.html
元スクリプト。これを参考にOath利用スクリプト(現在サイト消失)が公開されていたものを利用しました。
・https://www.last.fm/api
英語のみですが、Last.fmを外部ツールで利用するためのAPI集。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください