副業で楽天APIを使って商品のJAMコードを取得しようと思ったのですが、ググってできてたQitta記事はPython2で書かれたものなので、Python3に書き直してみました。コードのやっていることはリンク先と全く同じなのでコードだけ張っておきます。
該当記事:https://qiita.com/DisneyAladdin/items/d136a04b715de59ade57
元記事はコマンドラインでの実行を前提としていますが、
import re
from time import sleep
import requests
app_id = [自分のID] # 自分のIDを文字列で入力してください
shopname = 'dvdoutlet' #ショップID(任意に変更してください)
url = 'https://app.rakuten.co.jp/services/api/IchibaItem/Search/20170706'
payload = {
'applicationId': app_id,
'hits': 30,#一度のリクエストで返してもらう最大個数(MAX30)
'shopCode':shop_name,#ショップID
'page':1,#何ページ目か
'postageFlag':1,#送料込みの商品に限定
}
r = requests.get(url, params=payload)
res=r.json()
total = int(res['count'])
max_ = total/30 + 1
print(max_)
if max_ > 100:
max_ = 100
print('100ページ(3000アイテム)を超えています.')
print('カテゴリ別に回すことを勧めます.')
sleep(3)
print('-'*40)
counter = 0
# print文で使う色コード
PURPLE = '\033[35m'
RED = '\033[31m'
CYAN = '\033[36m'
OKBLUE = '\033[94m'
OKGREEN = '\033[92m'
WARNING = '\033[93m'
FAIL = '\033[91m'
ENDC = '\033[0m'
a = open('output.csv','w')
a.write('JAN,NAME,PRICE,URL\n')
for i in range(1, int(max_)+1):
url = 'https://app.rakuten.co.jp/services/api/IchibaItem/Search/20170706'
payload = {
'applicationId': app_id,
'hits': 30,
'shopCode': shop_name,
'page': i,#リクエストするページ番号が1-Maxまで変化します
'postageFlag': 1,
}
r = requests.get(url, params=payload)
resp = r.json()
for i in resp['Items']:
counter = counter + 1
print('【No.】'+ PURPLE + str(counter) + ENDC)
item = i['Item']
name = item['itemName']
if len(name) >= 30:
# 文字列の長さが35文字以上であれば35文字以降は省略
print('【Name】' + OKGREEN + str(name[:30]) + '...' + ENDC)
else:
print('【Name】' + OKGREEN + str(item['itemName']) + ENDC)
print('【Price】' + CYAN + '¥' +str(item['itemPrice']) + ENDC)
# ポイント分(自分の場合は最低4倍)を差し引く
price = int(item['itemPrice'])*0.96
print('【URL】',item['itemUrl'])
URL = item['itemUrl']
print('【shop】',item['shopName'])
text = item['itemCaption']
#JANコードの抽出
JAN = ''
postCode_0 = re.findall('[0-9]{13}',URL)#URLにJANコード(13桁の数字)があれば抽出
if len(postCode_0) == 1:
JAN = postCode_0[0]
print('【JAN】' + OKGREEN + str(JAN) + ENDC)
a.write(str(JAN)+','+str(name)+','+str(price)+ ','+str(URL)+'\n')
else:#URLにJANコードがなければキャプション(商品説明)から抽出
postCode = re.findall('[0-9]{13}',text)
len_postCode = len(postCode)
if len_postCode == 1:
JAN = postCode[0]
print('【JAN】' + WARNING + str(postCode[0]) + ENDC)
a.write(str(JAN)+','+str(name)+','+str(price)+','+str(URL)+'\n')
else:
JAN = 'NONE'
print('【JAN】' + WARNING + 'JAN: NONE' + ENDC)
print('')
sleep(0.1)
a.close()
<実行結果>

こんな感じでcsvにJAMコードと商品名・価格・URLが出力されます。
コメント
こんにちは。
こちらJANコードだけ抜き取りたい場合はどこを削除すればよいのでしょうか?
コメントありがとうございます。
JANコードだけほしい場合は出力したcsvをデータフレームして読み込んで一列目のJANコードの列だけを抽出すればよいかと思います
コーディングなどございましたらMENTAの方でご相談いただけますと幸いでございます