import csv
import os
import requests
url = "https://dialedapi.evomarketing.co/api/v1/posts"
headers = {"Authorization": f"Bearer {os.environ['EVO_API_KEY']}"}
params = {"period": "30d", "limit": 100}
columns = [
"id", "url", "platform", "caption", "posted_at", "campaign_id",
"campaign_name", "creator_id", "creator_name", "creator_handle",
"views", "likes", "comments", "shares", "engagement_rate",
]
with open("evo-placements.csv", "w", newline="", encoding="utf-8") as output:
writer = csv.DictWriter(output, fieldnames=columns)
writer.writeheader()
while True:
response = requests.get(url, headers=headers, params=params, timeout=30)
response.raise_for_status()
result = response.json()
for placement in result["data"]:
writer.writerow({
**{key: placement.get(key) for key in columns},
"campaign_id": placement["campaign"]["id"],
"campaign_name": placement["campaign"]["name"],
"creator_id": placement["creator"]["id"],
"creator_name": placement["creator"]["name"],
"creator_handle": placement["creator"]["handle"],
})
if not result["pagination"]["has_more"]:
break
params["cursor"] = result["pagination"]["next_cursor"]