Python プログラミング

【Python】楽天ショップのAPIを使用して商品のJAMコードを取得する

この記事は約6分で読めます。

 

副業で楽天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が出力されます。

 

 

 

 


プログラミング・スクレイピングツール作成の相談を受け付けています!

クラウドワークス・ココナラ・MENTAなどでPython・SQL・GASなどのプログラミングに関する相談やツール作成などを承っております!

過去の案件事例:

  • Twitter・インスタグラムの自動化ツール作成
  • ウェブサイトのスクレイピングサポート
  • ダッシュボード・サイト作成
  • データエンジニア転職相談

これまでの案件例を見る

キャリア相談もお気軽に!文系学部卒からエンジニア・データサイエンティストへの転職経験をもとに、未経験者がどう進むべきかのアドバイスを提供します。


スポンサーリンク
/* プログラミング速報関連記事一覧表示 */
ミナピピンの研究室

コメント

  1. 佐藤輔 より:

    こんにちは。
    こちらJANコードだけ抜き取りたい場合はどこを削除すればよいのでしょうか?

    • コメントありがとうございます。
      JANコードだけほしい場合は出力したcsvをデータフレームして読み込んで一列目のJANコードの列だけを抽出すればよいかと思います
      コーディングなどございましたらMENTAの方でご相談いただけますと幸いでございます

タイトルとURLをコピーしました