Yahoo広告APIのレポートをPythonで取る4手順
Yahoo広告のレポートをPythonで取ろうとして、最初の1本が動くまでに半日が溶けた。原因はコードの書き方ではない。Google広告やMeta広告と違い、Yahoo検索広告APIのレポートは「その場で数値が返るAPI」ではないからだ。定義を登録し、ジョブの完了を待ち、CSVをダウンロードし、後片付けをする。この4手順を知らずにレスポンスをJSONとして読もうとすると、出てくる例外の文面からは原因がまったく読み取れない。ここでは当月消化を毎日取得している実運用コードをもとに、4手順の流れとつまずいた箇所を書く。対象はYahoo検索広告API v19だ。 レポート取得は「4手順のジョブ処理」になる Yahoo検索広告APIのレポートは、1回のリクエストで数値が返らない。実際の流れは次の4手順だ。 (1) ReportDefinitionService/add でレポート定義を登録し、reportJobId を受け取る (2) ReportDefinitionService/get を叩き、reportJobStatus が COMPLETED になるまで待つ (3) ReportDefinitionService/download でCSVを受け取る (4) 不要になった定義を remove で片づける 実測では、(2)の完了まで3秒から15秒かかった。運用コードでは3秒間隔で最大40回ポーリングしている。日次バッチなら十分な余裕だ。エンドポイントは ads-search.yahooapis.jp/api/v19 になる。ドメインを ads.yahoo.co.jp と書くと404が返る。旧バージョンのv16やv17を叩くと code:0004 URL not found だ。 もう1つ、最初に必ず詰まるのがヘッダーである。リクエストには MCC のIDを x-z-base-account-id ヘッダーに入れる必要がある。これを付け忘れると code:0001 Invalid Request が返る。さらに厄介なのは、レポート以外の読み取り系APIだと エラーにならず0件で返ってくる ことだ。「キャンペーンが1本もない」と読み違えた。仕様の詳細は LINEヤフー広告の公式リファレンス にある。Yahoo広告API全般のつまずきどころは Yahoo広告APIをPyth...