python2.5でpython-lastfmを使う

lastfmのapiが使いたくなったので、pythonのラッパーを探したところpython-lastfmと言うモジュールが見つかったので使おうとしたのですが、手間取ったのでメモ書きです。

問題はpython-lastfmではwith文やas文等のpython2.6系で加えられた構文を使っているので2.5系では使えないという事です。(as文がfrom __future__ import出来たら良かったんですけども。) 仕方が無いので自分で書こうかとも考えましたが、思ったよりもコード量が多いので何とか使えないかと試行錯誤してみる事にしました。

結論から言えば、古いリビジョンのソースコードをチェックアウトして、少しソースを修正する事で使えるようになりました。以下がその時のメモ書きになります。

# リビジョン120をチェックアウト
$ svn checkout http://python-lastfm.googlecode.com/svn/trunk@120 python_lastfm
$ cd python_lastfm
# api.pyを修正
$ vim lastfm/api.py
$ svn diff
--- lastfm/api.py       (revision 120)
+++ lastfm/api.py       (working copy)
@@ -629,7 +629,9 @@
         return opener

     def _encode(self, s):
-        if self._input_encoding:
+        if isinstance(s, unicode):
+            return s.encode('utf-8')
+        elif self._input_encoding:
             return unicode(s, self._input_encoding).encode('utf-8')
         else:
             return unicode(s).encode('utf-8')
$ python setup.py install

リビジョン120がpython2.5系で動作する最後のリビジョンです。ただ、そのままだと日本語が通らないのでapi.pyを少し修正する必要があります。修正後は普通にsetup.pyでインストールしてください。以上でpython-lastfmがpython2.5系で使えるのでGAE上でも安心ですね。

これで、簡単にlastfm上のリソースにアクセスできるようになりました。

#!/usr/bin/python
# -*- coding: utf-8 -*-

import lastfm
from lastfm.track import Track

api = lastfm.Api('Your Api Key', input_encoding='utf-8')

# スピッツの人気の曲を列挙する
spitz = api.search_artist('スピッツ')[0]
for track in spitz.top_tracks:
  print track.name

Leave a Reply

Your email address will not be published. Required fields are marked *