🛒
Pythonのrequestsを使ってShopifyの GraphQL admin APIを呼び出す
概要
以前の記事[1]で ShopifyAPI パッケージを使って、Python から GraphQL を呼び出す方法描きました。
Python でよく用いられている requests でも呼び出す方法がわかったので記述します。
curl と呼び出し方が若干異なり、GitHub の issueで解決策が書いてありました。
手順
1. requests をインストール
pip install requests
2. Python でソースコードを記述
サンプルコードを以下の点で編集します。
query のみの場合と、mutation を使う場合で若干書き方が異なります。
- 環境に合わせて host_name、 password を記述
- headers を設定
- curl だと Content-Type は application/graphql だが、Python の requests では application/json と記述しないといけないです
- json={"query": query}で query を記述
query のみの場合
import requests
# 環境に合わせて記述
host_name = "NAME.myshopify.com"
password = "PASSWORD"
# urlを設定
url = f"https://{host_name}/admin/api/2021-01/graphql.json"
# headersを設定
# 重要: Content-typeはapplication/graphqlではなくapplication/jsonじゃないと動かない
headers = {
"Content-Type": "application/json",
"X-Shopify-Access-Token": password,
}
# graphqlのqueryを記述
query = """{
products(first: 5) {
edges {
node {
id
handle
}
}
}
}"""
# requestする
response = requests.post(
url,
json={"query": query},
headers=headers
)
mutation と variables の場合
mutation と variables の場合を使う場合は、json={"query": query, "variables": variables}のように記述します。以下は id=0000000000000 に新しい tag("qiita")を追加する例です。
import requests
host_name = "NAME.myshopify.com"
password = "PASSWORD"
url = f"https://{host_name}/admin/api/2021-01/graphql.json"
headers = {
"Content-Type": "application/json",
"X-Shopify-Access-Token": password,
}
productId = "gid://shopify/Product/0000000000000"
query = """
mutation tagsAdd($id: ID!, $tags: [String!]!) {
tagsAdd(id: $id, tags: $tags) {
node {
id
}
userErrors {
field
message
}
}
}
"""
variables = {"id": productId, "tags": ["qiita"]}
response = requests.post(
url,
json={"query": query, "variables": variables},
headers=headers
)
Discussion