페이스북 앱 생성 및 설정
페이스북 API를 사용하여 광고 데이터를 사용하기 위해서는 페이스북 비지니스 앱 생성 후 광고계정과 연동이 필요하다. 페이스북 광고 계정관리자에서 계정 정보와 페이지 정보를 확인한다. 광고계정 ID는 Facebook API사용시 필요한 정보이므로 다른 Id 정보와 혼동하지 않도록 한다.
비지니스 앱 생성은 developers.facebook.com/apps으로 이동한다. 오른쪽 상단의 앱만들기 버튼을 클릭한다.
비니지스 통합 관리 선택후 앱 이름을 입력한다. 앱 목적은 사내에서만 사용할 목적이니 첫번째 항목을 선택했다. 하단의 비지니스 관리자를 선택하여 생성할 비지니스 앱과 비지니스 광고계정을 연결한다.
비지니스 앱 생성에 성공하여 앱 상세 페이지에서 제품을 추가 할 수 있다. 왼쪽 하단의 마케팅 API의 설정버튼을 클릭한다.
마케팅 api의 도구 메뉴를 클릭하여 샌드박스 광고계정항을 추가한다. 페이지 선택 영역은 페이스북 광고관리자에서 사용중인 페이스북 페이지 목록이다. 모든 페이지를 선택했다.
광고 계정 생성 후 액세스 토큰을 발급 받는다. 이 토큰을 사용하여 python에서 페이스북 광고 데이터를 사용 할 수 있다. 앱 id와 시크릿 코드도 확인하여 복사한다.
Python 코드 작성
facebook python business sdk를 설치한다. github.com/facebook/facebook-python-business-sdk 에서 간단한 예제와 설명을 확인 할 수 있다.
facebook/facebook-python-business-sdk
An SDK built to facilitate application development for Facebook Ads API. - facebook/facebook-python-business-sdk
github.com
pip 를 사용하여 패키지를 설치한다.
pip install facebook_business
패키지 설치후 아래 코드를 실행하면 사용 가능한 광고 계정 정보를 확인 할 수 있다.
from facebook_business.adobjects.adaccount import AdAccount
from facebook_business.adobjects.adsinsights import AdsInsights
from facebook_business.api import FacebookAdsApi
from facebook_business.adobjects.user import User
from facebook_business.adobjects.campaign import Campaign
from facebook_business.adobjects.ad import Ad
from facebook_business.adobjects.adimage import AdImage
from facebook_business.adobjects.adcreative import AdCreative
from tqdm import tqdm_notebook
import datetime
# 페이스북 개발자 페이지에서 비지니스 앱 생성후
# 마케팅 api 추가하여 권한 설정후 토큰 발급 받기
access_token = 'EAAL9I8vmlY '
app_secret = 'EAAL9I8vmlY'
app_id = '123123123'
FacebookAdsApi.init(app_id, app_secret, access_token)
me = User(fbid='me')
my_accounts = list(me.get_ad_accounts())
print(my_accounts)
광고계정 정보를 확인했다면 광고 데이터에 접근해보도록 한다. 2020년 12월 10일 부터 2020년 12월 15일 사이의 1일 단위의 광고 데이터를 가져오는 코드이다.
insightFields = [
AdsInsights.Field.campaign_name,
AdsInsights.Field.campaign_id,
AdsInsights.Field.adset_id,
AdsInsights.Field.adset_name,
AdsInsights.Field.ad_id,
AdsInsights.Field.ad_name,
AdsInsights.Field.impressions, # 노출
AdsInsights.Field.clicks,
AdsInsights.Field.cpm, # 1000 노출당 비용
AdsInsights.Field.ctr, # 사람들이 광고를 보고 클릭(전체) 행동을 취한 비율
AdsInsights.Field.cpp, # 사람들이 광고를 보고 클릭(전체) 행동을 취한 비율
AdsInsights.Field.spend, # 광고비
AdsInsights.Field.reach, # 도달
AdsInsights.Field.purchase_roas,
AdsInsights.Field.conversions,
AdsInsights.Field.date_start,
AdsInsights.Field.date_stop,
AdsInsights.Field.objective, # 광고 목적
AdsInsights.Field.actions, # purchase(구매수)
]
begin = datetime.date(2020, 12, 10)
end = datetime.date(2020, 12, 15)
# 전체 데이터 저장 할 변수
total_li = []
for day in tqdm_notebook(range((end - begin).days)):
day = begin + datetime.timedelta(days=day)
day = day.strftime('%Y-%m-%d')
# 일단위 광고 데이터 받아오기
# 캠페인, 광고셋, 광고 중 최소단위인 광고데이터를 성별과 나이로 구분
params = {
'time_range': {'since': day, 'until': day},
'level': 'ad',
'breakdowns': ['age', 'gender'],
}
# 광고계정 연결
insights = AdAccount('act_광고계정id').get_insights(params=params, fields=insightFields)
# 1일 단위의 광고 정보
for ins in insights:
purchase_roas = 0
# 로하스 값만 가져오기
if 'purchase_roas' in ins:
purchase_roas = ins['purchase_roas'][0]['value']
purchase = 0
post_engagement = 0
if 'actions' in ins:
actions = ins['actions']
purchase = list(filter(lambda x: x['action_type'] == 'purchase', ins['actions'] ))
if len(purchase) > 0:
purchase = purchase[0]['value']
post_engagement = list(filter(lambda x: x['action_type'] == 'purchase', ins['actions'] ))
if len(post_engagement) > 0:
post_engagement = post_engagement[0]['value']
cpp = -1
if 'cpp' in ins:
cpp = ins['cpp']
cpm = -1
if 'cpm' in ins:
cpm = ins['cpm']
ctr = 0
if 'ctr' in ins:
ctr = ins['ctr']
row = {
'objective': ins['objective'],
'campaign_id':ins['campaign_id'],
'adset_id': ins['adset_id'],
'ad_id':ins['ad_id'],
'ad_name':ins['ad_name'],
'gender':ins['gender'],
'age':ins['age'],
'date_start':ins['date_start'],
'date_stop':ins['date_stop'],
'date' : since,
'spend':ins['spend'],
'impressions':ins['impressions'],
'clicks':ins['clicks'],
'reach':ins['reach'],
'cpp':cpp,
'ctr':ctr,
'cpm':cpm,
'purchase_roas':purchase_roas,
'purchase':purchase,
}
total_li.append(row)
rdf = pd.DataFrame(total_li)
광고 데이터를 가져왔으나 광고의 이미지나 동영상을 확인할 수 없다. 광고에 사용된 이미지, 동영상 정보를 가져오도록 한다.
creativeFields = [
AdCreative.Field.name,
AdCreative.Field.image_url,
AdCreative.Field.image_hash,
AdCreative.Field.thumbnail_url,
AdCreative.Field.title,
AdCreative.Field.object_id,
AdCreative.Field.link_url
]
# 광고에 사용된 이미지 가져오기
crow_li = []
for ad_id in tqdm_notebook(rdf['ad_id'].unique()):
# 광고id로 광고 접근
ad = Ad(ad_id)
# 광고 비주얼 가져오기
creatives = ad.get_ad_creatives(fields=creativeFields)[0]
cid = creatives['id']
# 이미지가 있다면 이미지 가져오기
thumbnail_url = ''
if 'thumbnail_url' in creatives:
thumbnail_url = creatives['thumbnail_url']
# 광고 미리보기 태그
body = ad.get_previews(params={'ad_format': 'RIGHT_COLUMN_STANDARD',})[0]['body']
crow = {'ad_id': ad_id, 'c_id': cid, 'thumbnail_url':thumbnail_url, 'body':body}
crow_li.append(crow)
cdf = pd.DataFrame(crow_li)
위 코드로 광고의 데이터와 광고 이미지, 미리보기를 수집 할 수 있다. 수집된 데이터로 원하는 대시보드를 만드는 일만 남았다.
페이스북 공식 문서를 참고하여 api 사용법을 확인하면 된다.
developers.facebook.com/docs/marketing-api/reference/sdks/python/ad/v9.0
Python Marketing API SDK - Ad - 마케팅 API - 문서 - Facebook for Developers
Python Ads SDK for Ad
developers.facebook.com
공식문서 이외에 참고한 페이지도 기록한다.
Damien Gonot
www.damiengonot.com
Python AdAccount.get_ad_images Examples, facebookadsobjects.AdAccount.get_ad_images Python Examples - HotExamples
python.hotexamples.com
'Python' 카테고리의 다른 글
Python - Django REST Framework 초기 설정 (0) | 2020.12.29 |
---|---|
Python - 구글애널리틱스 API (0) | 2020.12.24 |
python - cafe24 매출 데이터 수집 자동화 (0) | 2020.12.18 |