Как загрузить данные из любого API в Google Sheets (data stream)
Всем привет! Я Лаптев Алексей, основатель и главный разработчик группы сервисов в datamonster.
Зачем это надо
В первую для задач аналитики, когда готовых сервисов нет или по каким-то причинам их использование невозможно.
- Выгрузка статистики в Google Sheets из Яндекс Метрики, Google Analytics
- Выгрузка статистики в Google Sheets из рекламных кабинетов Яндекс Директ, ВКонтакте
- Выгрузка статистики в Google Sheets из маркетплейсов Ozon, Wildberries
- Выгрузка данных из сервисов с которыми нет коннекторов, но где есть API
Ввиду проблем с работой сервисов западных партнеров, мы в apimonster сделали свой вариант.
Как работает
- Создаем запрос к api по аналогии с работой в postman. Обычно нужно указать url, токен и параметры запроса.
- Форматируем полученные данные в нужный табличный вид
- Подключаем Google Sheets, указываем рабочий лист
- Настраиваем выгрузку — на основании какого запроса в api по какому расписанию в какой лист Google Sheets заливать данные.
Все, ничего сложного, но если сложности возникли, есть настройка под ключ.
Пример — выгрузка статистики из Яндекс Директ
Создаем запрос к api по аналогии с работой в postman
Форматируем полученные данные в нужный табличный вид
Настраиваем выгрузку — на основании какого запроса в api по какому расписанию в какой лист Google Sheets заливать данные
Готово, каждый день данные из api будут добавляться в Google Sheets
Сам сервис здесь, помощь с настройкой здесь.
Сервис в бете, возможны шероховатости.
16 показов
8K открытий
10 комментариев
Написать комментарий.
Ну вы, конечно, обнаглевшие ребята. Я к вам пришел с этой идеей, предложил партнерство, вы её реализовали, закрыли чат и даже спасибо не сказали.
Развернуть ветку
Тут стоить уточнить, что ваша роль которую вы видели в реализации довольно очевидной идеи — статья на VC.
Мы же нагло реализовали все, в том числе для вас.
Развернуть ветку
вот козлы. Сочувствую. И непонятно, как делиться идеей, чтобы ее, может, и использовали бы, но хотя бы сказали «спасибо»
Развернуть ветку
Алексей, скажите пожалуйста, хочу реализовать передачу данных из сервиса Wapico(WhatsApp рассылки), в Google sheets через API, вопрос в том что мне нужны данные только определённого типа, например «только те клиенты что ответили на сообщение» так как полностью все данные выгружать это 1000+ отправленных сообщений в день, это не очень целесообразно, можете ли вы на базе своего сервиса мне. этим помочь, естественно в рамках договора?
Развернуть ветку
Там вебхуков нет, но на базе ваззап24 в целом реализуемо.
Развернуть ветку
Я прошу прощения, так как я человек практически ничего не понимающий в разработке, коде и тд, «там» это на базе сервиса wapico? они утверждают что есть, а если «там» это в Google sheets, то у меня ломается мозг, зачем в таблицах вебхук
Автоматизация Яндекс.Директ. Передача данных из Директа в Google Таблицы
Совместно с коллегами из ADF Media — Артемом Дурневым и Султаном Назаралиевым, мы решили выпустить цикл из 6 статей, посвященных автоматизации процессов в Яндекс Директе. Мы уже успели ознакомиться с теоретической частью автоматизации процессов в первой части материала. Сегодня мы поговорим про то, как передать базисные значения из Яндекс.Директа в Google Таблицы.
Немного теории, которая нам так нужна.
API, JSON, POST-запросы
Как нам уже известно из предыдущего материала API — это способ взаимодействия с каким либо сервисом/программой/приложением.
В Яндекс.Директе вы можете «запросить» отчет с необходимыми параметрами и показателями через интерфейс «Мастера отчетов».
Такой отчет можно запросить у Яндекса из любого места, позволяющего послать POST-запрос. Хоть с умного холодильника; )
Запрос представляет собой «специальный формат обращения» на сервер Яндекса.
< "method": "get", "params": < "SelectionCriteria": < "DateFrom": "2020-02-20", "DateTo": "2020-03-20" >, «FieldNames»: [«Clicks», «Cost», «Conversions»], «ReportType»: «CUSTOM_REPORT», «DateRangeType»: «CUSTOM_DATE», «IncludeVAT»: «YES», «ReportName»: «Report1», «Format»: «TSV», «IncludeDiscount»: «NO» > >;
Мы отправляем Яндексу специально сформированный запрос, в ответ получаем такой же специально сформированный ответ.
Для этого мы будем использовать сервисы Google.
Google Apps Script
У Гугла есть такая вещь как Google Apps Script. Это скриптовый язык, основан на JavaScript. Данный скрипт работает на таких сервисах как:
- Google Docs
- Google Sheets
- Google Slides
- Google Forms
Собственно это и есть среда, в которой мы будем отправлять запросы в Яндекс и получать ответы от него. Почему именно Google Apps Script? Потому что с помощью него мы также сможем работать с Google Таблицами. А еще он бесплатный; )
Т.е. что получается в итоге: мы через Google Apps Script можем отправить запрос на получения отчета в Яндекс, получить ответ с отчётом от Яндекса, а дальше отобразить отчет от Яндекса в Гугл Таблицу так же посредствам API.
На этом завершаем теорию для этой части материала. Приступим к практике. В этой части материала мы обещали, что никакого знания программирования вам не понадобится. А не понадобится, потому что мы все сделали за вас.
Передаем запросы из Я.Директа в Google Таблицу
1. Копируем Google Таблицу
Скопируйте специальную Google Таблицу. В ней уже есть формула для получения данных.
Давайте пройдемся по представленным значениям, с ними можно поиграться:
Date from — указываем дату, с которой нам нужна статистика.
Date to — указываем дату, по какую нам нужна статистика.
Goals — id целей Яндекс Метрики, по которым требуется получить статистику. Необязательное поле. Если вы запрашиваете конверсии и не указываете id целей — в столбце конверсии будут значения по всем целям, которые есть в Яндекс.Метрике. Можно указать несколько id через точку с запятой внутри кавычек.
Attribution — модели атрибуции, используемые при расчете данных по целям Яндекс Метрики. Необязательное поле.
- FC — первый переход
- LC — последний переход
- LSC — последний значимый переход
- LYDC — последний переход из Яндекс.Директа
Значение по умолчанию — LYDC.
Можно указать несколько моделей через точку с запятой внутри кавычек.
Fields — значения, которые будут выгружаться по клику:
- CampaignName — название кампании
- Clicks — количество кликов
- Cost — потраченная сумма
- Conversions — количество конверсий
2. Получаем и копируем токен Яндекс.Директ
В первой части материала мы рассказывали, как получить токен. Если токен нужен срочно, а времени на создание приложения нет, переходим на нашу платформу и авторизовываемся.
3. Вставляем токен в поле OAuth Token Google Таблицы и вызываем формулу
Чтобы вызвать формулу, нажимаем на ячейку С1.
После вызова формулы, мы получаем наши значения:
Как это работает
Формула получения отчёта называется YandexDirectReport.
YandexDirectReport( «eh3eldlxoL4iMnoRcAhkGa»; «anilange-ss»; «2019-05-24»; «2019-05-24»; «CampaignName;Clicks;Cost»; «YES»; «100030005;100030006»; «LYDC;LC»)
Таким образом, используя данную Таблицу, мы можем легко вытаскивать значения из Я.Директа. Единственное ограничение на данный момент — получаемые данные ограничены кодом, который прописан в Google Apps Script.
В следующей статье мы напишем с вами скрипт на языке R, чтобы получить данные из Яндекс.Директа и передать в Excel. Этот скрипт в дальнейшем вы самостоятельно сможете дополнять и изменять по вашему усмотрению!
Благодарим за прочтение!
17 показов
9.4K открытий
10 комментариев
Написать комментарий.
Я тоже пока не совсем понял каких целей вы достигаете таким способом, но продолжайте — подобная автоматизация интересна.
Развернуть ветку
Спасибо за хорошую статью! Не совсем, правда, пока ясно, для чего нужна эта выгрузка. Вы дальше её как-то используете для сквозной аналитики?
Развернуть ветку
К примеру, вам нужно еженедельно или ежедневно делать отчеты для клиентов. И каждый день заходить в Яндекс Директ, строить один и тот же отчет это муторно. Это занимает 10-15 мин времени в день. С помощью данного метода автоматизации вы можете реализовать отчеты за 2-3 минуты. Это сильно упрощает процесс.
Второе, сквозная аналитика, если у вашего клиента или у вас данные о лидах, продажах хранятся в Google Analytics или в Google Таблицах, вы очень просто создать сквозную аналитику, перетягивая в текущую, либо в другую таблицу данные (формула =IMPORTRANGE), после остается связать данные с 2 таблиц.
Развернуть ветку
Спасибо за статью. Подскажите, через такую функцию можно вытягивать остатки по агентскому кабинету?
И другой вопрос, можно ли сделать формулу, которая будет вытягивать статистику каждый день\через день и заполнять в разных строках?
Развернуть ветку
Почему-то не срабатывает механика, пустые поля(
Развернуть ветку
Залип жутко. Проблема с простыми параметрами — Keyword например. Пишет не совместим с типом отчета кастом. дальше как? нужно менять АппСкрипт или я валенок?
Развернуть ветку
В API Яндекс Директ нет такого параметра Keyword. Вам необходимо указать параметр Criterion.
Развернуть ветку
А как выгрузить баланс рекламного аккаунта?
Развернуть ветку
Спасибо за статью.
Хочу использовать для передачи параметров в Гугл дата студио
Развернуть ветку
Ошибка
Exceeded maximum execution time (строка 0).
как вылечить не подскажете?
Что нам стоит автоматизацию построить. Использование HTTP API в Google Sheets
В эпоху повальной автоматизации пользователям хочется «нажать на кнопку и получить ответ». Ну или дополнительно немного подвигать мышкой. Автоматизация же отчетов и других штук, которые удобно представить в виде таблички, часто строится в Excel с использованием своих макросов или же просто встроенных формул. Плагинами к Excel нынче никого уже не удивишь, кстати, у нас такой тоже есть, но это предмет отдельной статьи. А как насчет Google Sheets? Ранее мой коллега рассказывал, как можно прикрутить наше API к Telegram, я же попробую рассказать, как использовать его в гуглотаблицах.

Под катом чуть-чуть кода и много костылей.
Работать мы будем, очевидно, в браузере. Для написания своих функций будем использовать Google Apps Script, который по синтаксису подозрительно похож на урезанный javascript. Исходим из принципа, что кодить мы не умеем, а читать документацию не хотим, зато активно используем подходы, изложенные в технике Stackoverflow Driven Development.
Если вы начинающий трейер, то предлагаем вам почитать тут.
Подготовка
Для начала получаем доступ к API. Бесплатно (если только аккаунт-менеджеры не замучают звонками) и без смс, но с регистрацией. Документацию читать не будем (все равно там картинок нет), а токен для доступа мы сгенерируем руками через jwt.io. Почему руками? Потому что токен, генерируемый нашим сайтом, истекает через час. Это полезно, например, для использования на вебсайте, но для нормальной работы в Sheets мы хотим, чтобы он жил дольше, допустим, год. Подробнее о процедуре создания токена можно почитать здесь.
Работа с API
Теперь создаем пустую таблицу и идем в редактор скриптов; если кто не знает, попасть туда можно путем вызова Tools → Script editor. В редакторе объявим несколько глобальных переменных:
var BASE_URL_API = "/md/1.0"; var BASE_URL_HOST = "https://api-demo.exante.eu"; var BASE_URL = BASE_URL_HOST + BASE_URL_API; var TOKEN = "your-token-from-jwt-io";
Также зададим функции для работы с запросами:
function _payload() < return < "method": "get", "headers": < "Authorization": "Bearer " + TOKEN >>; > function _parse(url)
Подробнее про UrlFetchApp и его аргументы можно почитать здесь. Дополнительно мы вылавливаем коды, отличные от 200, и показываем пользователю «человекочитаемую» ошибку из запроса.
Статическая информация из API
Сейчас попробуем прикрутить несколько вызовов нашего API. Здесь все-таки пришлось открыть документацию и убедиться, что красивых картинок там действительно нет.
Для начала напишем метод, реализующий запрос финансовых инструментов. Как мне подсказывают, для экономии трафика информацию об инструментах разделили в два конца — /symbols/:symbolId и /symbols/:symbolId/specification :
var SYMBOL_SPEC_FIELDS = ["leverage", "lotSize", "contractMultiplier", "priceUnit", "units"]; function EXANTESYMBOL(symbol, field) < var url = BASE_URL + "/symbols/" + encodeURIComponent(symbol); if (field in SYMBOL_SPEC_FIELDS) url += "/specification"; return _parse(url)[field]; >
Здесь и далее имя финансового инструмента ( symbol ) должно кодироваться, хотя бы потому что может содержать странные символы, например, / .
Затем создадим аналогичные методы для работы с опционами и фьючерсами.
function EXANTEGROUP(group, field) < var url = BASE_URL + "/groups/" + group; return _parse(url)[field]; >function EXANTEGROUPNEAREST(group, field) < var url = BASE_URL + "/groups/" + group + "/nearest"; return _parse(url)[field]; >
Котировки и «свечки»
Свечки — это такой специальный индикатор на финансовых графиках. Для понимания того, что мы делаем, достаточно знать, что одна «свечка» представлена четырьмя значениями — [цена_на_начало_интервала, максимальная_цена_в_интервал, минимальная_цена_в_интервал, цена_на_конец_интервала] . Интервал у нас задается в секундах, в общем виде функция будет выглядеть так:
function EXANTEOHLC(symbol, duration, what) < var url = BASE_URL + "/ohlc/" + encodeURIComponent(symbol) + "/" + duration + "?size=1"; return _parse(url)[0][what]; >
Тогда запрос наподобие EXANTEOHLC(«EUR/USD.E.FX», 60, «high») вернет нам максимальную цену за последнюю минуту.
С котировками чуть сложнее. На момент написания статьи единственное API для получения котировок — это стрим, который неудобно использовать в Apps Script. (Кстати, обещают добавить новое API для единичной котировки в будущих релизах). Поэтому пришлось накостылить решение из имеющихся средств. По построению, close незакрытой свечки (то есть за текущие минуту/час/день) — это среднее между последними пришедшими ценами покупки и продажи, поэтому:
function EXANTEMID(symbol)
Для полного счастья можно еще сделать функцию конвертации из одной валюты в другую:
function EXANTECROSSRATES(from, to) < var url = BASE_URL + "/crossrates/" + from + "/" + to; return _parse(url)["rate"]; >
Использование
Теперь мы попробуем использовать наши функции как обычные методы в Excel. Первая же проблема, с которой мы столкнемся — это обновление значений. Дело в том, что Google считает, что нет нужды часто пересчитывать пользовательскую функцию, если параметры не изменились. В случае котировок, которые предполагаются как «live», это немного критично. Для обхода данной проблемы добавим еще один «изменчивый» (а на самом деле нет), но не используемый аргумент в наши функции EXANTEOHLC , EXANTECROSSRATES и EXANTEMID и назовем его timestamp :
function EXANTECROSSRATES(from, to, timestamp) < var url = BASE_URL + "/crossrates/" + from + "/" + to; return _parse(url)["rate"]; >function EXANTEOHLC(symbol, duration, what, timestamp) < var url = BASE_URL + "/ohlc/" + encodeURIComponent(symbol) + "/" + duration + "?size=1"; return _parse(url)[0][what]; >function EXANTEMID(symbol, timestamp)
Теперь реализуем функцию, которая будет генерировать этот timestamp .
function EXANTEUPDATE()
Обратите внимание, что мы нагло приватизировали ячейку A1 , а заодно и потребовали дополнительных прав на модификацию листа. Для повышения безопасности гугл рекомендует вставить @OnlyCurrentDoc , чтобы скрипт не просил права сразу на все документы:
/** * @OnlyCurrentDoc */
Кстати, на первый взгляд, можно было бы просто использовать функцию NOW() (она одна из немногих умеет пересчитываться раз в минуту, при наличии специальной галочки в настройках Юзабилити), но ее значение нельзя передать в пользовательскую функцию, печаль.
Для автоматического обновления данных раз в минуту можно создать триггер для написанной функции в Edit → Current project’s triggers:

Для полного пользовательского счастья дополнительно можно добавить кнопку (делается в нашей табличке через Insert → Drawing. ) и связать ее с функцией EXANTEUPDATE .
О, кажется, теперь с этим можно работать. Давайте попробуем взять ближайший фьючерсный контракт на FORTS:Si (который USD/RUB) и посмотреть на его свечки:

Но мы же говорим об автоматизации, почему бы нам не сделать такую табличку для 100 инструментов сразу? Ой.

Но методы обхода этой проблемы я предлагаю найти читателю самостоятельно 🙂 Вероятно, не лучшее, но вполне рабочее решение для однотипных запросов, где мы забираем из JSON только одно поле (например, EXANTEOHLC ) — использовать кэш в глобальных переменных. Более правильное решение — в одном запросе (например, для свечек) посылать списки из нескольких финансовых инструментов, разделенных запятой.
Документация
Опциональный пункт, который я упустил в ходе повествования. Можно оформить комментарии к функциям в соответствие с JSDoc и дополнительно добавить @customfunction , например:
/** * mid (average between bid and ask) value * @param symbol * symbol ID * @param [timestamp] * dummy parameter for update feature * @returns mid value for specified symbol * @customfunction */
В таком случае пользователь увидит красивую справочку о том, как правильно использовать данную функцию, какие аргументы она требует и что возвращает. Следует отметить, что парсит гугл докстринг по своему усмотрению, но в целом очень похоже на JSDoc.
На этом все. Кажется, теперь можно пользоваться и опубликовать. Только токен вырежьте 🙂 Исходный код этого «скрипта» можно найти на гитхабе под MIT лицензией.
- google apps script
- google sheets
- финансы для всех
Как подключить chatGPT к Google таблице
Сегодня хочу поделиться с вами крутой новостью. Теперь можно использовать chatGPT через API, что значит, что вы можете использовать его в Google таблицах!
Раньше вы уже могли использовать GPT-3, и я уже рассказывал, как быстро и легко можно решить свои задачи с его помощью. Вот и вот мои посты про GPT-3 в таблицах. Но chatGPT еще более «умный» и справляется со сложными задачами еще лучше.
Если вы хотите использовать chatGPT в Google spreadsheets, вот моя ссылка на скрипт, который поможет вам создать формулу для использования API chatGPT в таблицах.
Чтобы добавить свою формулу в Google spreadsheets, нужно использовать Apps script:
- Откройте Google spreadsheets и создайте новый документ или откройте уже существующий
- Нажмите на кнопку «Расширения» в верхней панели и выберите «Apps script»
- Вставьте код , который найдете по ссылке
- В первой строке кода вместо Ваш API key вставьте ваш ключ. Получить его можно в вашем аккаунте Open AI перейдя по ссылке
- Нажимаем сохранить. Теперь можем использовать chatGPT в своей таблице.
Подробнее про параметры, которые используются в формуле можно почитать в документации к chatGPT API.
Хотелось бы отметить разницу между chatGPT и GPT-3
В простых задачах по типу перевода текста разница почти незаметна. Вот пример:
Но в более сложных, когда просишь сгенерировать текст с каким-то текстам разница сразу видна. Вот пример:
Я попросил написать отзыв о пособии от лица учителя математики и GPT-3 просто проигнорировала этот контекст. ChatGPT лучше подходит для сложных запросов, которые требуют большего контекста.
А еще небольшой лайфхак
Через песочницу chatGPT работает намного быстрее и стабильнее, но так лимиты расходуются лимиты При создании аккаунта open AI вам дается $18 бесплатно. Один запрос на генерацию небольшого текста через API обычно стоит 0,5-0,8 цента.
Спасибо за прочтение! Буду благодарен за подписку на мой ТГ-канал. В нем я делюсь кейсами использования chatGPT, SEO-кейсами и аналитикой, которые меня заинтересовали.
9.2K показов
10K открытий
45 комментариев
Написать комментарий.
Интересно, сколько еще продлится этот хайп с GPT?) И какой % от его восхвалителей продолжит им реально пользоваться на практике?)
Развернуть ветку
это не хайп, это новый инструмент и он с нами надолго
Развернуть ветку
Мне кажется все так или иначе будет пользоваться. Работу за тебя он конечно не сделает, но удобно же небольшие задачи на него делегировать)
Развернуть ветку
Он только и работает на хайпе. Текст выдаёт с уникальностью в 30-45% по text ru. Он конечно пишет лучше чем пользователи Advego но текст только в мусор можно отправлять
Развернуть ветку
Я пользуюсь им по учебе и работе ежедневно.
Все кто утверждает про рекламу и хайп, просто не нашли ему применение.
Развернуть ветку
Напишу несколько сценариев использования:
1) Изучение на базовом уровне ЯП. Хорошо, кодит базовые программы без явных ошибок (грубых);
2) Составляет задания и тесты на выбранную тему (удобно придумывать себе задачу);
3) Умеет рерайтить и переводить;
4) Неплох в качестве собеседника;
5) Найдет ошибку, даже в собственном коде)
Если отключить мозг и не модерировать — то конечно будет много ошибок (логических и иных). Но его уровень уже достаточный для самообучения и этим возможно активно пользоваться.
Развернуть ветку
Аккаунт удален
Развернуть ветку
Развернуть ветку
Пока мешки с костями ходят на планете земля)
Развернуть ветку
хайп уже давно закончился, теперь просто делятся информацией и показывают как с ним можно работать
Развернуть ветку
Для кого-то это игрушка и хайп, я же стал писать код с его помощью. Экономит время в десятки раз.
Развернуть ветку
Аккаунт удален
Развернуть ветку
спасибо за инструкцию)
Развернуть ветку
Аккаунт удален
Развернуть ветку
Привет и спасибо за статью) Было бы классно почитать о практических примерах применения Chat GPT в таблицах. Чтобы прям точно понимать, чем эта штуковина может помочь на регулярной основе)
Развернуть ветку
Очень удобно генерировать отзывы и описания ля интернет магазинов например. Выгружаешь название товаров, а дальше формулой массово генерируешь контент.
Мини инструкция, как с помощью GPT можно написать отзывы для сайта
✅Можно массово сгенерировать отзывы с помощью GPT-3 и Google таблиц.
1Выгружаем описание товара и услуги с сайта в Google таблицу.
2Подключаем расширение для Google таблиц. Нужен ключ с сайта OpenAI. Как его по.
Мини инструкция, как с помощью GPT можно написать отзывы для сайта
✅Можно массово сгенерировать отзывы с помощью GPT-3 и Google таблиц.
1Выгружаем описание товара и услуги с сайта в Google таблицу.
2Подключаем расширение для Google таблиц. Нужен ключ с сайта OpenAI. Как его получить и настроить расширение для работы написано тут.
3Далее добавляем в таблицу задание, составляем формулу для генерации отзыва и растягиваем формулу и получаем готовые отзывы Вот мой пример . В нем еще добавлен столбец, куда копирует результат от GPT-3 и он немного правится руками.
✅Если нужны более грамотные, но штучные отзывы можно воспользоваться chatGPT
Про то, как chatGPT может писать JS код я рассказывал тут. А сегодня хочу показать кейс с отзывами:
Просто просим написать отзыв, а в качестве контекста можно добавить описание товара, вот пример.
Можно попросить добавить каких-то деталей, например, я попросил написать отзыв от лица учителя
А вот еще прошу отзыв написать проще. И таким образом можно точно подготовить нужные вам отзывы.
Оба способа требуют аккаунт OpenAI. Телефон для его регистрации можно купить в различных сервисах. Например, я купил в sms-reg.com.