質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

Q&A

解決済

1回答

1785閲覧

YahooAPIのv12への対応

quwant

総合スコア5

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

API

APIはApplication Programming Interfaceの略です。APIはプログラムにリクエストされるサービスがどのように動作するかを、デベロッパーが定めたものです。

0グッド

1クリップ

投稿2023/09/19 13:00

編集2023/09/20 12:33

実現したいこと

YahooAPIのv12への対応

質問内容

こちらにて今後はリクエストヘッダーにx-z-base-account-idの指定が必須と記載があります。
またそれはBaseAccountServiceで取得可能と記載があるのですが、方法が分からないので教えていただきたいです。
下記の様に記述したのですがBad requestとなったため質問いたしました。

試したソースコード①

GAS

1function check() { 2 var access_token = 'something'; 3 4 var params = { 5 method: 'post', 6 contentType: 'application/json', 7 headers: { 8 'Authorization': 'Bearer ' + access_token 9 }, 10 muteHttpExceptions: true 11 } 12 13 var response = UrlFetchApp.fetch("https://ads-search.yahooapis.jp/api/v12/BaseAccountService/get", params); 14 15 Logger.log('getHeaders(): ' + response.getHeaders()); 16 Logger.log('getResponseCode(): ' + response.getResponseCode()); 17 Logger.log('getContentText(): ' + response.getContentText()); 18}

ログ①

getHeaders(): {"Transfer-Encoding":"chunked","x-yahoo-ads-rid":"50577f5cbb1b1541ff25c0df4ac900a1","X-Content-Type-Options":"nosniff","X-XSS-Protection":"1; mode=block","Date":"Wed, 20 Sep 2023 06:55:57 GMT","Content-Type":"application/json;charset=UTF-8","X-Frame-Options":"SAMEORIGIN","x-vcap-request-id":"c4916d79-ea22-44e4-74fc-84bab8d34898","Connection":"keep-alive","Vary":"Access-Control-Request-Headers"}

getResponseCode(): 400

getContentText(): {"rid":"dd1fa4ef4f6af9dabace8cc3ce471056","errors":[{"code":"0005","message":"Bad request.","details":[]}]}

試したソースコード②

GAS

1function check() { 2 3 var CLIENT_ID = 'something'; 4 var CLIENT_SECRET = 'something'; 5 var access_token = 'something'; 6 7 var payload = { 8 client_id: CLIENT_ID, 9 client_secret: CLIENT_SECRET 10 }; 11 12 var params = { 13 method : 'post', 14 contentType: 'application/json', 15 headers: { 16 'Authorization': 'Bearer ' + access_token 17 }, 18 payload: JSON.stringify(payload), 19 muteHttpExceptions: true 20 }; 21 var response = UrlFetchApp.fetch("https://ads-search.yahooapis.jp/api/v12/BaseAccountService/get", params); 22 23 Logger.log('getHeaders(): ' + JSON.stringify(response.getHeaders())); 24 Logger.log('getResponseCode(): ' + response.getResponseCode()); 25 Logger.log('getContentText(): ' + response.getContentText()); 26}

ログ②

getHeaders(): {"X-Frame-Options":"SAMEORIGIN","X-Content-Type-Options":"nosniff","x-vcap-request-id":"52eae2bc-dc0d-4242-6470-2ae6d0934bcf","Content-Type":"application/json;charset=UTF-8","Vary":"Access-Control-Request-Headers","Transfer-Encoding":"chunked","Connection":"keep-alive","Date":"Wed, 20 Sep 2023 08:15:16 GMT","X-XSS-Protection":"1; mode=block","x-yahoo-ads-rid":"8309ff0dcc59fc23e593e705d468b982"}

getResponseCode(): 400

getContentText(): {"rid":"8309ff0dcc59fc23e593e705d468b982","errors":[{"code":"0005","message":"Bad request.","details":[]}]}

解決

function check() { var access_token = 'something'; var payload = { "accountIds": [] }; var params = { method : 'post', contentType: 'application/json', headers: { 'Authorization': 'Bearer ' + access_token }, payload: JSON.stringify(payload), muteHttpExceptions: true }; var response = UrlFetchApp.fetch("https://ads-search.yahooapis.jp/api/v12/BaseAccountService/get", params); var accountId = JSON.parse(response)["rval"]["values"][0]["account"]["accountId"]; Logger.log('accountId: ' + accountId); }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2023/09/19 16:29

タグにある java は関係ありますか?
quwant

2023/09/20 00:27

すみません、Javaは関係ありませんのでタグを削除いたしました。 お指摘いただきありがとうございます。
guest

回答1

0

ベストアンサー

リファレンスページを見る限り、リクエストメソッドはgetではなくてpostの様です。

リファレンスを読む限り、リクエストボディが必須ではなさそうな記述はしますが、 '{}' といった空オブジェクトを送信するなど試してみてください。
パラメータを何らか設定するのであれば accountIds[] など、定義されているパラメータを送信してください。

リファレンスは下記になります。
https://ads-developers.yahoo.co.jp/reference/ads-search-api/v12/BaseAccountService/get/

投稿2023/09/20 04:50

編集2023/09/20 11:26
Eggpan

総合スコア3257

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

quwant

2023/09/20 05:56 編集

ご回答ありがとうございます。 下記コードに修正して実行したのですが取得できませんでした。。。 ``` function check() { var access_token = 'something'; var params = { method: 'post', contentType: 'application/json', headers: { 'Authorization': 'Bearer ' + access_token }, muteHttpExceptions: true } var response = UrlFetchApp.fetch("https://ads-search.yahooapis.jp/api/v12/BaseAccountService/get", params); var response_body = JSON.parse(response.getContentText()); Logger.log(response_body); } ``` ```エラー {rid=f0cdb3c2c6b203d65cbea9c06e480e4f, errors=[{message=Bad request., details=[], code=0005}]} ```
Eggpan

2023/09/20 06:05

エラーコードやレスポンスも変わりませんでしたか? response.getHeaders() response.getResponseCode() などでレスポンスのヘッダやステータスを取得できますので、body以外にこれらも合わせて質問欄に起きていることを追記いただければ、より良い回答がつくかもしれません。
quwant

2023/09/20 06:31 編集

postにしたことで今まで「code: 0001, message: Invalid Request」だったものが「code: 0005, message: Bad request」に変化しました。 また、ご指摘のあったbody以外の情報も出力するようにコードを修正しました。
Eggpan

2023/09/20 06:49

ヘッダがobjectのようなので、これは JSON.stringify() にかければ文字列として表示出来ると思います。 あとはそうですね、リクエストボディが未指定のようなので、 payload : "{}", を headers の中に追加してみる、とかでしょうか。 Bad requestはリクエストの内容が正しくない場合に帰ってくるコードですが、詳細がないのでちょっとわからないですね・・
quwant

2023/09/20 07:00

JSON.stringify()を使用したことでヘッダ内容が確認できました。質問内容を修正しております。 「payload : "{}",を headers の中に追加してみる」というのは下記のような形式になる認識で合ってますでしょうか? ``` var params = { method: 'post', contentType: 'application/json', headers: { payload : "{ aaa: bbb, ccc: ddd }", 'Authorization': 'Bearer ' + access_token }, muteHttpExceptions: true } ```
Eggpan

2023/09/20 07:08

payloadはヘッダではないので、この場合だとparams.payloadにセットします。 また、例として上げてもらった内容のpayloadはjsonとして正しく無いです。内容をセットするならオブジェクトをJSON.stringifyで変換したほうが良いです。
quwant

2023/09/20 08:23

payloadを追加したのですが変わらずBad requestでした。 質問内容に追記してあります。 おそらく、paramやpayloadに不足があるのかなと考えているのですが、何が必要かという記載はどこかにあるものでしょうか。リファレンスに記載があるとかですか。
quwant

2023/09/20 12:31

payloadにaccountIds[]を指定したら取得することができました! パラメータが省略可能なのではなく、指定値が省略可能という意味だったんですね。 色々とご教授いただきありがとうございました!
Eggpan

2023/09/20 12:35

解決されたようで良かったです。 リファレンスページを読む限り、accountIdsを含む全部のキーは必須ではない(任意)の様に思えましたが、payload完全に無しがだめなのかな?と思い、 '{}' ではどうかと記載していました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問