FROM CACHE - jp_header
解決済

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

shumaikuro
遊覧客
14 1 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) と言われてしまう理由が分かりません。
 
様々なサイトを調べつくして最終手段で質問させていただきました。どなたかご協力をお願いします。
1 件の受理された解決策

株式会社フルバランス
Shopify Partner
1441 504 644

成功

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

株式会社フルバランス(Shopify Experts)
Shopify専門のEC成長支援会社です。ストアの新規構築から運用や改善のサポートなどShopifyに関する幅広いサービスを行なっております。
ECの技術・実務・成長、お悩みのことがあれば、お気軽にご相談ください。
『すべてのブランドの特大成長エンジンを搭載する』 株式会社フルバランス

元の投稿で解決策を見る

4件の返信4

shumaikuro
遊覧客
14 1 1

補足説明

 

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

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

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

 

 

 

株式会社フルバランス
Shopify Partner
1441 504 644

成功

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

株式会社フルバランス(Shopify Experts)
Shopify専門のEC成長支援会社です。ストアの新規構築から運用や改善のサポートなどShopifyに関する幅広いサービスを行なっております。
ECの技術・実務・成長、お悩みのことがあれば、お気軽にご相談ください。
『すべてのブランドの特大成長エンジンを搭載する』 株式会社フルバランス
junichiokamura
Community Manager
1200 280 506

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

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

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

Senior Partner Solutions Engineer

shumaikuro
遊覧客
14 1 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)