楽天ウェブサービスを使って商品情報を取得しよう『10日でおぼえるPython入門教室』第3日 1限目メモ

10日でおぼえるPython入門教室

前回のブログ"『10日でおぼえるPython入門教室』の第3日 メモ"で、「Amazon API仕様変更してて、サンプルコードがエラー(ーー;)使えません。。。調べるの面倒なので、今日は寝ます。。。」と書いたんですけど、AmazonのAPIが8月から仕様変更で、「第3日 1限目」がまったく使えないということで、Amazonの現在のAPI仕様調べるの面倒だし、Amazonって普段まったく使わないんで、よく使っている楽天の楽天ウェブサービスでやってみることにしました(^_^)v

第3日 1限目「Amazon APIを使って書籍情報を取得しよう」改め、

楽天ウェブサービスを使って商品情報を取得しよう

楽天ウェブサービスを使う準備

楽天ウェブサービスにいって、デベロッパーIDを取得します。

ソースコードのお約束、で知らなかったこと

if __name__ == "__main__":

このファイルが外部からインポートされて使われる時には「偽」。このファイルのみを直接実行する時は「真」。
そういうことだったのかぁ~。なんでかなって思ってたんですよね(笑)

楽天ウェブサービスのデータをリクエストする

---「デベロッパーID」と検索語句「VQ1015 ENTRY」を入力した場合のURL

http://api.rakuten.co.jp/rws/2.0/rest?developerId=デベロッパーID&operation=ItemSearch&version=2009-04-15&keyword=VQ1015%20ENTRY"

上記コードに、取得した「デベロッパーID」と、「検索したい語句」(keyword=のところ、今回は「VQ1015 ENTRY」)を記述し、このURLをブラウザで開くと、楽天で「VQ1015 ENTRY」を検索した結果がXMLが表示されます。
※「VQ1015%20ENTRY」の「%20」は「スペース」のURLエンコーディング。

---「デベロッパーID」と検索語句「VQ1015 ENTRY」を入力した場合のURLをPythonコード化

「rakuten.py」などで保存して、実行。
※「rakuten_developerId = "0123456789"」の「"0123456789"」は取得したデベロッパーIDに置き換えてください。

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

import urllib

def main(url):
    xmlfile = urllib.urlopen(url)
    return xmlfile

if __name__ == "__main__":
    rakuten_api_url = "http://api.rakuten.co.jp/rws/2.0/rest?"
    rakuten_developerId = "0123456789"
    Keywords = "VQ1015%20ENTRY"
    url = rakuten_api_url + "developerId=" + rakuten_developerId + "&operation=ItemSearch&version=2009-04-15&keyword=" + Keywords
    m = main(url)
    print m.read()

楽天ウェブサービスのデータから必要なものを抜き取る

『10日でおぼえるPython入門教室』のサンプルでは、検索結果のヒット件数と商品識別番号をAmazonから抜き取るでしたが、楽天で「VQ1015 ENTRY」の検索結果のヒット件数と商品名ということでやってみました。

楽天ウェブサービスのXML

Aが検索結果のヒット件数、Bが商品名。
「node+数字」は「root」から、たどった階層です。

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

import urllib
from xml.etree.ElementTree import ElementTree

def main(url):
    xmlfile = urllib.urlopen(url)
    tree = ElementTree(file=xmlfile)
    root = tree.getroot()
    for node1 in root.getchildren():
            if node1.tag == "Body":
                for node2 in node1.getchildren():
                     if node2.tag == "{http://api.rakuten.co.jp/rws/rest/ItemSearch/2009-04-15}ItemSearch":
                         for node3 in node2.getchildren():
                             if node3.tag == "hits":
                                 print node3.text
                             elif node3.tag == "Items":
                                 for node4 in node3.getchildren():
                                     if node4.tag == "Item":
                                         for node5 in node4.getchildren():
                                             if node5.tag == "itemName":
                                                 print node5.text

if __name__ == "__main__":
    rakuten_api_url = "http://api.rakuten.co.jp/rws/2.0/rest?"
    rakuten_developerId = "0123456789"
    Keywords = "VQ1015%20ENTRY"
    url = rakuten_api_url + "developerId=" + rakuten_developerId + "&operation=ItemSearch&version=2009-04-15&keyword=" + Keywords
    m = main(url)

※「rakuten_developerId = "0123456789"」の「"0123456789"」は取得したデベロッパーIDに置き換えてください。

実行結果

ファイルを実行すると、以下の検索結果のヒット件数と商品名が抜き出せます。

3
Vista Quest(ビスタクエスト) VQ1015 ENTRY トイデジカメ ブラック
Vista Quest(ビスタクエスト) VQ1015 ENTRY トイデジカメ イエロー
Vista Quest(ビスタクエスト) VQ1015 ENTRY トイデジカメ ブルー

ここまでくるのに、結構時間かかっちゃいました。。。

楽天ブックスで『10日でおぼえるPython入門教室』を買う

10日でおぼえるPython入門教室

「その他記事」の関連記事