前回の続き。書いた。
import Last.fm loved tracks to Google Play Music Highly rated tracks — Gist前回のスクリプト実行できる環境ならば、Last.fm のユーザー名と API キー書き換えて
$ python lastfm2google.py
を実行してしばらくしたら反映されるはず。自分の Last.fm のお気に入り 1000 曲強でやった限りでは問題なかった。めでたしめでたし。
前回の続き。書いた。
import Last.fm loved tracks to Google Play Music Highly rated tracks — Gist前回のスクリプト実行できる環境ならば、Last.fm のユーザー名と API キー書き換えて
$ python lastfm2google.py
を実行してしばらくしたら反映されるはず。自分の Last.fm のお気に入り 1000 曲強でやった限りでは問題なかった。めでたしめでたし。
と思ったので書いてみました。mt-daapd にローカルの mp3 ファイル入っている場合限定で。
とりあえずAPIのツール入れる。
$ sudo easy_install gmusicapi
コードを書く。
convert Google Play Music playlist to local playlist file — Gistそれで
$ python googleplaylist.py "湯川潮音のマイベストアルバム作った!!"
とかすると設定したフォルダに 湯川潮音のマイベストアルバム作った!!.m3u として吐かれるはず。あまりよく調べてないけど、thumbs up とかの自動で生成されたプレイリストは曲一覧取れなかった。レート変更する API もあるので、次は Last.fm の loved を Google Play Music に反映させるようにしようかと。
参考
oquno_audio に soundcloud の url を投げる→サーバーで再生 & last.fm に scrobble
というのを考えている。soundcloud の gem は軽く触ってみたけれど問題無さそう。
必要ないと思っていたけれど、ないよりはあった方がいいかなということで自宅サーバーから音が出るオーディオプレイヤー(仮)にシーク機能つけた。プログレスバーのオンマウスでまともなツールチップ表示させるみたいな UI も実装したい。
自宅サーバー音楽再生( 前のエントリー, その2 )のWeb UIでジャケ写も見たかった+faviconにしたかったので実装した。一応サイズもRMagickで揃えるように。
require 'RMagick'
require 'id3lib'
tag = ID3Lib.Tag.new("hoge.mp3")
if tag.frame(:APIC) and tag.frame(:APIC)[:data]
image = Magick::Image.from_blob(tag.frame(:APIC)[:data]).first
# 適度に縮小してファイルに書き出し
image.resize_to_fit(64, 64).write("hoge.jpg")
end
ついでに、無かったら amazon/aws でアルバムアートの画像URL取得するのも書いたけど、こんな感じで若干面倒くさかった。
require 'amazon/aws'
require 'amazon/aws/search'
include Amazon::AWS
include Amazon::AWS::Search
ASSOCIATES_ID = 'oq-22'
AWS_SECRET = 'secret'
AWS_KEY_ID = "key"
album = '春愁秋思'
artist = '空気公団'
request = Request.new(AWS_KEY_ID, ASSOCIATES_ID, 'jp', false)
search = ItemSearch.new('Music', {'Title' => album, 'Artist' => artist})
response_group = ResponseGroup.new('Images')
response = request.search(search, response_group)
response.item_search_response.each do {|search_res|
puts search_res.items.item.small_image.url
}
で、適当にJSで画像をリロードするようにした
http://oquno.com/log/eid2392.html
これの続き。
実運用してみたところ、文字化けと、kindlegenがsegmentation faultとかJSのエラーっぽいので失敗するパターンが発生。文字化けはUTF-8に強制変換で大体対応した。segmentation faultはよくわからないし、JSはscriptタグ除去しても残ったままなのでわからない。まあそんな頻繁にある事例じゃなければいいけれど。
URL投げたらメール送るまでのシェルスクリプトも一応公開しておく。https://gist.github.com/840249
単純にページをmobiに変換してKindleに送るというのがあったらいいかと思ったので作ってみるテスト。画像なしだったり自分の管理下でなくてもいいのならばSend to Kindleを使えばいいけれど、画像も欲しかったり個人サービスだと持続しない気がするので。
wgetとかcURLだと別ドメインの画像を含めて一気にダウンロードというのができなかった(調査不足?)ので、pavukとやらを入れた。デフォルトだと再帰的にページ取得しちゃったり、link rel="openid.delegate" のURL取得しちゃったので、以下のようなオプションに落ち着いた。
$ pavuk -singlepage -index_name index.html -fnrules F '*' '1234/%n' -quiet -disable_html_tag link 'http://oquno.com/'
1234のところにはページごとにユニークなIDを入れるとして、ダウンロードが終わったら(カレントディレクトリにkindlegenがあるとして)
$ ./kindlegen '1234/index.html' -o '1234.mobi'
を実行すると 1234/1234.mobi が作成される。これが5MB以下ならば(まあページ1枚なら大体大丈夫だろうけれど) @free.kindle.comで無料でKindle 3 WiFiに送れるのでメールで送信する。送信するメールアドレスはMange Your Kindleのページで追加しておく必要がある。Kindle上では表示されないので、mobiのファイル名は気にしていない。
$ uuencode '1234/1234.mobi' '1234.mobi' | mail -s 'new page2mobi file' 'YOURACCOUNT@free.kindle.com'
でいけるかと思いきや、できなかった。> kindle3 で無料ニュース配信をする(さくらインターネット編)その1 | moiblog
のでここを参考にスクリプトを改変して、あるいはrubyとかでこのあたりを参考に
$ perl sendmail.pl '1234/1234.mobi'
こんなのをシェルスクリプトにまとめて、CGIかなんかからURLを引数に呼び出せるようにするとか、定期的にソーシャルブックマークの新着URLを投げたりすればいける。Last.fm の track.love と、ディレクトリ構造のインクリメンタル検索(incsearch.jsに少し手を加えた)から、プレイリスト自動生成と再生とか追加。
これ http://oquno.com/log/eid2188.html とかradiko予約録音とか組み合わさって、そこそこ便利になった。音楽流しながら寝落ち率が上がってきている。
というのを作った。
レイアウトとか全然凝ってないけどこんな感じ。HTML5で音量コントロールがそれっぽくできるようになったのがいいですね。あと、それっぽい気がしたので再生中にはmarqueeしてみている。
フロントエンドは、適宜XMLHttpRequestでAPIへリクエストして、返ってきたJSONに曲情報とか再生情報が入ってるので適宜反映といった感じ。バックエンドでは、RubyでMPlayerを動かしてるデーモンがあってそれをAPI経由でソケットでコマンド送って操作する。mplayer-rubyを使ってはいるのだけど、結構バグがあったり機能が足りなかったりと色々とひどい感じだったので改造しまくったたこともあり、公開しても動かないのでコードは公開しません。通信部分については、わざわざWeb APIを作らずにWebSocket使ったほうがシンプルにできそうではあったけれど、WebSocketは終わコン説があるのでスルーした。また、Cometはよくわからないのでスルーした。
あと、mplayer-rubyでコマンドごとに同じプロセスの標準出力を読み取っているせいなのか、全然スケールしない様子(秒間1リクエストくらいならいけるか?)なので、Webの操作ページは公開しません。まあ家にいないと音楽も聞こえないし。
Webでの操作はスケールしないけど、Twitter botでも作って、replyで曲のリクエストを受け付けるとかならありかも。データベースはmt-daapd用のを使いまわせるので、検索も難しくはない。
http://blog.meganelab.net/archives/2006/11/21/043150
結構前に見てやろうと思ったけどサウンドカードがなくて諦めた