{"id":163,"date":"2009-08-02T01:51:31","date_gmt":"2009-08-01T16:51:31","guid":{"rendered":"http:\/\/www.typea.info\/blog\/index.php\/2009\/08\/02\/amazon_product_advertising_api_gaepython\/"},"modified":"2009-08-02T01:51:31","modified_gmt":"2009-08-01T16:51:31","slug":"amazon_product_advertising_api_gaepython","status":"publish","type":"post","link":"https:\/\/www.typea.info\/blog\/index.php\/2009\/08\/02\/amazon_product_advertising_api_gaepython\/","title":{"rendered":"Amazon Product Advertising API \u3092 GAE\/Python \u306b\u7d44\u307f\u8fbc\u3080"},"content":{"rendered":"<p>\u5148\u65e5\u3001Amazon Product (\u4ee5\u4e0b\u7565) \u306b\u3001<a href=\"\/blg\/glob\/2009\/07\/amazon_product_advertising_api.html\">\u7f72\u540d\u3092\u7d44\u307f\u8fbc\u3080\u3053\u3068\u304c\u3067\u304d\u305f<\/a>\u306e\u3067\u3001\u3053\u308c\u3082<a href=\"\/blg\/glob\/2009\/07\/google_app_engine.html\">\u5148\u65e5\u52d5\u4f5c\u78ba\u8a8d\u304c\u3068\u308c\u305f\u3001Google App Engine for Python<\/a>\u306b\u7d44\u307f\u8fbc\u3093\u3067\u307f\u308b\u3002<\/p>\n<p>Python \u3092\u3084\u308a\u3060\u3057\u3066\u9593\u304c\u306a\u3044\u306e\u3067\u3001\u975e\u5e38\u8b58\u306a\u5b9f\u88c5\u3092\u3057\u3066\u3044\u308b\u304b\u3082\u30fb\u30fb\u30fb \u304c\u3001\u307e\u3041\u6c17\u306b\u305b\u305a\u306b\u3002<\/p>\n<p>\u5148\u65e5\u7f72\u540d\u3092\u7d44\u307f\u8fbc\u307f\u3001Amazon Web Services \u3078\u30ea\u30af\u30a8\u30b9\u30c8\u3059\u308bREST URL\u306e\u751f\u6210\u3001\u30d6\u30e9\u30a6\u30b6\u3067\u306e\u52d5\u4f5c\u78ba\u8a8d\u304c\u3067\u304d\u305f\u306e\u3067\u3001\u5f8c\u3084\u308b\u3079\u304d\u3053\u3068\u306f\u3001<\/p>\n<ol>\n<li>REST URL \u3092\u30ea\u30af\u30a8\u30b9\u30c8\u3057\u3066\u3001\u30ec\u30b9\u30dd\u30f3\u30b9\u3092\u53d6\u5f97\u3059\u308b <\/li>\n<li>\u53d6\u5f97\u3057\u305f\u30ec\u30b9\u30dd\u30f3\u30b9(XML)\u3092\u89e3\u6790\u3059\u308b <\/li>\n<li>\u89e3\u6790\u3057\u305f\u5185\u5bb9\u304b\u3089HTML\u3092\u4f5c\u6210\u3059\u308b <\/li>\n<li>Google App Engine \u306b\u7d44\u307f\u8fbc\u3080 <\/li>\n<li>\u5b8c\u6210\uff01 <\/li>\n<\/ol>\n<p>\u3066\u306a\u611f\u3058\u3002<\/p>\n<p>\u4ee5\u4e0b\u8a73\u7d30\u3092\u8a18\u8ff0<\/p>\n<h3>1.REST URL \u3092\u30ea\u30af\u30a8\u30b9\u30c8\u3057\u3066\u3001\u30ec\u30b9\u30dd\u30f3\u30b9\u3092\u53d6\u5f97<\/h3>\n<p><a href=\"http:\/\/www.python.jp\/doc\/release\/lib\/module-urllib2.html\">urllib2<\/a>\u3092\u5229\u7528\u3059\u308b<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"2\" width=\"400\">\n<tbody>\n<tr>\n<td class=\"code\" valign=\"top\" width=\"400\">import urllib2          <br \/>&#160;&#160;&#160; :           <br \/>f = urllib2.urlopen(url)           <br \/>f.read()<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u3053\u308c\u3060\u3051\u3002\u3093\u30fc\u697d\u3060\u3002Python\u306e\u4eba\u304cJava\u3092\u307e\u3069\u308d\u3063\u3053\u3057\u304c\u308b\u306e\u3082\u308f\u304b\u308b\u3002<\/p>\n<h3>2.\u53d6\u5f97\u3057\u305f\u30ec\u30b9\u30dd\u30f3\u30b9(XML)\u3092\u89e3\u6790\u3059\u308b <\/h3>\n<p><a href=\"http:\/\/typea-mixi01.appspot.com\/yh_s?q=XPath%E3%81%AA%E3%81%A9%E3%82%82%E6%A8%99%E6%BA%96%E3%81%A7%E4%BD%BF%E3%81%88%E3%82%8B%E3%82%88%E3%81%86\">XPath\u306a\u3069\u3082\u6a19\u6e96\u3067\u4f7f\u3048\u308b\u3088\u3046<\/a>\u3060\u3051\u3069\u3001\u307e\u305a\u306f\u3001\u5358\u7d14\u306a\u4f8b\u306a\u306e\u3067\u3001<a href=\"http:\/\/typea-mixi01.appspot.com\/yh_s?q=SAX%E3%83%91%E3%83%BC%E3%82%B5%E3%83%BC\">SAX\u30d1\u30fc\u30b5\u30fc<\/a>\u3092\u5229\u7528\u3059\u308b\u3002 <a href=\"http:\/\/www.python.jp\/doc\/release\/lib\/expat-example.html\">\u3053\u306e\u4f8b<\/a>\u3092\u898b\u308c\u3070\u3084\u308b\u3079\u304d\u3053\u3068\u306f\u4e00\u76ee\u77ad\u7136\u3002<\/p>\n<p>\u305f\u3060\u3001\u89e3\u6790\u3057\u306a\u304c\u3089\u7d50\u679c\u3092\u751f\u6210\u3057\u3066\u3044\u304f\u306e\u306b\u3001\u30cf\u30f3\u30c9\u30e9\u95a2\u6570\u306e\u5916\u5074\u3067\u72b6\u614b\u3092\u7ba1\u7406\u3057\u3066\u304a\u304d\u305f\u3044\u306e\u3060\u3051\u308c\u3069\u3001<strike>Python\u306e\u5909\u6570\u3068\u30b9\u30b3\u30fc\u30d7\u306e\u53d6\u308a\u6271\u3044\u65b9\u306e\u5e38\u8b58\u304c\u4eca\u3072\u3068\u3064\u308f\u304b\u3063\u3066\u3044\u306a\u3044\u3002\u30b0\u30ed\u30fc\u30d0\u30eb(\u30d5\u30a1\u30a4\u30eb\uff1f)\u30ec\u30d9\u30eb\u3067\u3068\u308a\u3042\u3064\u304b\u3063\u3066\u3044\u3044\u3082\u306e\u306a\u306e\u304b\u3057\u3089\uff1f\u30b5\u30d6\u30af\u30e9\u30b9\u5316\u3057\u305f\u30d1\u30fc\u30b5\u30fc\u306e\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3092\u4f5c\u308c\u308b\u3068\u3044\u3044\u306e\u3060\u3051\u308c\u3069<\/strike>\u3002<\/p>\n<p>\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u306e\u30e1\u30bd\u30c3\u30c9\u3068\u3057\u3066\u30cf\u30f3\u30c9\u30e9\u3092\u6301\u305f\u305b\u3066\u3001\u72b6\u614b\u3092\u30a4\u30f3\u30b9\u30bf\u30f3\u30b9\u3067\u7ba1\u7406\u3059\u308b\u3053\u3068\u304c\u53ef\u80fd\u3002\u30e1\u30bd\u30c3\u30c9\u306e\u7b2c1\u5f15\u6570\u306b\u306f self \u3092\u8a2d\u5b9a\u3059\u308b\u5fc5\u8981\u304c\u3042\u308b\u306e\u3067\u3001\u30b7\u30b0\u30cd\u30c1\u30e3\u304c\u5909\u308f\u308b\u306e\u3067\u7121\u7406\u3060\u3068\u601d\u3044\u8fbc\u3093\u3067\u305f\u3002<\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"2\" width=\"400\">\n<tbody>\n<tr>\n<td class=\"code\" valign=\"top\" width=\"400\">\n<p>&gt;&gt;&gt; class Foo:            <br \/>&#8230;&#160;&#160;&#160;&#160; f1 = &#8221;             <br \/>&#8230;&#160;&#160;&#160;&#160; def bar(self, msg):             <br \/>&#8230;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; print msg             <br \/>&#8230;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; self.f1 = &#8216;called&#8217;             <br \/>&#8230;&#160;&#160;&#160;&#160; def status(self):             <br \/>&#8230;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; print self.f1             <br \/>&#8230;             <br \/>&gt;&gt;&gt; f =&#160; Foo()             <br \/>&gt;&gt;&gt; x = f.bar             <br \/>&gt;&gt;&gt; x(&#8216;test&#8217;)             <br \/>test             <br \/>&gt;&gt;&gt; f.status()             <br \/>called<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>  <\/p>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"2\" width=\"436\">\n<tbody>\n<tr>\n<td class=\"code\" valign=\"top\" width=\"434\">\n<p>import urllib2            <br \/>import xml.parsers.expat             <br \/># \u8981\u7d20\u306e\u958b\u59cb\u3092\u51e6\u7406\u3059\u308b\u3054\u3068\u306b\u547c\u3073\u51fa\u3055\u308c\u308b\u30cf\u30f3\u30c9\u30e9\u95a2\u6570\u306e\u5b9a\u7fa9             <br \/>def StartElementHandler(name, attributes):             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; \uff1a             <br \/># \u8981\u7d20\u306e\u7d42\u7aef\u3092\u51e6\u7406\u3059\u308b\u3054\u3068\u306b\u547c\u3073\u51fa\u3055\u308c\u308b\u30cf\u30f3\u30c9\u30e9\u95a2\u6570\u306e\u5b9a\u7fa9             <br \/>def EndElementHandler(name):             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; \uff1a             <br \/># \u6587\u5b57\u30c7\u30fc\u30bf\u3092\u51e6\u7406\u3059\u308b\u3068\u304d\u306b\u547c\u3073\u3060\u3055\u308c\u308b\u30cf\u30f3\u30c9\u30e9\u95a2\u6570\u306e\u5b9a\u7fa9             <br \/>def CharacterDataHandler(data):             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; \uff1a             <br \/># XMLParser\u306e\u751f\u6210             <br \/>p = xml.parsers.expat.ParserCreate()             <br \/># \u751f\u6210\u3057\u305fParser\u306b\u30cf\u30f3\u30c9\u30e9\u3092\u30bb\u30c3\u30c8             <br \/>p.StartElementHandler = StartElementHandler             <br \/>p.EndElementHandler = EndElementHandler             <br \/>p.CharacterDataHandler = CharacterDataHandler             <br \/># \u30ea\u30af\u30a8\u30b9\u30c8\u306e\u5b9f\u884c             <br \/>f = urllib2.urlopen(url)             <br \/># \u89e3\u6790             <br \/>p.Parse(f.read()) <\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>\u4e0a\u8a18\u30012\u3067\u3001XML\u3092\u89e3\u6790\u3057\u306a\u304c\u3089\u7d50\u679c\u30aa\u30d6\u30b8\u30a7\u30af\u30c8\u3092\u4f5c\u3063\u3066\u304a\u3044\u3066\u3001\u305d\u308c\u304b\u3089HTML\u3092\u751f\u6210<\/p>\n<h3>4.Google App Engine \u306b\u7d44\u307f\u8fbc\u3080<\/h3>\n<p>\u4e0a\u8a18\u624b\u9806\u3092\u8e0f\u307e\u3048\u3066\u3001<a href=\"\/blg\/glob\/2008\/09\/google_app_engine_http_form_12.html\">\u3053\u306e\u3042\u305f\u308a\u306e\u96db\u5f62<\/a>\u306b\u3001Amazon Web Services\u306e\u547c\u3073\u51fa\u3057\u3092\u7d44\u307f\u8fbc\u3080\u3002<\/p>\n<p>import \u3057\u3066\u3044\u308b\u3001amazon_ecs \u306f\u3001<a href=\"\/blg\/glob\/2009\/07\/amazon_product_advertising_api.html\">\u524d\u56de\u4f5c\u6210<\/a>\u3057\u305f\u3082\u306e\u3002 ItemSearch \u3060\u3051\u5b9f\u884c\u3067\u304d\u308b\u72b6\u614b\u3002<\/p>\n<p>localhost\u3067\u3001\u5b9f\u884c\u78ba\u8a8d\u3067\u304d\u305f\u3089\u3001<a href=\"\/blg\/glob\/2009\/07\/google_app_engine.html\">\u30c7\u30d7\u30ed\u30a4\u3059\u308b<\/a>\u3002<\/p>\n<h3>5.\u5b8c\u6210\uff01<\/h3>\n<table border=\"1\" cellspacing=\"0\" cellpadding=\"2\" width=\"620\">\n<tbody>\n<tr>\n<td class=\"code\" valign=\"top\" width=\"618\">\n<p>#!Python2.6            <br \/># -*- coding: utf-8 -*- <\/p>\n<p>from google.appengine.ext import webapp            <br \/>from google.appengine.ext.webapp.util import run_wsgi_app <\/p>\n<p>import amazon_ecs            <br \/>import urllib2             <br \/>import xml.parsers.expat <\/p>\n<p>class SearchedItem:            <br \/>&#160;&#160;&#160; &#8221;&#8217; Amazon ItemSearch Operation \u306e\u7d50\u679c\u683c\u7d0d&#160; &#8221;&#8217;             <br \/>&#160;&#160;&#160; def __init(self)__:&#160;&#160;&#160; <\/p>\n<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; self.asin = &#8221;            <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; self.detailPageURL = &#8221;             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; self.smallImageURL = &#8221; <\/p>\n<p>class SAXTagHandler:            <br \/>&#160;&#160;&#160; def __init__(self):             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; # XMLParser(SAX)\u306e\u72b6\u614b\u5236\u5fa1             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; self.proc_start = False             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; self.img_start = False             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; self.now_key = &#8221;             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; self.item_list = []             <br \/>&#160;&#160;&#160; def startElementHandler(self, name, attributes):             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8221;&#8217; xml.parsers.expat XMLParser \u306e\u30cf\u30f3\u30c9\u30e9             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; \u8981\u7d20\u306e\u958b\u59cb\u3092\u51e6\u7406\u3059\u308b\u3054\u3068\u306b\u547c\u3073\u51fa\u3055\u308c\u308b             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; @see <a href=\"http:\/\/www.python.jp\/doc\/release\/lib\/xmlparser-objects.html\">http:\/\/www.python.jp\/doc\/release\/lib\/xmlparser-objects.html<\/a>             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8221;&#8217;             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; if name == &#8216;Items&#8217;:             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; self.proc_start = True             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; if name == &#8216;SmallImage&#8217;:             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; self.img_start = True             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; if self.proc_start:             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if name == &#8216;Item&#8217;:             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; self.item_list.append(SearchedItem())             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; else:             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; self.now_key = name             <br \/>&#160;&#160;&#160; def endElementHandler(self, name):             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8221;&#8217; xml.parsers.expat XMLParser \u306e\u30cf\u30f3\u30c9\u30e9             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; \u8981\u7d20\u306e\u7d42\u7aef\u3092\u51e6\u7406\u3059\u308b\u3054\u3068\u306b\u547c\u3073\u51fa\u3055\u308c\u308b             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; @see <a href=\"http:\/\/www.python.jp\/doc\/release\/lib\/xmlparser-objects.html\">http:\/\/www.python.jp\/doc\/release\/lib\/xmlparser-objects.html<\/a>             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8221;&#8217;             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; if name == &#8216;Items&#8217;:             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; self.proc_start = False             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; if name == &#8216;SmallImage&#8217;:             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; self.img_start = False             <br \/>&#160;&#160;&#160; def characterDataHandler(self, data):             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8221;&#8217; xml.parsers.expat XMLParser \u306e\u30cf\u30f3\u30c9\u30e9             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; \u6587\u5b57\u30c7\u30fc\u30bf\u3092\u51e6\u7406\u3059\u308b\u3068\u304d\u306b\u547c\u3073\u3060\u3055\u308c\u308b             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; @see <a href=\"http:\/\/www.python.jp\/doc\/release\/lib\/xmlparser-objects.html\">http:\/\/www.python.jp\/doc\/release\/lib\/xmlparser-objects.html<\/a>             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; &#8221;&#8217;             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; if self.proc_start:             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; idx = len(self.item_list)             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; idx = idx -1             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if idx &gt;= 0:             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if self.now_key == &#8216;ASIN&#8217;:             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; self.item_list[idx].asin = data             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if self.now_key == &#8216;DetailPageURL&#8217;:             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; self.item_list[idx].detailPageURL = data             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if self.img_start and self.now_key == &#8216;URL&#8217;:             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; self.item_list[idx].smallImageURL = data <\/p>\n<p>class MainPage(webapp.RequestHandler):            <br \/>&#160;&#160;&#160; def get(self):             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; self.redirect(&#8216;\/am_is?q=amazon&#8217;) <\/p>\n<p>class AmazonItemSearch(webapp.RequestHandler):            <br \/>&#160;&#160;&#160; &#8221;&#8217; Amazon Product Advertising API \u3092\u5229\u7528\u3057\u3001\u30ad\u30fc\u30ef\u30fc\u30c9\u691c\u7d22\u3092\u884c\u3046             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; example <a href=\"http:\/\/typea-mixi01.appspot.com\/am_is?q=book\">http:\/\/typea-mixi01.appspot.com\/am_is?q=book<\/a>             <br \/>&#160;&#160;&#160; &#8221;&#8217;             <br \/>&#160;&#160;&#160; def get(self):             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; #\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u5207\u308a\u51fa\u3057 request.get\u304c\u6a5f\u80fd\u3057\u306a\u3044             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; #keyword = self.request.get(&#8216;q&#8217;)             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; keyword = &#8221;             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; queries = self.request.query_string.split(&#8216;&amp;&#8217;)             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; for query in queries:             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; pair = query.split(&#8216;=&#8217;)             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; if pair[0] == &#8216;q&#8217;:             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; keyword = pair[1]             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; break; <\/p>\n<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; #\u30d1\u30e9\u30e1\u30fc\u30bf\u306e\u30c7\u30b3\u30fc\u30c9            <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; #@see <a href=\"http:\/\/www.findxfine.com\/default\/495.html\">http:\/\/www.findxfine.com\/default\/495.html<\/a>             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; #FireFox \u306e\u30a2\u30c9\u30ec\u30b9\u30d0\u30fc\u306b\u6f22\u5b57\u3092\u6253\u3064\u3068UTF-8\u3067\u306a\u3044\u30b3\u30fc\u30c9\u306b\u30a8\u30f3\u30b3\u30fc\u30c9\u3055\u308c\u3066\u3057\u307e\u3046\uff1f             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; keyword = urllib2.unquote(keyword) #.encode(&#8216;utf-8&#8217;)             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; if keyword == &#8221;:             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; keyword = &#8216;amazon&#8217;             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; operation = amazon_ecs.ItemSearch()             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; operation.keywords(keyword)             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; operation.search_index(&#8216;Books&#8217;)             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; operation.response_group(&#8216;Small&#8217;)             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; request = operation.request() <\/p>\n<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; # XMLParser\u306e\u751f\u6210\u3068\u30cf\u30f3\u30c9\u30e9\u306e\u30bb\u30c3\u30c8            <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; h = SAXTagHandler()             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; p = xml.parsers.expat.ParserCreate()             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; p.StartElementHandler = h.startElementHandler             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; p.EndElementHandler = h.endElementHandler             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; p.CharacterDataHandler = h.characterDataHandler <\/p>\n<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160; # \u30ea\u30af\u30a8\u30b9\u30c8\u306e\u5b9f\u884c\u3068\u89e3\u6790            <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; f = urllib2.urlopen(request)             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; p.Parse(f.read())             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160; for itm in h.item_list:             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; self.response.out.write(&#8216;&lt;a href=&quot;%s&quot; style=&quot;padding-left:2px&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;%s&quot; border=&quot;0&quot;\/&gt;&lt;\/a&gt;&#8217;             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; % (itm.detailPageURL, itm.smallImageURL))             <br \/>application = webapp.WSGIApplication([             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; (&#8216;\/&#8217;, MainPage),             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; (&#8216;\/am_is&#8217;, AmazonItemSearch)             <br \/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; ], debug=True) <\/p>\n<p>def main():            <br \/>&#160;&#160;&#160; run_wsgi_app(application) <\/p>\n<p>if __name__ == &quot;__main__&quot;:            <br \/>&#160;&#160;&#160; main()<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p><a href=\"http:\/\/typea-mixi01.appspot.com\/am_is?q=Python\">\u5b8c\u6210\u3057\u307e\u3057\u305f<\/a> \u305f\u3060\u3001\u672c\u306e\u30b5\u30e0\u30cd\u30a4\u30eb\u3092\u6a2a\u306b\u4e26\u3079\u308b\u3060\u3051\u3067\u3059\u304c\u3002<\/p>\n<p><a href=\"https:\/\/www.typea.info\/blog\/wp-content\/uploads\/image\/AmazonProductAdvertisingAPIGAEPython_CA7\/gae_py01.jpg\"><img loading=\"lazy\" decoding=\"async\" style=\"border-right-width: 0px; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px\" border=\"0\" alt=\"gae_py01\" src=\"https:\/\/www.typea.info\/blog\/wp-content\/uploads\/image\/AmazonProductAdvertisingAPIGAEPython_CA7\/gae_py01_thumb.jpg\" width=\"474\" height=\"123\" \/><\/a> <\/p>\n<p><a href=\"http:\/\/typea-mixi01.appspot.com\/yh_s?q=%E3%81%BE%E3%81%9F%E4%B8%80%E6%AD%A9%E9%87%8E%E6%9C%9B%E3%81%AB%E8%BF%91%E3%81%A5%E3%81%84%E3%81%9F%EF%BC%81\">\u307e\u305f\u4e00\u6b69\u91ce\u671b\u306b\u8fd1\u3065\u3044\u305f\uff01<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u5148\u65e5\u3001Amazon Product (\u4ee5\u4e0b\u7565) \u306b\u3001\u7f72\u540d\u3092\u7d44\u307f\u8fbc\u3080\u3053\u3068\u304c\u3067\u304d\u305f\u306e\u3067\u3001\u3053\u308c\u3082\u5148\u65e5\u52d5\u4f5c\u78ba\u8a8d\u304c\u3068\u308c\u305f\u3001Google App Engine for Python\u306b\u7d44\u307f\u8fbc\u3093\u3067\u307f\u308b\u3002 Python \u3092\u3084\u308a\u3060\u3057\u3066\u9593\u304c\u306a [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"sns_share_botton_hide":"","vkExUnit_sns_title":"","_vk_print_noindex":"","sitemap_hide":"","_veu_custom_css":"","veu_display_promotion_alert":"","vkexunit_cta_each_option":"","footnotes":""},"categories":[25,19],"tags":[],"class_list":["post-163","post","type-post","status-publish","format-standard","hentry","category-amazon-web-services","category-googleappengine"],"veu_head_title_object":{"title":"","add_site_title":""},"_links":{"self":[{"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/posts\/163","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/comments?post=163"}],"version-history":[{"count":0,"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/posts\/163\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/media?parent=163"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/categories?post=163"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.typea.info\/blog\/index.php\/wp-json\/wp\/v2\/tags?post=163"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}