2009/02/04からのアクセス回数 6783
Amazonの欲しいものリストを使うと特定の人の欲しいものリストを 取得することができます。
Amazonのサイトに入り、「欲しいものリスト」 をクリックすると欲しいものリストサーチが入力ボックスがあります。 ここに、例えばaと入力すると、名前にAが付く人の一覧がでます。 人の名前をクリックするとその人の欲しいものリストが表示される仕組みに なっています。
Amazonが提供するAWSを使って、欲しいものリストを取得する方法を説明します。
AWSでは、ユーザ名またはメールアドレスでユーザを検索する機能を提供しています。
これと指定されたユーザの欲しいものリストを出力する機能を組み合わせて、 ユーザの欲しいものリストを作成します。
以下のtest2.pyがAmazonの欲しいものリストを取得するプログラムです。
処理におよそ30分ほどかかります。
amazon.txt をダウンロードして
お使い下さい。
# -*- coding: utf-8 -*-
import japanese
import urllib2
import re
from BeautifulSoup import BeautifulSoup
awsKey = '1DDNRNZZETYB32XAG2G2'
awsURL = 'http://webservices.amazon.co.jp/onca/xml?Service=AWSECommerceService'
searchURL = awsURL + '&Operation=ListSearch&ListType=WishList&ResponseGroup=ListMinimum'
lookupURL = awsURL + '&Operation=ListLookup&ListType=WishList&ResponseGroup=ListFull,Small'
itemowners = {}
users = []
alpha='abcdefghijklmnopqrstuvwxyz'
for i in range(len(alpha)):
for uPage in range(1,4):
url = searchURL + '&AWSAccessKeyId=' + awsKey + '&Name=' + alpha[i] + '&ListPage=' + str(uPage)
c=urllib2.urlopen(url)
soup=BeautifulSoup(c.read())
listIds=soup('listid')
for listId in listIds:
iPage = 1
nPage = 1
while iPage <= nPage:
id=listId.contents[0]
users.append(id)
url2= lookupURL + '&AWSAccessKeyId=' + awsKey + '&ListId=' + id + '&ListPage=' + str(iPage)
iPage += 1
c=urllib2.urlopen(url2)
soup2=BeautifulSoup(c.read())
if iPage == 1:
totalPages = soup2('totalpages')
nPage = int(totalPages[0].contents[0])
#titles=soup2('title')
titles=soup2('author')
for title in titles:
goods=title.contents[0]
itemowners.setdefault(goods,[])
itemowners[goods].append(id)
out=file('amazon.txt', 'w')
out.write('Item')
for user in users: out.write('\t' + user)
out.write('\n')
for item,owners in itemowners.items():
if len(set(owners)) > 2:
out.write(item)
for user in users:
if user in owners: out.write('\t1')
else: out.write('\t0')
out.write('\n')
得られた著者とユーザの欲しいものリストのデータに対して、tanimoto係数を距離として クラスタ分析をします。
# -*- coding: utf-8 -*-
import japanese
import clusters
wants,people,data=clusters.readfile('amazon.txt')
clust=clusters.hcluster(data, distance=clusters.tanamoto)
clusters.drawdendrogram(clust, wants, png='amazon.png')
分析結果は、以下の通りです。
のグループもうまくまとまっている感じがします。
この記事は、
皆様のご意見、ご希望をお待ちしております。