python上でgraphQLを使い,Shopの情報を抜き出す方法について

解決済
Highlighted
観光客
3 0 1

pythonコード内でgraphQLを使って注文情報等を抜き出す方法を模索しています。

 公式ドキュメント , 公式ドキュメント(Git) と質問箱 を読んで実行しましたが,うまくいきません。

srcはGoogle Colaboratoryで実行しました。記入したsrcは以下の通りです。

 

!pip install --upgrade ShopifyAPI

import shopify
import bin
import json
import urllib

API_KEY = "api_key"
PASSWORD = "passward"
SHARED_SECRET = "secret"
API_VERSION = '2020-07'
SHOP_NAME = 'name'

shop_url = "https://%s:%s@%s.myshopify.com/admin/api/%s/orders.json" % (API_KEY, PASSWORD, SHOP_NAME,API_VERSION)
shopify.ShopifyResource.set_site(shop_url)

print(shop_url)

client = shopify.GraphQL()
query = '''
            {
                shop {
                    name
                    id
                }
            }
        '''
result = client.execute(query)

 

 
吐き出されるエラーコードは以下の通りです。

 

b'{"errors":"[API] Invalid API key or access token (unrecognized login or wrong password)"}'

---------------------------------------------------------------------------
HTTPError                                 Traceback (most recent call last)
<ipython-input-6-3a68f3acabbf> in <module>()
     37             }
     38         '''
---> 39 result = client.execute(query)

 

API key,passwordは,指示通りShop管理画面からプライベートAppを作成して得られたものを使いました。
 
実際に,作成されたURLをブラウザで直説打ち込むと画像のような認証画面が出てきて,
図1.png
API keyとpasswordを入力すると認証通過できます。
従って,colab上だけ [API] Invalid API key or access token (unrecognized login or wrong password) と言われてしまう理由が分かりません。
 
様々なサイトを調べつくして最終手段で質問させていただきました。どなたかご協力をお願いします。
0 件の「いいね!」
Highlighted
観光客
3 0 1

補足説明

 

作成されたURLをブラウザで直説打ち込むと画像のような認証画面が出てきて,”の話ですが,

作成されたURL(API KeyとPASS入り)を開くと問題なく閲覧可能。 https://shop.myshopifyだと認証画面が出てきて,API KeyとPASS打ち込むと認証通過。

つまりAPI KeyとPASSは有効であることが確認されています。

 

 

 

0 件の「いいね!」
Highlighted
新規メンバー
2 1 2

成功

1.graphQLはbasic認証ベースに対応してない様です
マニュアルで前後が読みづらいですが、6の欄にあるコマンドはあの流れで実行出来ますが、graphQL部位は違う操作が必要みたいです。

2.graphQLの認証は、X-Shopify-Access-Tokenベースみたいです。パスワードをどう渡すかは忘れました・・
https://shopify.dev/docs/admin-api/graphql/getting-started
のcurl文参照でお願いします。

3.なので、参考にされるサンプルは、下記graphqlのtestが良いと思います
https://github.com/Shopify/shopify_python_api/blob/master/test/graphql_test.py

1 件の「いいね!」
Highlighted
Community Manager
Community Manager
513 116 191

共有されているBASIC認証のURLは、マーチャント側で作成されるPrivate appのもので、REST API用のものですので、GraphQLには対応しておりません。

Pythonから呼び出す場合は、他の方が共有されているコードか、以下の動画で解説していますように直接HTTP POSTで呼び出せますので、ご参照ください。

https://www.youtube.com/watch?v=2zDFNS6r1aQ&list=PLkR3LRtxAZfod8TvcsKU7IEWeAO5fhcOe&index=1

Technical Partner Manager, Japan
1 件の「いいね!」
Highlighted
観光客
3 0 1

最終的には,以下のコードで解決しました。

import shopify

import pandas as pd
import json
from pandas.io.json import json_normalize
from googletrans import Translator
import glob
import csv
import os
import sys
import re
# shopドメイン&API ver&Passwordで認証
domain = "NAME.myshopify.com"
API_ver = "2020-07"
PASSWORD = "12314" 

shopify.ApiVersion.define_known_versions()
shopify_session = shopify.Session(domain, API_ver, PASSWORD)
shopify.ShopifyResource.activate_session(shopify_session)

client = shopify.GraphQL()

query = '''
  {
          orders(first:20){           
            edges{
              node{
                closed
                name

}    
'''
result = client.execute(query)

 

1 件の「いいね!」