Liquid、JavaScriptなどに関する質問
タイトル通り GraphQL のproductCreateMediaで画像をアップしようとしています。
その際、存在しない外部URLをoriginalSource に与えても、
MediaのstatusはUPLOADED
fileErrors、mediaWarnings、mediaUserErrorsにはいずれも何も返ってきません。
しかし実際には当然存在しないURLなので、コンテンツ管理の画面に行くとエラーメッセージが表示されています。
これはこういう仕様なのでしょうか?
間違ったURLを与えてもMediaIDですらもしっかり返ってくるので、ミスの判定ができなくて困っております。
ご教示いただければ幸いです。
解決済! ベストソリューションを見る。
成功
@WEBUILD 様
興味があり調査してみました。
productCreateMediaのoriginalSourceに、
画像URLとしての形式に誤りはないが、実際には404になるようなURLを渡した場合、
APIからエラーが返却されないことが、
仕様であるかどうかは調べられませんでした。
しかし、開発環境で試したところ、質問者様と同様の結果になることは確認できました。
仕様であればおかしな仕様であるように思うので、
に記載のある、
engineering@shopify.engineering
にリクエストを送るなどすると、
未来のバージョンで修正されるかもしれません。
ところで、
一旦、今の状態で、どうやってエラーを見分けるかを考えたみたのですが、
productCreateMediaを実行した後に、
下記のようにproduct queryでその商品のメディアの情報を取得すると、
query ($productId: ID!) {
product(id: $productId) {
media (first: 20) {
edges {
node {
alt
status
mediaErrors {
code
details
message
}
}
}
}
}
下記のようにエラーが返却されることを確認できました。
"node": {
"alt": "test",
"status": "FAILED",
"mediaErrors": [
{
"code": "UNKNOWN",
"details": "The file does not exist - https://xxxx.xxxxxxxx.com/hoge.jpg",
"message": "Media processing failed"
}
]
}
しかし、
下記のように、productCreateMediaで直接productのmediaの情報を取得すると、
mutation productCreateMedia($media: [CreateMediaInput!]!, $productId: ID!) {
productCreateMedia(media: $media, productId: $productId) {
media {
alt
mediaContentType
status
}
mediaUserErrors {
code
field
message
}
product {
media(first: 20) {
edges {
node {
alt
status
mediaErrors {
code
details
message
}
}
}
}
}
}
}
下記のように、statusがUPLOADEDとなり、エラーが返却されません。
"node": {
"alt": "test",
"status": "UPLOADED",
"mediaErrors": []
}
エラーを取得するには、
productCreateMediaの後に、改めてproduct queryを実行する必要がありそうでした。
私自身はAPIやGraphQLに詳しいわけではないので、
1回のqueryでうまいことエラーを取得する方法もあるかもしれません。
本回答は、私が分かる範囲までの情報であることご留意ください。
何か参考になる情報があれば幸いです。
(キュー田辺)
成功
@WEBUILD 様
興味があり調査してみました。
productCreateMediaのoriginalSourceに、
画像URLとしての形式に誤りはないが、実際には404になるようなURLを渡した場合、
APIからエラーが返却されないことが、
仕様であるかどうかは調べられませんでした。
しかし、開発環境で試したところ、質問者様と同様の結果になることは確認できました。
仕様であればおかしな仕様であるように思うので、
に記載のある、
engineering@shopify.engineering
にリクエストを送るなどすると、
未来のバージョンで修正されるかもしれません。
ところで、
一旦、今の状態で、どうやってエラーを見分けるかを考えたみたのですが、
productCreateMediaを実行した後に、
下記のようにproduct queryでその商品のメディアの情報を取得すると、
query ($productId: ID!) {
product(id: $productId) {
media (first: 20) {
edges {
node {
alt
status
mediaErrors {
code
details
message
}
}
}
}
}
下記のようにエラーが返却されることを確認できました。
"node": {
"alt": "test",
"status": "FAILED",
"mediaErrors": [
{
"code": "UNKNOWN",
"details": "The file does not exist - https://xxxx.xxxxxxxx.com/hoge.jpg",
"message": "Media processing failed"
}
]
}
しかし、
下記のように、productCreateMediaで直接productのmediaの情報を取得すると、
mutation productCreateMedia($media: [CreateMediaInput!]!, $productId: ID!) {
productCreateMedia(media: $media, productId: $productId) {
media {
alt
mediaContentType
status
}
mediaUserErrors {
code
field
message
}
product {
media(first: 20) {
edges {
node {
alt
status
mediaErrors {
code
details
message
}
}
}
}
}
}
}
下記のように、statusがUPLOADEDとなり、エラーが返却されません。
"node": {
"alt": "test",
"status": "UPLOADED",
"mediaErrors": []
}
エラーを取得するには、
productCreateMediaの後に、改めてproduct queryを実行する必要がありそうでした。
私自身はAPIやGraphQLに詳しいわけではないので、
1回のqueryでうまいことエラーを取得する方法もあるかもしれません。
本回答は、私が分かる範囲までの情報であることご留意ください。
何か参考になる情報があれば幸いです。
(キュー田辺)
ご回答ならびご検証いただき誠にありがとうございます。
やはり、同様の結果になってしまいますよね。。。
とりあえずご教示いただいた方法でエラーを取得して正常にアップロードが完了しているか確認してから、続きの作業を行うようにします!
ありがとうございました🙏
サポートの選択肢が増えていく中、最適となる選択の判断が難しくなっているかと存じます。今回は問題の解決に最適となるサポートの選択方法を、紹介させて頂きます。 選択肢のご紹介...
By Mirai Oct 6, 20242023年初頭、Shopifyペイメントアカウント、及びShopifyアカウント全体のセキュリティを強化する為の変更が適用されました。ユーザーのアカウントセキュリティを強化す...
By Mirai Sep 29, 2024概要: 年末/年明けは、消費者が最もショッピングを行う時期の一つです。特に、ブラックフライデー・サイバーマンデー(BFCM)は、世界中で注目される大規模なセールイベントであ...
By JapanGuru Sep 25, 2024