Last.fm APIを使ってアルバムアートを入手

外部ツールでリッピングすると、WMPのライブラリに入れてもWMPがアルバムアートを取得してくれないんでムカムカしてアルバムアートを取得するスクリプトを書いた。
Last.fmAPIからアルバムアートのURLを取得し、そのURLから画像を.jpgで保存する。
ライブラリはBeautifulSoupとPILを使用。
例外処理とかいろいろ適当なので、使用には注意。

# -*- coding: utf-8 -*-
import urllib2
import re
from BeautifulSoup import BeautifulStoneSoup
import Image
import ImageFileIO

class AlbumArt:
    def __init__(self, artist, album):
        self.api_key = あなたのAPIキー
        self.artist = artist
        self.album = album
        pass

    def openUrl(self):
        artist = re.sub(" ", "%20", self.artist)
        album = re.sub(" ", "%20", self.album)
        url = "http://ws.audioscrobbler.com/2.0/?method=album.getinfo&api_key=%s&artist=%s&album=%s" % (self.api_key, artist, album)
        try:
            xml = urllib2.urlopen(url).read()
            pass
        except Exception:
            print "can't open url"
            return 0
        return xml

    def getImageUrl(self, xml):
        image_url = ""
        soup = BeautifulStoneSoup(xml)
        e = soup.find("lfm")

        if e.has_key("status") and e["status"] == "ok":
            images =  e.findAll("image")
            #mediumサイズ
            if images[1].contents:
                image_url = images[2].contents[0]
                pass
            pass
        if image_url:
            return image_url
        else:
            return 0
        pass

    def saveImage(self, image_url):
        stream = urllib2.urlopen(image_url)
        if stream.info().gettype()[:5] == "image":
            file_name = unicode(self.album + ".jpg")
            image = Image.open(ImageFileIO.ImageFileIO(stream))
            image.save(file_name, quality = 100)
            pass
        else:
            return 0
        print "success! AlbumArt saved as %s" % file_name
        stream.close()
        

if __name__ == "__main__":
    artist = アーティスト名
    album = アルバム名
    hoge = AlbumArt(artist, album)
    xml = hoge.openUrl()
    if xml:
        url = hoge.getImageUrl(xml)
        if url:
            hoge.saveImage(url)
            pass
        pass
    pass