読者です 読者をやめる 読者になる 読者になる

Raku API

Python XML

【追記】Python用のRakuAPIライブラリをお探しの方は、こちらで紹介しているモジュールをお試しください。


楽天市場非公式ウェブサービスRaku APIというのが話題になっているようなので、早速Pythonで書いてみます。cElementTreeモジュール、もしくはPython2.5が必要です。
インターフェイスは、Perlの実装PHPの実装を参考にしました。

try:
    from xml.etree.ElementTree import iterparse
except ImportError:
    from cElementTree import iterparse
import urllib

class RakuAPI(object):
    BASE_URL = "http://rakuapi.ddo.jp/api"
    def search(self, keyword, genre = None):
        params = { 'query' : keyword }
        if genre:
            params['genre'] = genre
        url = RakuAPI.BASE_URL + "?%s" % urllib.urlencode(params)
        doc = urllib.urlopen(url)
        for event, item in iterparse(doc):
            value = {
                'Result' : lambda x : dict([(a.tag, a.text) for a in x]),
                'ResultSet' : lambda x : list([a.text for a in x])
            }.get(item.tag, lambda x: x.text)(item)
            item.text = value
        return item.text

if __name__ == '__main__':
    r = RakuAPI()
    for x in r.search('Core 2 Duo'):
        print x['Url']

出力はこんな感じになります。

http://item.rakuten.co.jp/ebest/4905524351569/
http://item.rakuten.co.jp/akindo/vgc-la70b/
http://www.rakuten.co.jp/maido/506196/1078740/#1024257
http://item.rakuten.co.jp/plusyu/macbook-good/
http://item.rakuten.co.jp/ebest/4547597524213/
http://www.rakuten.co.jp/maido/506196/1066765/#1010183
http://www.rakuten.co.jp/maido/860672/862052/871337/#806265
http://item.rakuten.co.jp/ebest-outlet/4905524351569/
http://www.rakuten.co.jp/mikasacamera/100076/126549/154166/#169540
http://item.rakuten.co.jp/ebest/4547597537770/