Zap, tweet e repita! Como usar o Zapier com o MongoDB
Avalie esse Tutorial
Sou um grande fã de automação quando o cenário permite. Talvez você precise acompanhar as informações dos convidados quando eles confirmam presença em seu evento, ou talvez precise monitorar e React aos feeds de dados. Esses são dois dos muitos cenários possíveis em que você provavelmente não gostaria de fazer as coisas manualmente.
Neste tutorial, vamos ver como coletar dados do Twitter com o Zapy, armazená-los no MongoDB usando uma função de webhook do Realm e, em seguida, executar agregações usando a linguagem de query do MongoDB (MQL).
Existem alguns requisitos que devem ser atendidos antes de iniciar este tutorial:
- Um nível pago do Zapier com acesso a automações premium
- Uma conta do Twitter
Existe um nível gratuito do Zapier, mas como planejamos usar webhooks, que são premium no Zapier, é necessária uma conta paga. Para consumir dados do Twitter no Zapier, é necessária uma conta do Twitter, mesmo que planejemos consumir dados que não estejam relacionados à nossa conta. Esses dados serão armazenados no MongoDB, portanto, é necessário um cluster com acesso IP configurado corretamente e permissões de usuário.
Você pode começar a usar o MongoDB Atlas iniciando um cluster M0 gratuito, sem necessidade de cartão de crédito.
Embora não seja necessário criar um banco de dados e uma coleção antes do uso, usaremos um banco de dadosdo zapier e uma coleção detweets em todo o escopo deste tutorial.
Como o plano é armazenar tuítes do Twitter dentro do MongoDB e depois criar queries para dar sentido a ele, provavelmente deveremos entender os dados antes de tentar trabalhar com eles.
Usaremos a funcionalidade " Search Mention " no Zapier para Twitter. Essecialmente, ele nos permite fornecer uma query do Twitter e trigger uma automação quando os dados são encontrados. Mais sobre isso em breve.
Como resultado, terminaremos com os seguintes dados brutos:
1 { 2 "created_at": "Tue Feb 02 20:31:58 +0000 2021", 3 "id": "1356701917603238000", 4 "id_str": "1356701917603237888", 5 "full_text": "In case anyone is interested in learning about how to work with streaming data using Node.js, I wrote a tutorial about it on the @MongoDB Developer Hub. https://t.co/Dxt80lD8xj #javascript", 6 "truncated": false, 7 "display_text_range": [0, 188], 8 "metadata": { 9 "iso_language_code": "en", 10 "result_type": "recent" 11 }, 12 "source": "<a href='https://about.twitter.com/products/tweetdeck' rel='nofollow'>TweetDeck</a>", 13 "in_reply_to_status_id": null, 14 "in_reply_to_status_id_str": null, 15 "in_reply_to_user_id": null, 16 "in_reply_to_user_id_str": null, 17 "in_reply_to_screen_name": null, 18 "user": { 19 "id": "227546834", 20 "id_str": "227546834", 21 "name": "Nic Raboy", 22 "screen_name": "nraboy", 23 "location": "Tracy, CA", 24 "description": "Advocate of modern web and mobile development technologies. I write tutorials and speak at events to make app development easier to understand. I work @MongoDB.", 25 "url": "https://t.co/mRqzaKrmvm", 26 "entities": { 27 "url": { 28 "urls": [ 29 { 30 "url": "https://t.co/mRqzaKrmvm", 31 "expanded_url": "https://www.thepolyglotdeveloper.com", 32 "display_url": "thepolyglotdeveloper.com", 33 "indices": [0, 23] 34 } 35 ] 36 }, 37 "description": { 38 "urls": "" 39 } 40 }, 41 "protected": false, 42 "followers_count": 4599, 43 "friends_count": 551, 44 "listed_count": 265, 45 "created_at": "Fri Dec 17 03:33:03 +0000 2010", 46 "favourites_count": 4550, 47 "verified": false 48 }, 49 "lang": "en", 50 "url": "https://twitter.com/227546834/status/1356701917603237888", 51 "text": "In case anyone is interested in learning about how to work with streaming data using Node.js, I wrote a tutorial about it on the @MongoDB Developer Hub. https://t.co/Dxt80lD8xj #javascript" 52 }
Os dados a que temos acesso são provavelmente mais do que precisamos. No entanto, isso realmente depende do que você está interessado. Para este exemplo, armazenaremos o seguinte no MongoDB:
1 { 2 "created_at": "Tue Feb 02 20:31:58 +0000 2021", 3 "user": { 4 "screen_name": "nraboy", 5 "location": "Tracy, CA", 6 "followers_count": 4599, 7 "friends_count": 551 8 }, 9 "text": "In case anyone is interested in learning about how to work with streaming data using Node.js, I wrote a tutorial about it on the @MongoDB Developer Hub. https://t.co/Dxt80lD8xj #javascript" 10 }
Sem nos anteciparmos muito, nossa análise será baseada no
followers_count
e nolocation
do usuário. Queremos saber onde estão nossos usuários e dar prioridade aos usuários que atingem um determinado limite de seguidores.Antes de começarmos a conectar o Zapier e o MongoDB, precisamos desenvolver o middleware que será responsável por receber dados de tweets do Zapier.
Lembre-se de que você precisará ter um cluster MongoDB Atlas configurado corretamente.
Precisamos criar um aplicativo Realm. No painel do MongoDB Atlas, clique na guia Realm .
Para simplificar, vamos querer criar um novo aplicativo. Clique no botãoCreate a New App (Criar um novo aplicativo ) e prossiga com o preenchimento das informações sobre seu aplicativo.
No Realm Dashboard, clique na guia3rd Party Services.
Vamos querer criar um serviçoHTTP. O nome não importa, mas pode fazer sentido nomeá-lo de Twitter com base no que estamos planejando fazer.
Como planejamos trabalhar com dados de tweets, faz sentido chamar nossa função de webhook de tweet, mas o nome não é realmente importante.
Com exceção do Método HTTP, os padrões são adequados para este webhook. Queremos que o método seja POST porque planejamos criar dados com essa função de webhook específica. Anote o URL do webhook porque ele será usado quando conectarmos o Zapyer.
A próxima etapa é abrir o Function Editor para que possamos adicionar alguma lógica por trás dessa função. Adicione o seguinte código JavaScript:
1 exports = function (payload, response) { 2 3 const tweet = EJSON.parse(payload.body.text()); 4 5 const collection = context.services.get("mongodb-atlas").db("zapier").collection("tweets"); 6 7 return collection.insertOne(tweet); 8 9 };
No código acima, estamos pegando a carga útil da solicitação, obtendo um identificador para a coleçãode tweets no banco de dadoszapier e, em seguida, fazendo uma operação de inserção para armazenar os dados na carga útil.
Há algumas coisas a serem observadas no código acima:
- Não estamos validando os dados que estão sendo enviados na carga útil da solicitação. Em um cenário realista, você provavelmente desejaria algum tipo de lógica de validação para ter certeza do que está armazenando.
- Não estamos autenticando o usuário enviando os dados. Neste exemplo, estamos confiantes de que somente o Zapier sabe sobre nossa URL.
- Não estamos fazendo nenhum tratamento de erros.
Quando chamamos nossa função, um novo documento deve ser criado dentro do MongoDB.
Por padrão, a função não será implementada ao salvar. Depois de salvar, certifique-se de revisar e implantar as alterações por meio da notificação na parte superior da janela do navegador.
Então, sabemos os dados com os quais trabalharemos e temos uma função de webhook do MongoDB Realm que está pronta para receber dados. Agora precisamos juntar tudo com o Zapier.
Para maior clareza, novas correspondências no Twitter serão nosso trigger no Zapier, e a função webhook será nosso evento.
No Zapier, escolha criar um novo "Zap," que é uma automação. O trigger precisa ser uma menção de pesquisa no Twitter, o que significa que, quando um novo Tweet é detectado por meio de uma consulta de pesquisa, nossos eventos acontecem.
Neste exemplo, usaremos a seguinte query de pesquisa do Twitter:
1 url:developer.mongodb.com -filter:retweets filter:safe lang:en -from:mongodb -from:realm
A query acima diz que estamos procurando tuítes que incluam um URL para Developer.mongodb.com. O URL não precisa corresponder exatamente, desde que o domínio corresponda. A query também diz que não estamos interessados em retweets. Queremos apenas tuítes originais, eles devem estar em inglês e devem ser detectados como seguros para o trabalho.
Além dos critérios de pesquisa mencionados, também estamos excluindo tuítes originados de uma das contas do MongoDB.
Em teoria, a consulta de pesquisa acima pode ser usada para ver o que as pessoas estão dizendo sobre o MongoDB Developer Hub.
Com o trigger em vigor, precisamos identificar o próximo estágio do pipeline de automação. O próximo estágio é extrair os dados do trigger e enviá-los para nossa função de webhook do Realm.
Como evento, certifique-se de escolher Webhooks by Zapier e especificar uma solicitação POST. A partir daí, você será solicitado a inserir o URL do webhook da Realm e o método, que deve ser POST. A Realm espera que a carga útil seja JSON, portanto, é importante selecionar JSON no Zapier.
Temos a opção de escolher quais dados da etapa de automação anterior passar para o nosso webhook. Selecione os campos em que você está interessado e salve sua automação.
Os dados que escolhi enviar são assim:
1 { 2 "created_at": "Tue Feb 02 20:31:58 +0000 2021", 3 "username": "nraboy", 4 "location": "Tracy, CA", 5 "follower_count": "4599", 6 "following_count": "551", 7 "message": "In case anyone is interested in learning about how to work with streaming data using Node.js, I wrote a tutorial about it on the @MongoDB Developer Hub. https://t.co/Dxt80lD8xj #javascript" 8 }
Os campos não correspondem aos campos originais criados pelo Twitter. É porque optei por mapeá-los para o que fazia sentido para eu.
Ao implantar o Zap, sempre que for encontrado um tuíte que corresponda à nossa query, ele será salvo em nosso cluster MongoDB.
Com os dados de tuítes sendo preenchidos no MongoDB, é hora de começar a consultá-los para dar sentido a eles. Neste exemplo fictício, queremos saber o que as pessoas estão dizendo sobre nosso Hub de Desenvolvedores e quão populares são essas pessoas.
Para fazer isso, vamos querer usar um pipeline de agregação dentro do MongoDB.
Veja o exemplo a seguir:
1 [ 2 { 3 "$addFields": { 4 "follower_count": { 5 "$toInt": "$follower_count" 6 }, 7 "following_count": { 8 "$toInt": "$following_count" 9 } 10 } 11 }, { 12 "$match": { 13 "follower_count": { 14 "$gt": 1000 15 } 16 } 17 }, { 18 "$group": { 19 "_id": { 20 "location": "$location" 21 }, 22 "location": { 23 "$sum": 1 24 } 25 } 26 } 27 ]
Existem três estágios no pipeline de agregação acima.
Queremos entender os dados do seguidor do indivíduo que fez o tuíte, mas esses dados chegam ao MongoDB como uma string em vez de um número inteiro. O primeiro estágio do pipeline pega os campos
follower_count
e following_count
e os converte de string para número inteiro. Na verdade, estamos usando $addFields
para criar novos campos, mas como eles têm o mesmo nome que os campos existentes, os campos existentes são substituídos.A próxima etapa é onde queremos identificar pessoas com mais de 1,000 seguidores como pessoas de interesse. Embora pessoas com menos seguidores possam estar dizendo coisas boas, neste exemplo, não nos importamos.
Depois de filtrarmos as pessoas pela contagem de seguidores, criamos um grupo com base em sua localização. Pode ser válido para nós saber em que lugar do mundo as pessoas estão falando sobre MongoDB. Podemos querer saber onde existe nosso público-alvo.
O pipeline de agregação que escolhemos usar pode ser executado com qualquer um dos drivers do MongoDB, por meio do painel do MongoDB Atlas ou por meio da CLI.
Você acabou de ver como usar o Zapper com o MongoDB para automatizar determinadas tarefas e armazenar os resultados como documentos no banco de dados NoSQL. Neste exemplo, optamos por armazenar dados do Twitter que correspondiam a determinados critérios, para serem analisados posteriormente com um aggregation pipeline. As opções de automações e análise que você pode fazer são ilimitadas.
Se você leu este tutorial e quer se envolver com mais conteúdo e desenvolvedores com ideias semelhantes, confira a MongoDB Community.