{
    "version": "https:\/\/jsonfeed.org\/version\/1",
    "title": "Блог об аналитике, визуализации данных, data science и BI, заметки с тегом: Facebook API",
    "home_page_url": "http:\/\/test.leftjoin.ru\/tags\/facebook-api\/",
    "feed_url": "http:\/\/test.leftjoin.ru\/tags\/facebook-api\/json\/",
    "icon": "http:\/\/test.leftjoin.ru\/user\/userpic@2x.jpg",
    "author": {
        "name": "Николай Валиотти",
        "url": "http:\/\/test.leftjoin.ru\/",
        "avatar": "http:\/\/test.leftjoin.ru\/user\/userpic@2x.jpg"
    },
    "items": [
        {
            "id": "133",
            "url": "http:\/\/test.leftjoin.ru\/all\/deploy-airbyte-with-facebook-api\/",
            "title": "Как развернуть Airbyte и подключить к нему Facebook API?",
            "content_html": "<p>В этой статье мы покажем, как развернуть open-source сервис Airbyte на вашем компьютере и с его помощью подключиться к Facebook Marketing API.<\/p>\n<p><img src=\"http:\/\/test.leftjoin.ru\/pictures\/1-3.jpg\" border=\"0\" width=\"100%\" height=\"100%\"><\/a><\/p>\n<h2>Что такое Airbyte?<\/h2>\n<p>Airbyte — это платформа интеграции данных с открытым исходным кодом для создания ELT пайплайнов, которая помогает вам реплицировать данные в ваших хранилищах, озерах и базах данных. Кроме того, она имеет удобный интерфейс, который очень красиво оформлен (вы только посмотрите на эту осьминожку)!<\/p>\n<h2>Разворачиваем Airbyte<\/h2>\n<p>Установка Airbyte на машину выполняется достаточно просто. В этом можно убедиться, заглянув в <a href=\"https:\/\/docs.airbyte.com\/quickstart\/deploy-airbyte\">официальную документацию<\/a>. Для этого выполнить несколько шагов:<\/p>\n<ol start=\"1\">\n<li>Установить Docker (см. <a href=\"https:\/\/www.docker.com\/products\/docker-desktop\">Инструкции<\/a>) и убедиться, что у вас стоит последняя версия docker-compose.<\/li>\n<li>Выполнить следующие команды в терминале:<\/li>\n<\/ol>\n<ul>\n<li><a href=\"https:\/\/github.com\/airbytehq\/airbyte.git\">git clone<\/a><\/li>\n<li>cd airbyte<\/li>\n<li>docker-compose up<\/li>\n<\/ul>\n<p>Как только в выводе терминала появится баннер Airbyte, UI станет доступен по адресу <a href=\"http:\/\/localhost:8000.\">http:\/\/localhost:8000.<\/a><\/p>\n<p><img src=\"http:\/\/test.leftjoin.ru\/pictures\/1-31.png\" border=\"0\" width=\"100%\" height=\"100%\"><\/a><\/p>\n<h2>Подключаем Facebook<\/h2>\n<p>С полной документацией по работе с Facebook Marketing из Airbyte можно ознакомиться <a href=\"https:\/\/docs.airbyte.com\/integrations\/sources\/facebook-marketing\">по ссылке<\/a>. Мы же дадим выжимку из нее. Итак, для того, чтобы подключить Facebook в Airbyte, надо учесть следующие условия:<\/p>\n<ul>\n<li>Наличие Facebook Ad Account ID (<a href=\"https:\/\/www.facebook.com\/business\/help\/1492627900875762\">где его найти?<\/a>)<\/li>\n<li>Наличие Facebook App с включенным Marketing API (<a href=\"https:\/\/developers.facebook.com\/docs\/marketing-apis\/get-started\/\">подробнее<\/a>)<\/li>\n<li>Наличие Facebook Marketing API Access Token (<a href=\"https:\/\/developers.facebook.com\/docs\/facebook-login\/guides\/access-tokens#apptokens\">подробнее<\/a>)<\/li>\n<li>Запросить увеличение лимита на количество запросов: Facebook сильно ограничивает токены API, сгенерированные из приложений Facebook с уровнем «Стандартный доступ» (по умолчанию для новых приложений именно такой уровень доступа), что делает невозможным использование токена для синхронизации с Airbyte. Вам нужно будет запросить апгрейд до расширенного доступа для вашего приложения со следующими разрешениями (<a href=\"https:\/\/developers.facebook.com\/docs\/marketing-api\/overview\/authorization\/#access-levels\">подробнее<\/a>):\n<ul>\n  <li>Ads Management Standard Access<\/li>\n  <li>ads_read<\/li>\n  <li>Ads_management<\/li>\n<\/ul>\n<\/li>\n<li>Перед этим вам нужно будет пройти процесс проверки вашей компании (<a href=\"https:\/\/www.facebook.com\/business\/help\/2058515294227817?id=180505742745347\">подробнее<\/a>).<\/li>\n<\/ul>\n<p>После этого можно подключить Facebook в Airbyte.<\/p>\n<ol start=\"1\">\n<li>Заходим в UI на вкладку Sources и нажимаем ‘+ new source’<\/li>\n<\/ol>\n<p><img src=\"http:\/\/test.leftjoin.ru\/pictures\/2-30.png\" border=\"0\" width=\"100%\" height=\"100%\"><\/a><\/p>\n<ol start=\"2\">\n<li>Выбираем в качестве источника Facebook Marketing и прописываем конфигурации подключения:\n<ul>\n  <li>Название источника, под которым он будет отображаться в Airbyte<\/li>\n  <li>Facebook Ad Account ID<\/li>\n  <li>Дата начала — с этого момента будут грузиться данные из Facebook (⚠️ВАЖНО: Данные по инсайтам можно получить только за последние 37 месяцев)<\/li>\n  <li>Дата окончания — до этого момента будут грузиться данные из Facebook (можно оставить пустым, чтобы получать последние данные из аккаунта)<\/li>\n  <li>Facebook Marketing API Access Token<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p><img src=\"http:\/\/test.leftjoin.ru\/pictures\/3-26.png\" border=\"0\" width=\"100%\" height=\"100%\"><\/a><\/p>\n<ol start=\"3\">\n<li>Также имеются несколько дополнительных конфигурационных опций:\n<ul>\n  <li>Включение удаленных данных Campaigns, Ads и AdSets<\/li>\n  <li>Сохранение миниатюр изображений<\/li>\n  <li>Настройка кастомных Insignts<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p><img src=\"http:\/\/test.leftjoin.ru\/pictures\/4-17.png\" border=\"0\" width=\"100%\" height=\"100%\"><\/a><\/p>\n<ol start=\"4\">\n<li>После заполнения полей нажимаем ‘Set up source’ и ждем, пока процесс подключения не завершится<\/li>\n<\/ol>\n<p><img src=\"http:\/\/test.leftjoin.ru\/pictures\/5-16.png\" border=\"0\" width=\"100%\" height=\"100%\"><\/a><\/p>\n<ol start=\"5\">\n<li>При необходимости настройки подключения к источнику можно поменять на его вкладке ‘Settings’<\/li>\n<\/ol>\n<p>Может возникнуть ошибка в связи с тем, что версия фреймворка устарела. Тогда надо будет перейти в основную вкладку ‘Settings’ (шестеренка в левом нижнем углу), там выбрать ‘Sources’, в списке найти Facebook Marketing и нажать кнопку ‘Change’ (или нажать ‘Upgrade all’, чтобы загрузить все доступные обновления).<\/p>\n<p><img src=\"http:\/\/test.leftjoin.ru\/pictures\/5.5.png\" border=\"0\" width=\"100%\" height=\"100%\"><\/a><\/p>\n<h2>Подключаем хранилище данных<\/h2>\n<p>После того, как мы подключили Facebook Marketing, нам необходимо связать этот источник с нашим хранилищем данных.<\/p>\n<ol start=\"1\">\n<li>Нажимаем ‘add destination’ на вкладке с настроенным источником (см. пункт 4 предыдущего раздела) либо идем на вкладку ‘Destinations’ и там нажимаем ‘+ new destination’.<\/li>\n<\/ol>\n<p><img src=\"http:\/\/test.leftjoin.ru\/pictures\/6-16.png\" border=\"0\" width=\"100%\" height=\"100%\"><\/a><\/p>\n<ol start=\"2\">\n<li>Далее выбираем тип хранилища, с которым будем работать. Airbyte может подключаться к большому количеству популярных СУБД. Опишем необходимые шаги конфигурации на примере работы с PostgreSQL. Заполняем следующие поля:\n<ul>\n  <li>Название хранилища, под которым оно будет отображаться в Airbyte<\/li>\n  <li>Хост<\/li>\n  <li>Порт<\/li>\n  <li>База данных<\/li>\n  <li>Схема<\/li>\n  <li>Пользователь<\/li>\n  <li>Пароль<\/li>\n  <li>Нужно ли использовать SSL<\/li>\n  <li>Параметры SSH туннеля (опционально)<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p><img src=\"http:\/\/test.leftjoin.ru\/pictures\/7-10.png\" border=\"0\" width=\"100%\" height=\"100%\"><\/a><\/p>\n<ol start=\"3\">\n<li>После заполнения полей нажимаем ‘Set up destination’ и ждем, пока процесс подключения не завершится<\/li>\n<li>Если вы выполняли подключение к хранилищу отдельно с вкладки ‘Destinations’, то надо связать с ним источник, нажав на ‘add source’<\/li>\n<\/ol>\n<p><img src=\"http:\/\/test.leftjoin.ru\/pictures\/8-11.png\" border=\"0\" width=\"100%\" height=\"100%\"><\/a><\/p>\n<ol start=\"5\">\n<li>При необходимости настройки подключения к хранилищу можно поменять на его вкладке ‘Settings’<\/li>\n<li>Версию образа для работы с хранилищем можно обновить при необходимости (по аналогии с тем, что мы писали в конце предыдущего раздела)<\/li>\n<\/ol>\n<h2>Настраиваем связь источника и  хранилища данных<\/h2>\n<p>После всех проделанных шагов у нас открывается вкладка ‘Set up connection’, на которой мы можем настроить то, как и какие данные мы будем грузить с помощью Airbyte:<\/p>\n<ul>\n<li>Как часто будет происходить загрузка<\/li>\n<li>Куда именно мы будем помещать данные в хранилище<\/li>\n<li>Какие данные из источника мы будем брать и каким образом (Full refresh | Increment, Overwrite | Append)<\/li>\n<li>Надо ли нормализовывать данные (сырые данные все равно останутся в хранилище)<\/li>\n<li>Настройка кастомных трансформаций (опционально)<\/li>\n<\/ul>\n<p><img src=\"http:\/\/test.leftjoin.ru\/pictures\/9-10.png\" border=\"0\" width=\"100%\" height=\"100%\"><\/a><br \/>\nПосле заполнения полей, нажимаем ‘Set up connection’. Далее откроется страница настроенного подключения, где мы можем наблюдать историю выгрузок данных, а также вносить изменения в установленную связь Источник-Хранилище.<\/p>\n<p><img src=\"http:\/\/test.leftjoin.ru\/pictures\/10-9.png\" border=\"0\" width=\"100%\" height=\"100%\"><\/a><br \/>\nЕсли нажать на Sync, то будут показаны логи исполнения.<\/p>\n<h2>Результаты<\/h2>\n<p>После того, как загрузка была успешно завершена, мы можем заглянуть в наше хранилище.<\/p>\n<p><img src=\"http:\/\/test.leftjoin.ru\/pictures\/11-8.png\" border=\"0\" width=\"50%\" height=\"50%\"><\/a><\/p>\n<p>Сразу можно обратить внимание на количество сгенерированных таблиц.<\/p>\n<p><img src=\"http:\/\/test.leftjoin.ru\/pictures\/12-6.png\" border=\"0\" width=\"100%\" height=\"100%\"><\/a><\/p>\n<p>Так как мы указали, что нам необходима нормализация данных, то у нас в результате получилось чуть меньше 400 таблиц для streams [activities, ‘ad_account’, ‘ad_creatives’, ‘ad_sets’, ‘ads’, ‘ads_insights’, ‘campaigns’], причем многие из них оказались пустыми (так сгенерировал Airbyte).<\/p>\n<p><img src=\"http:\/\/test.leftjoin.ru\/pictures\/13-6.png\" border=\"0\" width=\"20%\" height=\"20%\"><\/a><\/p>\n<p>Сырые данные содержатся в таблицах с именами ‘_airbyte_raw_*’. В таких таблицах имеется всего 3 поля — ‘_airbyte_ab_id’, ‘_airbyte_data’ и ‘_airbyte_emmited_at’. Столбец ‘_airbyte_data’ имеет тип jsonb.<br \/>\nПример для ‘_airbyte_raw_ads_insights’:<\/p>\n<p><img src=\"http:\/\/test.leftjoin.ru\/pictures\/14-4.png\" border=\"0\" width=\"100%\" height=\"100%\"><\/a><\/p>\n<p>В процессе нормализации каждое поле из json выносится в отдельную колонку. Пример: часть списка колонок из таблицы ‘ads_insignts’:<\/p>\n<p><img src=\"http:\/\/test.leftjoin.ru\/pictures\/15-3.png\" border=\"0\" width=\"50%\" height=\"50%\"><\/a><\/p>\n<p>После получения основной нормализованной таблицы для каждого stream создаются различные breakdowns, например, для тех же ‘ads_insights’:<\/p>\n<p><img src=\"http:\/\/test.leftjoin.ru\/pictures\/16-3.png\" border=\"0\" width=\"50%\" height=\"50%\"><\/a><\/p>\n",
            "date_published": "2022-05-12T16:04:39+03:00",
            "date_modified": "2022-05-13T12:58:06+03:00",
            "image": "http:\/\/test.leftjoin.ru\/pictures\/1-31.png",
            "_date_published_rfc2822": "Thu, 12 May 2022 16:04:39 +0300",
            "_rss_guid_is_permalink": "false",
            "_rss_guid": "133",
            "_e2_data": {
                "is_favourite": false,
                "links_required": [],
                "og_images": [
                    "http:\/\/test.leftjoin.ru\/pictures\/1-31.png",
                    "http:\/\/test.leftjoin.ru\/pictures\/2-30.png",
                    "http:\/\/test.leftjoin.ru\/pictures\/3-26.png",
                    "http:\/\/test.leftjoin.ru\/pictures\/4-17.png",
                    "http:\/\/test.leftjoin.ru\/pictures\/5-16.png",
                    "http:\/\/test.leftjoin.ru\/pictures\/5.5.png",
                    "http:\/\/test.leftjoin.ru\/pictures\/6-16.png",
                    "http:\/\/test.leftjoin.ru\/pictures\/7-10.png",
                    "http:\/\/test.leftjoin.ru\/pictures\/8-11.png",
                    "http:\/\/test.leftjoin.ru\/pictures\/9-10.png",
                    "http:\/\/test.leftjoin.ru\/pictures\/10-9.png",
                    "http:\/\/test.leftjoin.ru\/pictures\/11-8.png",
                    "http:\/\/test.leftjoin.ru\/pictures\/12-6.png",
                    "http:\/\/test.leftjoin.ru\/pictures\/13-6.png",
                    "http:\/\/test.leftjoin.ru\/pictures\/14-4.png",
                    "http:\/\/test.leftjoin.ru\/pictures\/15-3.png",
                    "http:\/\/test.leftjoin.ru\/pictures\/16-3.png"
                ]
            }
        }
    ],
    "_e2_version": 3365,
    "_e2_ua_string": "E2 (v3365; Aegea)"
}