Пишем свой коннектор facebook ads в google bigquery
Если вы работаете с facebook ads, то в какой-то момент, приходит понимание, что неплохо бы смотреть статистику по рекламе не только в интерфейсе, но и в других системах.

Например, если использовать app+web google analytics, то мы получаем бесплатный коннектор в google bigquery, и можем делать классные отчеты на базе google data studio (кстати, в прошлой статье, я описал несколько фишек про это) или других систем визуализации, а для этого нам нужные данные по рекламной активности.

И если с google ads все просто, мы просто можем использовать bigquery transfer, который позволяет передавать в google bigquery множество данных по рекламе, и настраивается за пару минут, то с другими источниками данных сложнее.

На рынке есть множество платных и условно платных сервисов, которые решают эту задачу, но зачем же платить деньги, если у нас есть классные cloud function в google cloud.

А еще, кроме визуализации данные по facebook ads в data studio, можем из bigquery загружать эти данные в google analtyics, или в целом автоматизировать маркетинг.
Создание google cloud project
Если у вас еще нет своего проекта в google cloud, самое время его создать. Для этого идем на console.cloud.google.com и регистрируемся.
Затем, нам нужно создать новый проект:
И да, вы получите $300 долларов на год, так что первый год все будет бесплатно. Заполняем все необходимые данные по биллингу, чтобы создать новый проект:
И, ура, у нас настроенный проект:
Для публикации функций, у нас есть возможность работать с gcloud (command-line tool, в терминале) или работать с web ui, к которому мы только что получили доступ.

Если у вас не было опыта работы в терминале, то, это может привести к известным трудностям, поэтому рекомендую настраивать всё в веб версии.

Для установки gcloud, идем по адресу идем по адресу, и, в зависимости от вашей операционной системы, выполняем инструкции.

Не забываем поставить галочку напротив beta commands, они нам нужны.

Теперь, нам нужно установить gcloud command-line tool, чтобы мы могли работать с нашим google cloud project с локальной машины.

Для этого, идем по адресу, и, в зависимости от вашей операционной системы, выполняем инструкции.

Не забываем поставить галочку напротив beta commands, они нам нужны.
Facebook ads ETL
Получение credentials facebook
Для начала, нам нужно завести приложение на https://developers.facebook.com/
И выбираем create app:
Тут мы можем получить app_id, app_secret и access_token:
APP_ID можно получить прямо на главном экране:
Дальше, APP_SECRET, мы можем взять из раздела Settings - Basic:
И, самое интересное, это взять токен, для этого нажимаем на последний пункт — Product в левой части меню и выбираем Marketing API, нажимаем на Set up:
Далее, после добавления Marketing API, заходим в раздел Tools, где выбираем галочки read_insights и ads_read и нажимаем на галочку "GET TOKEN" и сохраняем себе токен.

Токен, полученный таким способом живет 60 дней, затем его нужно сгенерировать снова, чтобы получить long live токен, можно пройти верификацию facebook:
Все эти три переменные нам будут нужны для загрузки данных по расписанию.

Также, нам будет нужен account_id, его мы можем найти в Ads Manager:
Установка через web ui
Для начала создадим topic в pubsub, для этого заходим в левом меню в раздел PubSub и выбираем topic:
Нажимаем на create topic и набираем facebook_run:
Теперь, переходим на репозиторий https://github.com/snegireff/facebook_ads_bigquery_etl и нажимаем на кнопку clone or download и скачиваем zip файл себе:
Так как, zip файл содержит папку с исходным кодом, нужно разархивировать ее, зайти в нее и сделать zip архив файлов:
Затем, заходим в раздел cloud function в левом меню и нажимаем на create function:
Название может быть произвольное, в memory allocated выбираем 1GiB, как триггер указываем cloud pub/sub, а топик, тот, что мы создали на прошлом шаге.

После чего, указываем тип ZIP upload:
Runtime у нас будет python 3.7, выбираем наш файл с архивом и указываем в storage bucket любой доступный bucket, функция должна называться как get_facebook_data.

Дальше, нажимаем на more:
И меняем максимальное время выполнение на 540:
И нажимаем на Create, после чего, через пару минут, наша функция опубликована:
После чего, нам нужно сделать так, чтобы наша функция запускалась по расписанию, для этого нам отлично подойдет cloud scheduler, так как аттрибуты задать через web ui пока нельзя, воспользуемся Cloud Shell, для этого нажмем на значок терминала:
gcloud beta scheduler jobs create pubsub facebook --time-zone "Europe/Kiev" --schedule "0 5 * * *" --topic facebook_run --message-body "get_facebook" --attributes project_id=PROJECT_ID,dataset_id=DATASET_ID,table_id=TABLE_ID,account_id=ACCOUNT_ID,app_id=APP_ID,app_secret=APP_SECRET,access_token=ACCESS_TOKEN
Где,
PROJECT_ID = your google cloud PROJECT_ID
DATASET_ID = for example "facebook"
TABLE_ID = for example "fb_stat"
ACCOUNT_ID = your facebook account id without act_
APP_ID, APP_SECRET, APP_TOKEN = from apps developers.facebook.com

И в 5 утра по Киеву (время выполнения кодируется ключом --schedule, и временная зона --time-zone) каждый день, данные будут записываться в нашу табличку в google bigquery.

Что загрузить данные за вчера, заходим в Сloud Scheduler, в консоли google cloud и нажимаем Run now:
После чего, через пару минут, в bigquery у нас появится новый dataset и таблица с данными за вчера:
Настройка в терминале
Или можем загрузить себе код из моего github репозитория, для этого создаем новую папке, и в терминале, в этой папке вызываем команду:
git clone https://github.com/snegireff/facebook_ads_bigquery_etl.git
Дальше, можем начать работу, для начала авторизуемся командой:
gcloud auth init
И установим проект для нашего gcloud, project id отображается на странице home в консоле google cloud в разделе Project info, для этого в терминале вызываем:
gcloud config set project ВАШ_PROJECT_ID
Чтобы общаться с нашей функцией, используется механизм pubsub из google cloud, поэтому создадим новый топик, для этого в терминале вызываем:
gcloud pubsub topics create facebook_run
Для публикации cloud function, которая содержит в себе и возможность собирать статистику по facebook и данные по обменному курсу, в терминале, в папке с исходным кодом, вызываем команду (на все вопросы отвечаем Y):
gcloud functions deploy get_facebook_data --runtime python37 --trigger-topic facebook_run --timeout=540 --memory=1024MB
После чего, нам нужно сделать запуск наших функций по расписанию, для facebook, в терминале вызываем такую команду, где заполняем значения (на все вопросы отвечаем Y, зону я обычно использую 13):
gcloud beta scheduler jobs create pubsub facebook --time-zone "Europe/Kiev" --schedule "0 5 * * *" --topic facebook_run --message-body "get_facebook" --attributes project_id=PROJECT_ID,dataset_id=DATASET_ID,table_id=TABLE_ID,account_id=ACCOUNT_ID,app_id=APP_ID,app_secret=APP_SECRET,access_token=ACCESS_TOKEN
Где,
PROJECT_ID = your google cloud PROJECT_ID
DATASET_ID = for example "facebook"
TABLE_ID = for example "fb_stat"
ACCOUNT_ID = your facebook account id without act_
APP_ID, APP_SECRET, APP_TOKEN = from apps developers.facebook.com

И в 5 утра по Киеву (время выполнения кодируется ключом --schedule, и временная зона --time-zone) каждый день, данные будут записываться в нашу табличку в google bigquery.

Что загрузить данные за вчера, заходим в Сloud Scheduler, в консоли google cloud и нажимаем Run now:
После чего, через пару минут, в bigquery у нас появится новый dataset и таблица с данными за вчера:
Currency converter
Но, просто загрузить данные из facebook, часто не достаточно, так как данные по расходам отображаются только в USD, а другие метрики, описывающие деньги, например revenue, могут отображаться в других валютах. Так что сделаем вторую функцию, которая ежедневно будет забирать данные о курсе обмена и складывать в другую табличку в том же dataset.

Есть хороший сервис для этого — currencylayer.com, который позволяет бесплатно загружать данные до 250 раз в месяц, чего нам больше, чем достаточно.

Регистрируемся на тарифном плане free:
И в разделе https://currencylayer.com/dashboard, копируем и сохраняем token, нам он понадобиться для загрузки данных по расписанию.

Для создания загрузки по расписанию, в терминале или cloud shell вызываем такую команду:
gcloud beta scheduler jobs create pubsub converter --time-zone "Europe/Kiev" --schedule "0 5 * * *" --topic facebook_run --message-body "get_currency" --attributes project_id=PROJECT_ID,dataset_id=DATASET_ID,table_id=TABLE_ID,api_key=API_KEY,from_currency=USD,to_currency=UAH
, где заполняем значения:

PROJECT_ID = your google cloud PROJECT_ID
DATASET_ID = for example "facebook"
TABLE_ID = for example "exchange_rate"
API_KEY = значение ключа из currencylayer.com
From_currency = оставляем USD
To_currency = указываем свою валюту, например UAH

Join our channel in telegrams: https://t.me/firebase_app_web_bigquery


Made on
Tilda