Shopify 管理 API Python ライブラリ
Shopify アプリケーションを作成および管理できるように、Shopify パートナー ダッシュボードでパートナーとしてサインアップする必要があります。
最新リリースを簡単にインストールまたはアップグレードするには、pip を使用します。
pip install --upgrade ShopifyAPI
まずパートナー ダッシュボードで新しいアプリケーションを作成し、API キーと API シークレット キーを取得します。
次に、認証方法を認識できるように、これらのキーを Shopify セッション クラスに提供する必要があります。
import shopify
shopify . Session . setup ( api_key = API_KEY , secret = API_SECRET )
ショップのデータにアクセスするには、アプリはその特定のショップからのアクセス トークンを必要とします。 OAuth を使用してそのショップで認証する必要があります。これは次の方法で開始できます。
shop_url = "SHOP_NAME.myshopify.com"
api_version = '2024-07'
state = binascii . b2a_hex ( os . urandom ( 15 )). decode ( "utf-8" )
redirect_uri = "http://myapp.com/auth/shopify/callback"
scopes = [ 'read_products' , 'read_orders' ]
newSession = shopify . Session ( shop_url , api_version )
auth_url = newSession . create_permission_url ( scopes , redirect_uri , state )
# redirect to auth_url
販売者が受け入れると、ショップは「code」という名前のパラメータを使用して所有者をアプリケーションのredirect_uri
にリダイレクトします。これは、アプリが永続的なアクセス トークンと交換できる一時的なトークンです。リクエストが正しいことを確認するには、上記で提供した状態と返された状態を比較する必要があります。これで、コールバック ハンドラーで shopify からリクエストを取得したときに、コードを access_token と交換できるようになりました。
session = shopify . Session ( shop_url , api_version )
access_token = session . request_token ( request_params ) # request_token will validate hmac and timing attacks
# you should save the access token now for future use.
これで、承認された API リクエストをショップに送信する準備が整いました。
session = shopify . Session ( shop_url , api_version , access_token )
shopify . ShopifyResource . activate_session ( session )
shop = shopify . Shop . current () # Get the current shop
product = shopify . Product . find ( 179761209 ) # Get a specific product
# execute a graphQL call
shopify . GraphQL (). execute ( "{ shop { name id } }" )
あるいは、temp を使用してセッションを初期化し、コマンドを実行することもできます。
with shopify . Session . temp ( shop_url , api_version , token ):
product = shopify . Product . find ()
完了したらセッションをクリアすることをお勧めします。一時セッションではこれが自動的に行われます。
shopify . ShopifyResource . clear_session ()
プライベート アプリは OAuth が必要ないため、少し速く使用できます。 Shopify Merchant Adminでプライベートアプリを作成できます。プライベート アプリのパスワードをaccess_token
として使用できます。
session = shopify . Session ( shop_url , api_version , private_app_password )
shopify . ShopifyResource . activate_session ( session )
# ...
shopify . ShopifyResource . clear_session ()
with shopify . Session . temp ( shop_url , api_version , private_app_password ):
shopify . GraphQL (). execute ( "{ shop { name id } }" )
注: 請求プロセスをテストするには、アプリケーションをパブリックにする必要があります。開発ストアでテストするには'test': True
フラグを使用します。
application_charge = shopify . ApplicationCharge . create ({
'name' : 'My public app' ,
'price' : 123 ,
'test' : True ,
'return_url' : 'https://domain.com/approve'
})
# Redirect user to application_charge.confirmation_url so they can approve the charge
charge_id
パラメータを使用してreturn_url
にリダイレクトされます (注: API バージョン 2021-01 以降で請求が作成された場合、このアクションは必要ありません) charge = shopify . ApplicationCharge . find ( charge_id )
shopify . ApplicationCharge . activate ( charge )
activated_charge
ステータスがactive
ことを確認します activated_charge = shopify . ApplicationCharge . find ( charge_id )
has_been_billed = activated_charge . status == 'active'
pyactiveresource ライブラリの原理を少なくとも基本的に理解しておくことをお勧めします。pyactiveresource ライブラリは、rails/ActiveResource の Python への移植であり、このパッケージが大きく依存しています。
pyactiveresource
リソースのインスタンスは、Shopify API の RESTful リソースにマップされます。
pyactiveresource
、 POST
、 GET
、 PUT
、およびDELETE
HTTP 動詞と同等のリソースを作成、検索、更新、および削除するためのライフサイクル メソッドを公開します。
product = shopify . Product ()
product . title = "Shopify Logo T-Shirt"
product . id # => 292082188312
product . save () # => True
shopify . Product . exists ( product . id ) # => True
product = shopify . Product . find ( 292082188312 )
# Resource holding our newly created Product object
# Inspect attributes with product.attributes
product . price = 19.99
product . save () # => True
product . destroy ()
# Delete the resource from the remote server (i.e. Shopify)
特定のパラメーターを使用してオープン注文のリストを取得する別の例を次に示します。
new_orders = shopify . Order . find ( status = "open" , limit = "50" )
Fulfillment
などの一部のリソースは、Shopify API の親リソースによってプレフィックスが付けられます (例: orders/450789469/fulfillments/255858046
)。これらのリソースと対話するには、リクエストで親リソースの識別子を指定する必要があります。
shopify . Fulfillment . find ( 255858046 , order_id = 450789469 )
このパッケージには、ショップで API を使用するための対話型コンソールを簡単に開くことができるshopify_api.py
スクリプトも含まれています。
shopify_api.py add yourshopname
shopify_api.py console
shopify_api.py help
と入力します。このライブラリは、Shopify の新しい GraphQL API もサポートしています。認証プロセスは同じです。セッションがアクティブ化されたら、新しいgraphqlクライアントを構築し、 execute
使用してクエリを実行するだけです。
result = shopify . GraphQL (). execute ( '{ shop { name id } }' )
execute
のvariables
とoperation_name
パラメータを使用して、より複雑な操作を実行できます。
たとえば、次の GraphQL ドキュメントは、フラグメントを使用して 2 つの名前付きクエリ (1 つは単一の注文用、もう 1 つは複数の注文用) を構築します。
# ./order_queries.graphql
fragment OrderInfo on Order {
id
name
createdAt
}
query GetOneOrder ( $order_id : ID ! ){
node ( id : $order_id ){
... OrderInfo
}
}
query GetManyOrders ( $order_ids : [ ID ] ! ){
nodes ( ids : $order_ids ){
... OrderInfo
}
}
これで、実行する操作を選択できるようになりました。
# Load the document with both queries
document = Path ( "./order_queries.graphql" ). read_text ()
# Specify the named operation to execute, and the parameters for the query
result = shopify . GraphQL (). execute (
query = document ,
variables = { "order_id" : "gid://shopify/Order/12345" },
operation_name = "GetOneOrder" ,
)
python setup.py sdist
pip install --upgrade dist/ShopifyAPI- * .tar.gz
注ソース ツリーから実行する場合は、 bin/shopify_api.py
スクリプトを使用します。 lib ディレクトリが sys.path の先頭に追加されるため、インストールされたバージョンは使用されません。
pip install setuptools --upgrade
python setup.py test
カーソルベースのページネーションのサポートが 6.0.0 で追加されました。
import shopify
page1 = shopify . Product . find ()
if page1 . has_next_page ():
page2 = page1 . next_page ()
# to persist across requests you can use next_page_url and previous_page_url
next_url = page1 . next_page_url
page2 = shopify . Product . find ( from_ = next_url )
プリコミットは、プル リクエストで実行され、 main
ブランチにプッシュされる GitHub アクションとして設定されます。プリコミットをローカルで実行したい場合は、それをインストールし、git フック スクリプトをセットアップします。
pip install -r requirements.txt
pre-commit install
現在、次のものはサポートされていません。