I am trying to pull campaign costs/total spend from the API I am 100% new to the API and I am not able to crack it through
I want to : 1- get cost per campaign 2- get campaign ids that showup on the GUI not just the kind of weird codes ie 8cdfn vs 1448530943
here is my python code so far
from twitter_ads.client import Client
from twitter_ads.cursor import Cursor
from twitter_ads.http import Request
from twitter_ads.error import Error
import time
from twitter_ads.campaign import LineItem
from twitter_ads.enum import METRIC_GROUP
from twitter_ads.enum import GRANULARITY
client = Client(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
account = client.accounts(ACCOUNT_ID)
cids = map(lambda x: x.id, account.campaigns())
resource = ‘/2/stats/accounts/{account_id}/’.format(account_id=account.id)
params = { ‘entity’:‘CAMPAIGN’,
‘entity_ids’:cids,
‘start_time’: ‘2017-12-10’,
‘end_time’:‘2017-12-16’,
‘granularity’:‘TOTAL’,
‘metric_groups’: ‘BILLING’,
‘placement’: ‘PUBLISHER_NETWORK’}
try, build and execute the request with error handling
try:
response = Request(client, ‘get’, resource, params=params).perform()
print(response.body[‘data’])
except Error as e:
# see twitter_ads.error for more details
print e.details
raise
Here is the solution that worked for me the trick is that passing multiple placements doesn't work in the API
from datetime import date,timedelta
import datetime
import logging
import sys
import os
import gzip
import shutil
import csv
import requests
import json
from twitter_ads.client import Client
from twitter_ads.cursor import Cursor
from twitter_ads.http import Request
from twitter_ads.error import Error
from twitter_ads.client import Client
from twitter_ads.campaign import LineItem
from twitter_ads.enum import METRIC_GROUP
from twitter_ads.enum import GRANULARITY
import twitter_ads
import time
client = Client(CONSUMER_KEY, CONSUMER_SECRET, ACCESS_TOKEN, ACCESS_TOKEN_SECRET)
# load the advertiser account instance
account = client.accounts(ACCOUNT_ID)
cids = list(map(lambda x: x.id.encode('utf-8'), account.campaigns()))
campaigns = list(map(lambda x: [x.id.encode('utf-8'),x.name.encode('utf-8'), int(x.id,36)] , account.campaigns()))
resource = '/2/stats/accounts/{account_id}/'.format(account_id=account.id)
spend=[]
for c in campaigns:
for p in ['ALL_ON_TWITTER', 'PUBLISHER_NETWORK']:
params = { 'entity':'CAMPAIGN',
'entity_ids':c[0], #cids,
'start_time': target_date,
'end_time':target_date+timedelta(1),
'granularity':'DAY',
'metric_groups': ['BILLING','ENGAGEMENT'],
'placement': p
}
# try, build and execute the request with error handling
try:
req =Request(client, 'get', resource, params=params)
response = req.perform()
val = response.body['data']
val.append(p)
val.append(c[0])
val.append(c[1])
val.append(c[2])
spend.append(val)
except Error as e:
# see twitter_ads.error for more details
print e.details
raise
ddd= json.loads(json.dumps(spend))
with open(target_path+row['account_id']+'_campaign_spend.csv', "w") as output:
writer = csv.writer(output, lineterminator='\n')
writer.writerow(['time_id','campaign_id_36', 'campaign_id','campaign_desc','placement','spend_micro', 'account_id'])
for val in ddd:
if (val[0]["id_data"][0]["metrics"]['billed_charge_local_micro'] and val[0]["id_data"][0]["metrics"]['billed_charge_local_micro'][0]):
writer.writerow([str(target_date).replace("/","-"),val[2],val[4],val[3],val[1], val[0]["id_data"][0]["metrics"]['billed_charge_local_micro'][0], ACCOUNT_ID])