【python】facebook(meta)APIで広告情報を取得する

はじめに

Facebook広告のデータを日毎に取得してKPIを確認したいという希望があり、その実装を行なったので備忘録として、特にAPI関連について残したいと思います。

今回の実装では、広告情報を取得するに必要な情報を書いており、以下の4点について紹介していきます。

・グラフAPI

・access token

・登録キャンペーン一覧の取得

・キャンペーン情報の取得

*以下のグラフAPIエクスプローラーが動作確認にとても便利なので使ってみることをお勧めします!!

https://developers.facebook.com/tools/explorer/

Facebook グラフAPI

FacebookグラフAPIでは、facebook関連のデータを取り出すことができるAPIです。すべてのデータ転送はHTTP/1.1に準拠しており、すべてのエンドポイントはHTTPSを必要としています。また、pythonやJSなどではSDKも提供されているようですが、今回はURLをリクエストすることで実装しました。

以下は公式ドキュメントからの抜粋です。

グラフAPIは、Facebookプラットフォームにデータを取り込んだり、Facebookプラットフォームからデータを取り出したりするための主要な手段です。HTTPベースのAPIであり、プログラムによるデータのクエリ、新しいストーリーの投稿、広告の管理、写真のアップロードなど、アプリのさまざまなタスクに利用できます。

グラフAPIは、ノード、エッジ、フィールドで構成されています。一般的に、ノードは特定のオブジェクトに関するデータを取得するために使用し、エッジは単一のオブジェクトに接続されたオブジェクトのコレクションを取得するために使用し、フィールドは単一のオブジェクトまたはコレクション内の各オブジェクトに関するデータを取得するために使用します。

facebook

アクセストークン

Facebookのアクセストークンは永続的に使えるものは存在せず、手動で定期的に更新する必要があるみたいです。。。

(自動化する方法をご存知の方いらっしゃいましたら是非コメントなどで教えて欲しいです)

アクセストークンを取得するためにはfacebookのdeveloperに登録する必要があります。アクセストークンの取得までは、いろんな記事で紹介されているためここでは割愛させていただきます。

Facebook developerに登録していれば以下のリンクから生成することも可能です!

https://developers.facebook.com/tools/explorer/

登録キャンペーンの取得

Facebookの広告はキャンペーン -> 広告セット(Ads) -> 広告(Ad)の流れでグルーピングされており、一番上の階層からデータを取得してあげることで、全ての広告データを取得することができます。

参考図

Pythonでリクエスト

import urllib.request
def get_method(url):
  response = urllib.request.urlopen(url)
  print(response.getcode())
  html = response.read()
  jsondata = html.decode('utf-8')
  jsondata = json.loads(jsondata)

  return jsondata

キャンペーンidの取得

url = f"https://graph.facebook.com/v13.0/{user_id}/campaigns?effective_status=%5B%22ACTIVE%22%2C%22PAUSED%22%5D&fields=name%2Cobjective&access_token={access_token}"

user_idはFacebook developerのURLから確認することができます。act_を含めた文字列がユーザidです。

そのユーザに所属しているキャンペーンの一覧を取得することができます。

リクエストURL

url = f"https://graph.facebook.com/v12.0/{ad_id}/insights?date_preset=yesterday&fields=date_start%2Cdate_stop%2Ccampaign_id%2Ccampaign_name%2Creach%2Cspend%2Cclicks%2Cunique_clicks%2Cctr%2Ccpm%2Cimpressions%2Cad_name%2Cadset_name&access_token={access_token}"

自分のリクエストURLでは、前日のデータにおける、クリック数やユニーククリック数、CTRなどを取得するようにしています。パラメータフィールドに関しては公式ドキュメントを参照してください。

https://developers.facebook.com/docs/marketing-api/reference/adgroup

おわりに

今回は、集計するのが面倒なfacebookの広告データを日毎に更新できるようにしました。アクセストークンだけは手動更新になってしまいましたが、かなり楽にデータ更新ができるようになったと思います。

おすすめの記事