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

このエントリーをはてなブックマークに追加
はてなブックマーク - 楽天ウェブサービスを使って商品情報を取得しよう『10日でおぼえるPython入門教室』第3日 1限目メモ
Share on Facebook
Post to Google Buzz
Bookmark this on Yahoo Bookmark
Bookmark this on Livedoor Clip
Share on FriendFeed
楽天ウェブサービスを使って商品情報を取得しよう『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入門教室

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

  1. ピンバック: 『10日でおぼえるPython入門教室』第3日 2限目メモ » ぐるらん

  2. ピンバック: 正誤表『10日でおぼえるPython入門教室』公式正誤表に載ってない正誤表 » ぐるらん

  3. Python 3.1で勉強中です.このページのおかげで挫折せず,大変役立っています.
    3での文法の変更により,

    import urllib を
    from urllib.request import urlopen
    にして,
    xmlfile = urllib.urlopen(url)を
    xmlfile = urlopen(url)
    に替えて,
    print … はprint(…)にすることで動きました.

  4. 最近はGoogleAppEngineやってるので、3はまだやってないですねぇ~
    コメントいただけると、ホント嬉しいです。
    これからも気軽にコメントお願いします!!

  5. ピンバック: Ruby1.9でリファクタリングする!楽天ウェブサービスを使って商品情報を取得しよう『10日でおぼえるPython入門教室』第3日 1限目メモ | ぐるらん

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>