Webは用いる人のリテラシーで決まる ウェブ運用と開発現場を経験したエンジニアのTIPS
TOP > BLOG > IT記事

YahooショッピングのストアAPIをPythonで新規認証する

早川朋孝 早川朋孝
EC専門のSE

YahooショッピングのAPIで認証するまでの基本的な流れは公式ドキュメントを見るのがはやい。https://developer.yahoo.co.jp/webapi/shopping/

前提

  1. Yahoo! IDを所持しているか作成すること
  2. アプリケーションを登録すること
  3. ストア従業員としてのビジネスIDが必要である
  4. 1と3を連携すること
  5. 自分のウェブサイトを持っていること(認証コードの発行に必要)

特定のストアでAPIを利用するにはYahoo! JAPAN IDへ、ストアクリエイタProに従業員として登録されている「ビジネスID」が紐づいている必要がある。

また、公式ドキュメントに「アプリケーションID」と記述されているが、実際にはそれは「Client ID」を指している。これが分かりづらい。Client IDを確認するには「アプリケーション管理」https://e.developer.yahoo.co.jp/dashboard(当然ログインが必要)のアプリケーション一覧から詳細ページに遷移すれば閲覧できる。

アプリケーション作成後の流れ

「Client ID」と「シークレット」が発行されたら認証コードを発行する。これはブラウザでurlを入力するだけ。公式ドキュメントにある通り、指定のウェブサイトにリダイレクトされ、その際にurlの末尾にcode=hogehogeというような値が得られる。

https://auth.login.yahoo.co.jp/yconnect/v2/authorization?response_type=code&client_id=hogehoge&redirect_uri=hogehoge&scope=openid+profile&bail=1

このcodeが公式ドキュメントにある「認可コード」だ。プログラムでトークンを発行するにはこの「認可コード」が必要となる。

ここまでで以下の情報がそろっていることだろう。これでプログラムでYahoo!のストアAPIにアクセスできる。

  • Clent ID
  • シークレット
  • リダイレクト URI (アプリケーション登録に登録したuriと完全に一致すること)
  • 認可コード

認証の詳細については公式ドキュメントを参照されたし。必須項目やtokenの更新などの説明がある。
https://developer.yahoo.co.jp/yconnect/v2/authorization_code/token.html

import urllib.request
import requests
import base64
import time
import json
import xml.etree.ElementTree as ET

#キーをエンコード
serviceSecret = 'hogehoge'
licenskey = 'hogehoge'
b64 = serviceSecret + ':' + licenskey
b64_en = base64.b64encode(b64.encode())

url = 'https://auth.login.yahoo.co.jp/yconnect/v2/token'
url_home = 'https://example.com'  #あなたのウェブサイトのuri

def get_token():
    headers = {
     "Accept":"*/*",
     "Content-Type":"application/x-www-form-urlencoded; charset=utf-8",
     'Authorization': b'Basic ' +  b64_en,
    }
    #token新規取得の場合
    body = {
     'grant_type': 'authorization_code',
     'redirect_uri':url_home,
     'code': code,
    }
    #リクエスト
    response = requests.post(url, headers=headers, data=body)
    return response


if __name__ == '__main__':
    result = get_token()
    if result.status_code == 200:
        print(result.text)
    else:
        print(result.text, '認証失敗')
×
このブログを書いてる人
早川 朋孝 EC専門のSE
IT業界歴20年のエンジニアです。ネットショップ勤務で苦労した経験から、EC・ネットショップ事業者に向けて、バックオフィス業務の自動化・効率化を提案するSEをしています。
プロフィール
API連携の相談にのります
趣味は読書、ピアノ、マリノスの応援など
PAGE TOP