副業で楽天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の方でご相談いただけますと幸いでございます