classics.

2012/09/07 Friflickr

Last.fm の loved tracks を Google Play Music の Highly rated に反映させたい

前回の続き。書いた。

import Last.fm loved tracks to Google Play Music Highly rated tracks — Gist

前回のスクリプト実行できる環境ならば、Last.fm のユーザー名と API キー書き換えて

$ python lastfm2google.py

を実行してしばらくしたら反映されるはず。自分の Last.fm のお気に入り 1000 曲強でやった限りでは問題なかった。めでたしめでたし。

2012/09/07 Friflickr

Google Play Music のプレイリストをローカルのプレイリストにしたい

と思ったので書いてみました。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 に反映させるようにしようかと。

参考

2012/08/23 Thuflickr

最近の実装っぷり

自宅サーバーオーディオプレイヤーをちょこちょこいじった。Google Play MusicのAndroidアプリが大きめにアルバムアートを表示できる感じなのにインスパイアされて大きめにアルバムアート表示するようにした。検索のUIも修正した。初期と比べると大分変わった感じある。

web audio player gyazo

ついでにオリジナルの機能をパクってオレオレGyazoからワンクリックでFlickrに上げられるようにした。オレオレGyazo管理画面がRubyなのでflickrawというgemを使った。

2012/07/16 Monflickr

soundcloud を自宅サーバーで再生したいメモ

oquno_audio に soundcloud の url を投げる→サーバーで再生 & last.fm に scrobble
というのを考えている。soundcloud の gem は軽く触ってみたけれど問題無さそう。

  • soundcloud なら YouTube とは違って1曲は大したデータ量ではないはずなので、完全にダウンロードしてから再生というのがよさそう(曲情報の処理を他の mp3 と別にするのめんどい)
  • キャッシュの際の関連付けは url↔file(or folder) の DB を作っておいた方がいい。ID3のコメントに入れるのがまっとうな気がするけれど検索に向いてない気がする
  • ダウンロードついでに ID3Tag も勝手に付けたい

2012/05/05 Satflickr

今日の生活改善作業

必要ないと思っていたけれど、ないよりはあった方がいいかなということで自宅サーバーから音が出るオーディオプレイヤー(仮)にシーク機能つけた。プログレスバーのオンマウスでまともなツールチップ表示させるみたいな UI も実装したい。

2011/09/10 Satflickr

Ruby で mp3 に埋めこんであるアルバムアートを取得

自宅サーバー音楽再生( 前のエントリー, その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で画像をリロードするようにした

画面にもアルバムアート表示

2011/02/23 Wedflickr

Webページをmobiに変換してKindleに送る2

http://oquno.com/log/eid2392.html
これの続き。

実運用してみたところ、文字化けと、kindlegenがsegmentation faultとかJSのエラーっぽいので失敗するパターンが発生。文字化けはUTF-8に強制変換で大体対応した。segmentation faultはよくわからないし、JSはscriptタグ除去しても残ったままなのでわからない。まあそんな頻繁にある事例じゃなければいいけれど。

URL投げたらメール送るまでのシェルスクリプトも一応公開しておく。https://gist.github.com/840249

2011/02/23 Wedflickr

Webページをmobiに変換してKindleに送る

単純にページを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を投げたりすればいける。

2011/02/19 Satflickr

自宅サーバープレイヤー改良

new version

Last.fm の track.love と、ディレクトリ構造のインクリメンタル検索(incsearch.jsに少し手を加えた)から、プレイリスト自動生成と再生とか追加。

これ http://oquno.com/log/eid2188.html とかradiko予約録音とか組み合わさって、そこそこ便利になった。音楽流しながら寝落ち率が上がってきている。

2011/02/10 Thuflickr

自宅のLinuxサーバーでmp3を再生してLast.fmにもscrobbleするのをwebから操作

というのを作った。

経緯

  • 自宅のスピーカーで音楽聴きたい
  • デスクトップマシン(普段スピーカーに繋がっている)を起動させるの面倒
  • こたつから出て操作とか面倒
  • Last.fmにscrobbleしたい
  • SSHつないで操作も面倒
  • というようなことを前々から思っていたため、やってみた。

実装

web audio player

レイアウトとか全然凝ってないけどこんな感じ。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
結構前に見てやろうと思ったけどサウンドカードがなくて諦めた