[Checkins] SVN: Sandbox/luciano/kirbi/src/kirbi/ first stab at fetching Amazon.com metadata

Luciano Ramalho luciano at ramalho.org
Mon Jul 9 14:07:15 EDT 2007


Log message for revision 77666:
  first stab at fetching Amazon.com metadata
  

Changed:
  U   Sandbox/luciano/kirbi/src/kirbi/book.py
  U   Sandbox/luciano/kirbi/src/kirbi/demo/dump.py
  A   Sandbox/luciano/kirbi/src/kirbi/fetch/
  A   Sandbox/luciano/kirbi/src/kirbi/fetch/amazon_fetch.py
  A   Sandbox/luciano/kirbi/src/kirbi/fetch/item-ok.xml
  A   Sandbox/luciano/kirbi/src/kirbi/tests/
  A   Sandbox/luciano/kirbi/src/kirbi/tests/book_tests.py

-=-
Modified: Sandbox/luciano/kirbi/src/kirbi/book.py
===================================================================
--- Sandbox/luciano/kirbi/src/kirbi/book.py	2007-07-09 15:53:10 UTC (rev 77665)
+++ Sandbox/luciano/kirbi/src/kirbi/book.py	2007-07-09 18:07:15 UTC (rev 77666)
@@ -23,7 +23,7 @@
                            description=u"ISBN in 10 or 13 digit format"
                            )
     creators = schema.List(title=u"Authors", required=False,
-                           value_type=schema.TextLine(), default=[])
+                           value_type=schema.TextLine())
     edition = schema.TextLine(title=u"Edition", required=False)
     publisher = schema.TextLine(title=u"Publisher", required=False)
     issued = schema.TextLine(title=u"Issued", required=False)

Modified: Sandbox/luciano/kirbi/src/kirbi/demo/dump.py
===================================================================
--- Sandbox/luciano/kirbi/src/kirbi/demo/dump.py	2007-07-09 15:53:10 UTC (rev 77665)
+++ Sandbox/luciano/kirbi/src/kirbi/demo/dump.py	2007-07-09 18:07:15 UTC (rev 77666)
@@ -66,6 +66,14 @@
     for book in books.values():
         books2.append(book)
     pprint(books2)
+    
+def dump_tr():
+    import MySQLdb
+    db = MySQLdb.connect(host="localhost", user="luciano", passwd=sys.argv[1],
+        db="horde")
+    cursor = db.cursor()
+
         
 if __name__=='__main__':
-    dump()
\ No newline at end of file
+    # dump()
+    dump_tr()
\ No newline at end of file

Added: Sandbox/luciano/kirbi/src/kirbi/fetch/amazon_fetch.py
===================================================================
--- Sandbox/luciano/kirbi/src/kirbi/fetch/amazon_fetch.py	                        (rev 0)
+++ Sandbox/luciano/kirbi/src/kirbi/fetch/amazon_fetch.py	2007-07-09 18:07:15 UTC (rev 77666)
@@ -0,0 +1,75 @@
+#!/usr/bin/env python
+
+import httplib2
+from urllib import quote
+from lxml import etree
+from StringIO import StringIO
+
+class AmazonECS(object):
+
+    xml_namespace = """http://webservices.amazon.com/AWSECommerceService/2005-10-05"""
+    base_url = """http://ecs.amazonaws.com/onca/xml"""
+
+    def __init__(self, AWSAccessKeyId, AssociateTag=None):
+        self.base_params = { 'Service':'AWSECommerceService',
+                             'AWSAccessKeyId':AWSAccessKeyId, }
+        if AssociateTag:
+            self.base_params['AssociateTag'] = AssociateTag
+        self.httpcli = httplib2.Http('.cache')
+                    
+    def buildURL(self, **kw):
+        query = []
+        kw.update(self.base_params)
+        for key, val in kw.items():
+            query.append('%s=%s' % (key,quote(val)))
+        return self.base_url + '?' + '&'.join(query)
+        
+    def fetchTree(self, url):
+        resp, content = self.httpcli.request(url, 'GET')
+        self.tree = etree.parse(StringIO(content))
+        return resp, content
+        
+    def buildQPath(path, ns):
+        """build a path with fully qualified tags"""
+        ns = '{%s}' % ns
+        parts = path.split('/')
+        return ns+('/'+ns).join(parts)
+
+    def itemLookup(self,itemId):
+        params = {'Operation':'ItemLookup', 'ItemId':itemId}
+        url = self.buildURL(**params)
+        return self.fetchTree(url)
+        
+    def findAll(self,path):
+        pass
+
+
+def fetch(asin):
+    params['asin'] = asin
+    params['op'] = 'ItemLookup'
+    print asin
+    resp, content = h.request(URL % params, 'GET')
+    tree = etree.parse(StringIO(content))
+    # the tree root is the toplevel html element
+    items = tree.findall(qPath('Items/Item/ItemAttributes',NS))
+    for item in items:
+        print item.find(qPath('Title',NS)).text
+        for author in item.findall(qPath('Author',NS)):
+            print 'author: ', author.text
+        for creator in item.findall(qPath('Creator',NS)):
+            print 'creator: ', creator.text
+            
+
+
+if __name__=='__main__':
+    from amazon_config import ACCESS_KEY_ID, ASSOCIATE_TAG
+    
+    ecs = AmazonECS(ACCESS_KEY_ID, ASSOCIATE_TAG)
+    alice = '0393048470'
+    gof = '0201633612'
+    awpr = '0977616630'
+    oss = '1565925823'
+    print ecs.itemLookup(alice)
+    
+    
+    


Property changes on: Sandbox/luciano/kirbi/src/kirbi/fetch/amazon_fetch.py
___________________________________________________________________
Name: svn:executable
   + *

Added: Sandbox/luciano/kirbi/src/kirbi/fetch/item-ok.xml
===================================================================
--- Sandbox/luciano/kirbi/src/kirbi/fetch/item-ok.xml	                        (rev 0)
+++ Sandbox/luciano/kirbi/src/kirbi/fetch/item-ok.xml	2007-07-09 18:07:15 UTC (rev 77666)
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ItemLookupResponse xmlns="http://webservices.amazon.com/AWSECommerceService/2005-10-05">
+    <OperationRequest>
+        <HTTPHeaders>
+            <Header Name="UserAgent" Value="Python-httplib2/$Rev: 235 $"></Header>
+        </HTTPHeaders>
+        <RequestId>1TNDRF1510DSSJZQRP69</RequestId>
+        <Arguments>
+            <Argument Name="ItemId" Value="1565926226"></Argument>
+            <Argument Name="Service" Value="AWSECommerceService"></Argument>
+            <Argument Name="Operation" Value="ItemLookup"></Argument>
+            <Argument Name="AWSAccessKeyId" Value="13W2MMDG65QJJK9GG402"></Argument>
+        </Arguments>
+        <RequestProcessingTime>0.0254600048065186</RequestProcessingTime>
+    </OperationRequest>
+    <Items>
+        <Request>
+            <IsValid>True</IsValid>
+            <ItemLookupRequest>
+                <ItemId>1565926226</ItemId>
+            </ItemLookupRequest>
+        </Request>
+        <Item>
+            <ASIN>1565926226</ASIN>
+            <DetailPageURL>http://www.amazon.com/gp/redirect.html%3FASIN=1565926226%26tag=circulante-20%26lcode=xm2%26cID=2025%26ccmID=165953%26location=/o/ASIN/1565926226%253FSubscriptionId=13W2MMDG65QJJK9GG402</DetailPageURL>
+            <ItemAttributes>
+                <Author>Eric Meyer</Author>
+                <Manufacturer>O'Reilly</Manufacturer>
+                <ProductGroup>Book</ProductGroup>
+                <Title>Cascading Style Sheets: The Definitive Guide</Title>
+            </ItemAttributes>
+        </Item>
+    </Items>
+</ItemLookupResponse>

Added: Sandbox/luciano/kirbi/src/kirbi/tests/book_tests.py
===================================================================
--- Sandbox/luciano/kirbi/src/kirbi/tests/book_tests.py	                        (rev 0)
+++ Sandbox/luciano/kirbi/src/kirbi/tests/book_tests.py	2007-07-09 18:07:15 UTC (rev 77666)
@@ -0,0 +1,6 @@
+#!/usr/bin/env python
+
+import unittest
+from kirbi.book import Book
+
+



More information about the Checkins mailing list