こんばんは、ウチイダです。
Amazon Ads API を利用して、広告費用を最適化するアプリケーションの開発をご依頼いただきました。
ドキュメントが今のところ英語しかないので、頑張って読み解きつつ進めています。
https://advertising.amazon.com/API/docs
LaravelでAmazon Ads APIとの通信部分を実装しているなかで、広告パフォーマンスのレポートデータをダウンロードする部分で少し苦労したのでメモしておきます。
Amazon Ads API では、クリック数や広告経由の売り上げなどの情報を取得するために、以下の手順を踏む必要があります。
- レポートデータの生成をリクエスト
- 最大15分ほど、レポートデータが生成されるのを待つ
- レポートデータが生成されたら、Amazon S3からダウンロードする
3でダウンロードされるデータがgzipで圧縮されていたので、うまくレスポンスを受け取るのに少し工夫が必要でした。
ちなみに、手順1, 2はLaravel Httpのドキュメントを見ながら結構簡単に実装できました。
https://readouble.com/laravel/9.x/ja/http-client.html
実際にうまく動作したコードは、以下のような感じです。
downloadのエンドポイントは、存在するレポートデータのIDに対してリクエストされたら、リダイレクトしてAmazonS3 バケットに配置されたデータを返してくれます。
Content-typeはapplication/jsonにしつつ、gzipのデータを取得するように設定する必要があります。
ポイントはwithOptions()でgzipのデータを受け取ることを記述している点です。
‘decode_content’ で指定できるのですね。
この設定値はLaravelのドキュメントには記載されていなくて、Guzzle のドキュメントを見る必要がありました。
https://docs.guzzlephp.org/en/stable/request-options.html#decode-content
ちなみに、ヘッダー内に書く場合は以下のようになります。
withOptions() がなくなってチェインするメソッドが減ったので、今回の場合であればこっちの方がすっきりします。
withToken()も、Bearer の記述をコード内に書けばwithHeaders() に含めることができるので、もっとまとめてしまうこともできます。
ウチイダ的にはwithToken() を使う方が楽なので、このままにしています。
以上です。あなたのお役に立てれば幸いです。
最近のコメント