Qoo10 APIの使い方

Qoo10とは、eBay Japan合同会社が運営する日本国内向けの総合ECモールです。

https://www.qoo10.jp/

## API/FTPの発行申請
下記公式資料で簡単に発行できる。

https://doc.image-qoo10.jp/sqm/JP/guide_APItoFTP_JP.pdf

![Qoo10_12.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/483556/c5b6fd01-50c4-9c04-7d2e-2fcf22e7ed0d.png)

## APIの認証キー取得
CertificationAPI.CreateCertificationKey
販売認証キー発行時に使用するAPIです。
1つのAPIキーでリクエストが可能。

https://api.qoo10.jp/GMKT.INC.Front.QAPIService/Document/QAPIGuideIndex.aspx

```Python
import requests
import xml.etree.ElementTree as ET

def CreateCertificationKey(USER_ID, PASS, API_KEY):
	url = "https://api.qoo10.jp/GMKT.INC.Front.QAPIService/ebayjapan.qapi/CertificationAPI.CreateCertificationKey"
	headers = {"Content-Type":"application/x-www-form-urlencoded","Content-Length":"length","GiosisCertificationKey":API_KEY,"QAPIVersion":"1.0"}
	params = {"returnType":"text/xml","user_id":USER_ID,"pwd":PASS}
	req = requests.post(url=url,headers=headers,data=params)
	print(req.text)

USER_ID = #QSMのログインID
PASS = #QSMのログインPASS
API_KEY = #事前に発行したAPIキー
xml_data = CreateCertificationKey(USER_ID,PASS,API_KEY)

xml_root = ET.fromstring(xml_data)
result_msg = xml_root.find('ResultMsg').text
SAK = xml_root.find('ResultObject').text
print(result_msg, SAK)

成功 S5bnbfynQvOITqzcbzMRK7Yy_g_1_w4CZi*********************************************************************
```

## 販売情報取得
ShippingBasic.GetShippingInfo_v3
販売の内訳を照会するためのAPIメソッドです。

下記リンクで、Input ParameterとOutput Parameterが確認できる。

https://api.qoo10.jp/GMKT.INC.Front.QAPIService/Document/QAPIGuideIndex.aspx

```Python
def GetShippingInfo_v3(SAK, StartDate, EndDate):
    url = "https://api.qoo10.jp/GMKT.INC.Front.QAPIService/ebayjapan.qapi/ShippingBasic.GetShippingInfo_v3"
    headers = {"Content-Type":"application/x-www-form-urlencoded","Content-Length":"length","GiosisCertificationKey":SAK,"QAPIVersion":"1.0"}
    params = {"returnType":"application/json","ShippingStatus":'5',"SearchStartDate":StartDate,"SearchEndDate":EndDate,"SearchCondition":'4'}
    req = requests.post(url=url,headers=headers,data=params)
    result = json.loads(req.text)
    return result

now = datetime.now()
one_month_ago_rms = now + timedelta(hours=9) - timedelta(days=30)
monthagodate = one_month_ago_rms.strftime("%Y%m%d")
yesterdaydate = now + timedelta(hours=9) - timedelta(days=1)
yesterdaydate = yesterdaydate.strftime("%Y%m%d")
res = GetShippingInfo_v3(SAK, wookagodate, yesterdaydate)
```

## 登録商品の全商品情報取得
ItemsLookup.GetAllGoodsInfo
販売者が登録した商品の取引の状態別照会をするためのAPIメソッドです。
（1ページに最大500個までの商品が照会が可能。ページを指定表示することができます。）

https://api.qoo10.jp/GMKT.INC.Front.QAPIService/Document/QAPIGuideIndex.aspx

## ファイルをダウンロード
ItemsLookup.RequestFileDownload
情報（item、inventory、order、ship）をダウンロードをするためのAPIメソッドです

https://api.qoo10.jp/GMKT.INC.Front.QAPIService/Document/QAPIGuideIndex.aspx

## 商品登録
様々な商品情報を設定することで、1商品ごとに商品登録することができる。
既に登録している商品コードをリクエストした場合、重複はできないとエラーがでる。

```Python
def SetNewGoods(SAK, params):
    url = "https://api.qoo10.jp/GMKT.INC.Front.QAPIService/ebayjapan.qapi/ItemsBasic.SetNewGoods"
    headers = {"Content-Type":"application/x-www-form-urlencoded","Content-Length":"length","GiosisCertificationKey":SAK,"QAPIVersion":"1.1"}
    req = requests.post(url=url,headers=headers,data=params)
    result = json.loads(req.text)
    return result

params = {
    "returnType":"application/json",
    "SecondSubCat":"320002604", # 商品の種類に対応したQoo10カテゴリーコードです。 * QSM BulK-data ManagementでQoo10カテゴリーコード情報をダウンロードすることができます。
    "OuterSecondSubCat":"", # 販売者が使用している外部または独自のカテゴリーコードです。
    "Drugtype":"", # 医薬品カテゴリーを選択する際は必ず入力してください。 (1C : 第1類医薬品, 2C : 第2類医薬品, 3C : 第3類医薬品, D2 : 指定第2類医薬品, QD : 医薬部外品)
    "BrandNo":"", # Qoo10に登録されたブランドのコードです。新規ブランド登録要請は、QSMを通じてリクエストすることができます。
    "ItemTitle":"Test Product name2",
    "PromotionName":"説明文", # 広告文
    "SellerCode":"codea4567", # 販売商品コード：販売者が管理する商品番号です。この情報をKey値に今後の価格などの修正が可能です。
    "IndustrialCodeType":"J",
    "IndustrialCode":"", # JAN
    "ModelNM":"", # モデル名
    "ManufactureDate":"", # 製造日 YYY-MM-DD
    "ProductionPlaceType":"1", # 原産地タイプ(国内=1、海外=2、その他=3)
    "ProductionPlace":"", # 商品の原産情報（国または地域名）
    "Weight":"", # 重量
    "Material":"", # 素材(ex: Polyester50%、Synthetic50%)
    "AdultYN":"N", # アダルトグッズかどうか：アダルトグッズの場合”Y”、アダルトグッズではない場合”N”
    "ContactInfo":"", # アフターサービス情報
    "StandardImage":"https://************.jpg", # 商品の代表画像。商品画像のURLを入力してください。 （ex．standardimage = http：//image.qoo10.jo.img.jpg）
    "VideoURL":"", # 動画URL
    "ItemDescription":"", # 商品説明。商品ページに案内されている商品説明です。 HTML形式で入力して下さい。
    "AdditionalOption":"", # 追加オプション
    "ItemType":"", # オプション(組み合わせ型)
    "RetailPrice":"0", # 売価格です。もし小売価格がわからない場合は、0を入力してください
    "ItemPrice":"12500", # 商品の販売価格
    "TaxRate":"S", # 消費税率
    "ItemQty":"1", # 商品の数量
    "ExpireDate":"2050-01-01", # 商品の販売終了日。（yyyy-mm-dd）
    "ShippingNo":"687813", # Qoo10送料コード。QSM送料管理メニューで、使用する送料のコードを確認してください。 0を入力すると送料無料が設定されます。
    "AvailableDateType":"0", # "商品発送可能日タイプです。数字で入力してください。（0,1,2,3）
    "AvailableDateValue":"3", # "商品発送可能日タイプの詳細内容です。
    "Keyword":"" # 検索ワード 10個まで設定可能(ex: シャツ,デニム,春)
}
res = SetNewGoods(SAK, params)
print(res)
```

## カテゴリーリスト取得
Qoo10の全カテゴリーリストと対応するカテゴリーIDを取得することができる。
カテゴリーIDは商品登録時に使用する。

```python
def GetCatagoryListAll(SAK):
    url = "https://api.qoo10.jp/GMKT.INC.Front.QAPIService/ebayjapan.qapi/CommonInfoLookup.GetCatagoryListAll"
    headers = {"Content-Type":"application/x-www-form-urlencoded","Content-Length":"length","GiosisCertificationKey":SAK,"QAPIVersion":"1.0"}
    params = {"returnType":"application/json","lang_cd":"JP"}
    req = requests.post(url=url,headers=headers,data=params)
    result = json.loads(req.text)
    return result

path_w = 'qoo10_category.txt'
with open(path_w, mode='w') as f:
    f.write('CATE_L_CD, CATE_L_NM, CATE_M_CD, CATE_M_NM, CATE_S_CD, CATE_S_NM\n')

res = GetCatagoryListAll(SAK)
for item in res['ResultObject']:
    CATE_L_CD = item['CATE_L_CD']
    CATE_L_NM = item['CATE_L_NM']
    CATE_M_CD = item['CATE_M_CD']
    CATE_M_NM = item['CATE_M_NM']
    CATE_S_CD = item['CATE_S_CD']
    CATE_S_NM = item['CATE_S_NM']
    print(CATE_L_CD, CATE_L_NM, CATE_M_CD, CATE_M_NM, CATE_S_CD, CATE_S_NM)
    with open(path_w, mode='a', errors='ignore') as f:
        f.write('{},{},{},{},{},{}\n'.format(CATE_L_CD, CATE_L_NM, CATE_M_CD, CATE_M_NM, CATE_S_CD, CATE_S_NM))
```

## 配送情報の取得
QSMに登録されているユーザー固有の配送設定を取得することができる。
配送IDは商品登録時に使用する。

```python
def GetSellerDeliveryGroupInfo(SAK):
    url = "https://api.qoo10.jp/GMKT.INC.Front.QAPIService/ebayjapan.qapi/ItemsLookup.GetSellerDeliveryGroupInfo"
    headers = {"Content-Type":"application/x-www-form-urlencoded","Content-Length":"length","GiosisCertificationKey":SAK,"QAPIVersion":"1.0"}
    params = {"returnType":"application/json"}
    req = requests.post(url=url,headers=headers,data=params)
    result = json.loads(req.text)
    return result

res = GetSellerDeliveryGroupInfo(SAK)
for ShippingInfo in res['ResultObject']:
    print(ShippingInfo)
```