Что вы можете делать с бессерверными приложениями, управляемыми событиями? Потоковые данные — это один из вариантов. Вам не нужно быть аналитиком данных, чтобы делать действительно забавные вещи. Мы покажем вам, как транслировать твиты в режиме реального времени с помощью Twitter NPM бесплатно с помощью визуального бессерверного приложения, управляемого событиями.

Мы отправим данные в MongoDB, чтобы проверить их диаграммы MongoDB. Мы, вероятно, максимально исчерпаем свободный лимит МБ в нашем кластере M0 MongoDB через день или два, будет интересно представить, что мы получим.

Чтобы выполнить шаги, мы покажем вам, как быстро создать бесплатное приложение Lolo, которое транслирует события Twitter на основе критериев (например, с использованием дескриптора Twitter Илона Маска), а затем отправляет данные для дальнейшей настройки полезной нагрузки, добавления настроения. анализа (это, вероятно, далеко), буферизовать события каждую секунду, а затем отправить их в MongoDB Atlas, где мы можем использовать диаграммы для визуализации. Настройка займет около 20 минут, включая получение ваших токенов Twitter и учетных данных MongoDB.

Что здесь круто, так это то, что вам не нужно беспокоиться о затратах в Лоло, поскольку вы контролируете реплики, добавленные в приложение. Для этого нам также не нужно добавлять какие-либо реплики, мы можем использовать один из бесплатных LCU уровня. 1 LCU бесплатного уровня содержит 0,125 ядра и 256 МБ памяти, чего должно хватить для этого.

Будет интересно посмотреть, сколько людей выражают себя в пользу Илона Маска прямо сейчас каждую секунду, каждую минуту. Мы также можем увидеть, откуда они, твит, анализ тональности твита, когда была создана их учетная запись, сколько у них подписчиков и проверены они или нет.

Установив это, мы были очень удивлены тем, сколько бесполезных твитов с его упоминанием получает этот парень, большинство из них не проверены. Посмотрите результаты, которые мы получили на этой общедоступной информационной панели MongoDB здесь.

Пс. Будьте осторожны, так как это еще не все, если вы хотите получить чистые данные. Мы не дата-инженеры, мы просто показываем вам возможности. Это строго для развлечения.

Учетные данные Твиттера

Перейдите на портал разработчиков Twitter. Создайте проект и перейдите в раздел Продукты. Найдите Twitter API v2 и нажмите на него. Здесь нужно подать заявку на повышенный доступ. Вы регистрируетесь для тестирования.

Это будет быстрый процесс после того, как вы подали заявку. Вы должны увидеть ответ в течение минуты или около того.

Вернитесь к своему проекту, а затем перейдите к проекту, который вы, надеюсь, настроили с самого начала, а затем найдите приложение, которое вы создали под ним, чтобы найти свои ключи и токены.

Мы уже захватили свои здесь, и мы сможем восстановить их снова, если это будет необходимо.

Здесь нам нужны четыре строки, ключ API и секрет, а также токен доступа и секрет. Сохраните их где-нибудь, чтобы вы могли быстро получить их через некоторое время.

Создайте приложение Лоло

Давайте начнем прямо сейчас, чтобы мы могли проверить, работает ли это. Создайте новое приложение в Лоло. Если у вас нет учетной записи, вы можете быстро зарегистрироваться здесь.

Вы можете называть это как хотите. Я назвал его Трансляция упоминаний событий в Твиттере.

Мы предоставим вам возможность скопировать весь наш рабочий процесс и сразу же вставить его в ваше приложение. Для этого скопируйте содержимое этого документа и нажмите на график в Лоло и Command + V (вставить). Да, он волшебным образом настроит для вас все узлы.

Но помните, чтобы это работало, вам нужно добавить переменные env, такие как ваши учетные данные Twitter и URI MongoDB, имя базы данных и коллекции. Кроме того, вам нужно добавить несколько зависимостей в настройки вашего приложения (twit, mongodb и анализ настроений). Мы покажем вам, как это сделать ниже, поэтому следуйте инструкциям по созданию с нуля.

Создайте триггер Twitter

Как только вы увидите перед собой пустой график, вам нужно добавить необработанную новую функцию в правом нижнем углу вашего графика.

Дважды щелкните по нему, чтобы настроить его. Вы можете переименовать его в Twitter Event или как хотите. Вы можете решить, что вы хотите отслеживать здесь, это не обязательно должен быть дескриптор Илона Маска. См. документацию по потоковому API Twitter здесь.

Перейдите к его обработчику, чтобы настроить код NodeJS. Вы можете удалить весь код по умолчанию, а затем вставить блок кода, который вы видите ниже.

Здесь мы извлекаем log и productEvent из контекста (ctx). Вы можете видеть контекст как собственный язык Лоло.

Мы также используем то, что называется export.handler и export.setup, это метод жизненного цикла, который помогает нам запускать код, когда происходит событие или когда приложение запускается. Вы можете получить доступ к контексту (ctx) в методах жизненного цикла, хотя то, что вы можете извлечь, отличается. Остальной код, который вы видите здесь, представляет собой обычный JavaScript, который должен быть вам знаком.

В этом коде нам нужно настроить productEvent в файле export.setup, так как он должен срабатывать при запуске приложения. Каждый раз, когда Twitter отправляет нам событие, мы создаем событие Lolo с данными твита. Если событие отлично от null, мы перенаправляем его на следующий узел.

Вы также можете удалить входной порт для этого узла, так как он создает событие и никогда не передает в него данные.

Как вы видели в коде, Twitter нужны наши учетные данные, которые мы получили ранее, здесь мы извлекаем их из приложения, поэтому нам нужно установить их в настройках приложения.

Установить переменные окружения

Чтобы установить переменные env в Lolo, перейдите в Настройки вашего приложения. Затем перейдите к Переменные. Здесь вы можете добавить эти четыре строки, которые мы получили из Twitter, с точными именами переменных.

У нас также есть еще одна вещь, прежде чем мы сможем попробовать это. Нам нужно настроить зависимость Twit NPM.

Добавление зависимостей в Lolo

Чтобы добавить пакет NPM, просто перейдите к модулям в настройках приложения. здесь вы можете добавить столько зависимостей, сколько захотите. Сюда нужно добавить Twit package.

Вам не нужно сохранять зависимость после ее добавления. Приложение установит их для вас, когда вы сохраните и запустите свое приложение позже.

Проверьте это

Если вы скопировали наш рабочий процесс, пропустите эту часть. Мы просто проверяем, правильно ли работают события в Твиттере.

Создайте новую функцию в правом нижнем углу еще раз. Вы можете оставить там код по умолчанию, но подключите выходной порт из триггера Twitter к новой функции. Я также переименовал его в Test.

Сохраните и запустите приложение.

Здесь мы делаем так, чтобы объект события, созданный для каждого твита, направлялся на узел Test. Код по умолчанию в узле Test записывает весь объект события в журналы для нас. Это все, что нам нужно для проверки.

Теперь, чтобы убедиться, что это работает правильно, нам нужно перейти к Журналам в приложении. Это займет около минуты, прежде чем он будет развернут. Это небольшая задержка при добавлении зависимостей, но это будет исправлено на будущее.

На изображении ниже мы ускоряем время развертывания, но не беспокойтесь, если это займет больше времени.

Видите журналы, которые регистрируются для каждого события в Твиттере с упоминанием Илона Маска? Круто, да? Мы можем остановить его, как только увидим, что он работает.

Добавить анализ настроений

Это своего рода выстрел в темноте, поскольку этот пакет анализа настроений, вероятно, не будет слишком точным. Но давайте попробуем.

Чтобы добавить еще один модуль NPM, просто добавьте анализ настроений в разделе Модули, как вы сделали с twit. Теперь мы можем создать новую функцию и вставить приведенный ниже код в ее обработчик.

Этот код захватывает объект события, а затем получает анализ тональности текста твита. После этого он добавляет его в качестве атрибута к объекту события, а затем перенаправляет на следующий узел. Мы сможем получить данные твитов, а также настроения в следующем узле.

Также переименуйте его, я установил его как Анализ настроений. Вернитесь к своему графику и соедините исходящий порт Триггер события Twitter с новым входным узлом Анализ настроений. порт.

Нам еще нужно решить, что нам нужно от твита в следующем узле, поэтому давайте подчистим данные там.

Обрезать объект события

На данный момент объект события содержит много данных, поэтому нам нужно его обрезать. Отправка его как есть просто займет лишнее место в нашем кластере MongoDB.

Создайте новую функцию и добавьте блок кода ниже в ее обработчик.

Что делает этот код, так это настраивает новый объект с данными о событии, которые мы получаем от предыдущего узла. Затем он отправляет новый объект на следующий узел с помощью метода route().

Вы сами выбираете данные, которые хотите отправить в MongoDB, это всего лишь пример. Местоположение пользователя может быть не самым точным, поскольку пользователь устанавливает его самостоятельно. Возможно, вы сможете использовать другой пакет NPM для обнаружения и классификации различных местоположений, но мы не делаем этого здесь.

Вы можете переименовать новую функцию, я переименовал ее в Trim Event Object. Вернувшись на график, вы можете подключить порт вывода из функции Анализ настроений к этому новому объекту Trim Event Object функция.

Как только вы закончите здесь, мы можем создать буфер, используя библиотечную функцию, которую нам предоставляет Lolo.

Буферизировать события каждую секунду

Lolo предоставляет нам несколько библиотечных функций, к которым вы можете получить доступ слева от графика, щелкнув значок +.

Вы можете прокрутить, чтобы увидеть, что там находится, но мы ищем здесь lolo/Buffer. Вы можете найти его, а затем щелкнуть по нему, чтобы добавить его в свое приложение.

Мы настроим функцию lolo/Buffer на максимальное количество событий 50, а затем таймаут 1000 (1 секунда).

Что это будет делать, так это собирать события и направлять их дальше только после того, как они будут объединены в пакеты до 50 событий или пройдет 1 секунда.

Настройте свой кластер MongoDB

Перейдите на cloud.mongodb.com и создайте новый кластер (зарегистрируйтесь, если у вас еще нет учетной записи).

Если у вас уже есть кластер, который вы хотите использовать, пропустите эту часть. Вы можете использовать кластер, который вы уже используете. Установите его как общий, если вы хотите бесплатный вариант.

MongoDB запросит имя пользователя и пароль для пользователя вашей базы данных. Эти учетные данные понадобятся вам позже для подключения к вашей базе данных, поэтому заполните их сразу.

Вы будете подключаться из своей "локальной среды", а не из облачной среды. Здесь вы можете внести в белый список все IP-адреса, установив 0.0.0.0/0 в качестве IP-адреса. Если вы хотите установить его для своей среды выполнения, ознакомьтесь с нашей документацией в разделе Безопасность, а затем посмотрите в разделе Белый список.

Когда вы закончите настройку своего кластера, нажмите на свой кластер. Оказавшись там, перейдите к кнопке Подключить и нажмите Подключить приложение.

Здесь вы найдете свой URI, вам нужно будет ввести имя пользователя и пароль, которые вы установили ранее, а затем скопировать всю строку подключения в безопасное место. Мы будем использовать его в ближайшее время.

Также настройте базу данных и коллекцию в разделе Коллекции. Мы также установим их в переменных приложения Lolo.

Добавьте переменные окружения MongoDB и пакет NPM

Теперь добавьте URI MongoDB, базу данных и коллекцию в качестве переменных в настройках вашего приложения. Точно так же, как вы сделали с учетными данными Twitter. Пожалуйста, используйте точную формулировку для ваших переменных, как показано на рисунке ниже.

Также перейдите к своим модулям и добавьте mongodb. Теперь у вас должны быть добавлены twit, анализ настроений и mongodb. Посмотрите, как это выглядит ниже.

Когда вы закончите, мы можем теперь сделать последнюю часть этого, подключиться к MongoDB.

Отправить данные в MongoDB

Снова добавьте новую функцию в правом нижнем углу графика и назовите ее Connect to MongoDB. Вставьте приведенный ниже блок кода в его обработчик.

Здесь мы пытаемся подключиться к MongoDB. В случае неудачи мы регистрируем ошибку в консоли журналов, а в случае успеха мы перенаправляем клиента на следующий узел, устанавливая его в объект события. Мы сможем использовать клиент в следующем узле.

Вернитесь к своему графику. Нам нужна еще одна последняя новая функция.

Итак, создайте еще одну функцию с именем InsertMany и вставьте приведенный ниже блок кода в ее обработчик.

Вы можете удалить порт вывода этого последнего узла, так как он нам не нужен. Теперь вам нужно подключить два новых узла к вашему рабочему процессу.

Когда вы закончите, вы можете сохранить и запустить свое приложение.

Пожалуйста, подождите одну минуту, прежде чем вы увидите, что что-то записано в журналы. Это может занять много времени для развертывания с добавленными зависимостями.

Графики MongoDB

Чтобы визуализировать свои данные, вы можете перейти к диаграммам MongoDB и добавить новую панель инструментов, а затем добавить новую диаграмму. Выберите источник данных (например, имя коллекции). Поэкспериментируйте с тем, как вы хотите визуализировать эти данные, и просто сохраните диаграмму, когда закончите.

Посмотрите, что мы сделали здесь. Это было довольно просто, и отслеживание Илона Маска, возможно, было не самым интересным, хотя, возможно, неудивительно, что большинство упоминающих его пользователей твиттера не проверены. Анализ тональности показал, что большинство ответили нейтрально, хотя, возможно, лучше было фильтровать данные на основе языка раньше.

Мы также увеличили размер нашего кластера за 24 часа для MongoDB, поэтому, возможно, было бы разумно выбрать другой источник или отслеживать что-то с меньшим количеством твитов, но, тем не менее, интересно попробовать их диаграммы.

❤️ Лоло