Node.Js의 Twitter 봇

소셜 미디어에서 일부 항목을 자동화하는 방법에 대해 궁금해하셨을 것입니다. 그럼 몇 가지를 해보겠습니다.



이 봇을 사용하여 우리를 팔로우하거나 트윗을 좋아하는 모든 사람에게 DM을 보낼 것입니다. 여기에서는 계정에서 팔로우 및 좋아요 이벤트를 사용하기 위해 를 사용할 것입니다.

섹션-0: 환경 설정



STEP-0: Twitter 계정을 만들고(또는 기존 계정을 사용) 다음으로 이동하여 앱을 추가합니다.
추신 봇을 배포할 별도의 계정을 만드는 것이 좋습니다.

1단계: 앱으로 이동하여 키 및 토큰 섹션에서 팔로우하세요.
  • API 키, 비밀, 전달자 토큰, 액세스 토큰 및 비밀.
  • 웹후크에 대한 콜백 URL을 추가하려면 3단계 인증을 활성화합니다.
    (앱에서 발생하는 이벤트를 사용하기 위해 웹후크를 등록하려면 콜백 URL이 필요합니다. 자세히 알아보기)
  • 사이드바에서 제품 -> 개발 환경으로 이동하여 개발 환경을 설정하고 이름을 모두 dev로 지정합니다.
  • 앱 권한 섹션에서 읽기, 쓰기 및 쪽지 권한을 부여합니다.

  • 2단계: Node.js에서 Twitter API를 사용하려면 다음 종속성을 설치합니다.
  • 트위터 라이트
  • 도트 환경
  • 트위터-웹후크
  • 익스프레스
  • 바디 파서

  • 3단계: 다운로드 및 설치ngrok를 통해 로컬 포트에 대한 HTTPS URL을 얻고 Heroku에 배포하기 전에 봇이 작동하는지 확인합니다.

    섹션-1: API 키 보안



    STEP-0: 먼저 bot.js 파일을 앱의 진입점으로 만듭니다. 그런 다음 twitter-lite npm 패키지를 사용하여 Twitter 끝점과 상호 작용합니다.

    1단계: 이제ngrok를 열고 로컬 포트 ​​3004에 대한 HTTPS URL을 가져와 섹션 1에서 얻은 토큰과 함께 URL을 .env 파일에 붙여넣습니다.

    2단계: .env 파일을 만들어 Section-0에서 모든 민감한 정보를 입력합니다.

    API_KEY=xIrIqvysinxgrSPm0Ir1D0cIF
    API_SECRET_KEY=DjIMhoxJlRCxbgtw1zXdiGuKE4IjmjlAmnvB6orus24jbzmNof
    ACCESS_TOKEN=1017764619337646080-3FrdsqhBLgVGDRAPEiy2a3fI7bY8Tv
    ACCESS_TOKEN_SECRET=sRRfI6osPcvnwoHTY8UIA8y2hsI40kMltauL4xspAuMfr
    ENVIRONMENT=dev
    ROUTE=/callback-url
    BEARER_TOKEN=AAAAAAAAAAAAAAAAAAAAACXW7gAAAAAA%2BbYioHfLTHR7Mf%2FnkpApHx1%2B%2FH0%3D5I7kLqCm5ejYNp5XoG8SbR96YoWxP3Po1J1RhyHwgPwj8E4rr8
    SERVER_URL=https://fbc5f7e2c77f.ngrok.io
    


    추신 이것은 섹션의 제목을 아이러니하게 만들지 만 어쨌든 앞으로 나아가십시오. 다루어야 할 것이 많습니다. 이미 토큰 BTW를 변경했습니다.

    STEP-3: 환경 변수를 읽기 위한 config.js를 만듭니다.

    module.exports.twitter = {
      consumer_key: `${process.env.API_KEY}`,
      consumer_secret: `${process.env.API_SECRET_KEY}`,
      access_token_key: `${process.env.ACCESS_TOKEN}`,
      access_token_secret: `${process.env.ACCESS_TOKEN_SECRET}`,
    }
    
    module.exports.webhooks = {
      serverUrl: `${process.env.SERVER_URL}`,
      route: `${process.env.ROUTE}`,
      consumerKey: `${process.env.API_KEY}`,
      consumerSecret: `${process.env.API_SECRET_KEY}`,
      accessToken: `${process.env.ACCESS_TOKEN}`,
      accessTokenSecret: `${process.env.ACCESS_TOKEN_SECRET}`,
      environment: `${process.env.ENVIRONMENT}`,
    }
    module.exports.webhooksUserActivity = {
      accessToken: `${process.env.ACCESS_TOKEN}`,
      accessTokenSecret: `${process.env.ACCESS_TOKEN_SECRET}`,
    }
    



    섹션-2: 코드



    STEP-0: 다음 코드에서 계정의 사용자 ID를 얻은 다음 twitter-webhooks 패키지를 사용하여 웹후크를 등록하여 계정에서 팔로우 및 _좋아하는 트윗_ 이벤트를 수신합니다. bot.js에 다음 코드를 붙여넣습니다.

    require('dotenv').config()
    
    const express = require('express')
    const Twitter = require('twitter-lite')
    const twitterWebhooks = require('twitter-webhooks')
    
    const { twitter, webhooks, webhooksUserActivity } = require('./config')
    
    const twitterLiteClient = new Twitter({ ...twitter })
    
    const app = express()
    app.use(express.json())
    app.use(express.urlencoded({ extended: true }))
    
    
    const userActivityWebhook = twitterWebhooks.userActivity({
      ...webhooks,
      app,
    })
    
    ;(async function () {
      //  get user id
      const result = await twitterLiteClient.get('users/lookup', {
        screen_name: '<twitter id of your app>',
      })
      const userId = result[0].id_str
    
      //     get webhooks
      const webhooksResult = await userActivityWebhook.getWebhooks()
    
      if (webhooksResult.environments[0].webhooks.length !== 0) {
        //  unregister earlier webhook
        const webhookId = webhooksResult.environments[0].webhooks[0].id
        await userActivityWebhook.unregister({
          webhookId,
        })
      }
    
      //Register your webhook url - just needed once per URL
      await userActivityWebhook.register()
    
      //Subscribe for a particular user activity
      userActivityWebhook
        .subscribe({
          ...webhooksUserActivity,
          userId,
        })
        .then(function (userActivity) {
          userActivity
            .on('follow', data => console.log(userActivity.id + ' - follow'))
            .on('favourite', data =>
              console.log(userActivity.id + 'favourite')
            )
        })
        .catch(console.error)
    })()
    app.listen(process.env.PORT || 3004)
    


    1단계: 이제 웹후크를 연결하고 이벤트 수신을 시작했으면 twitter-lite 패키지를 사용하여 계정에서 몇 가지 활동을 수행해 보겠습니다. 여기서는 새로운 팔로워나 트윗을 좋아하는 사용자에게 DM을 보내서 인사하고 있습니다.

    userActivityWebhook
        .subscribe({
          ...webhooksUserActivity,
          userId,
        })
        .then(function (userActivity) {
          userActivity
            .on('follow', async data => {
              const followerName = data.source.screen_name
              const followerId = data.source.id
    
              console.log(`\n ${followerName} followed you \n`)
              try {
                await twitterLiteClient.post('direct_messages/events/new', {
                  event: {
                    type: 'message_create',
                    message_create: {
                      target: {
                        recipient_id: followerId,
                      },
                      message_data: {
                        text: `Hey ${followerName}! Thanks for following. You are awesome`,
                      },
                    },
                  },
                })
              } catch (err) {
                console.error(err)
              }
            })
            .on('favorite', async data => {
              console.log(JSON.stringify(data))
              const followerName = data.user.screen_name
              const followerId = data.user.id_str
    
              console.log(`\n ${followerName} liked a tweet\n`)
    
              try {
                await twitterLiteClient.post('direct_messages/events/new', {
                  event: {
                    type: 'message_create',
                    message_create: {
                      target: {
                        recipient_id: followerId,
                      },
                      message_data: {
                        text: `Hey ${followerName}! Thanks for liking the tweet`,
                      },
                    },
                  },
                })
              } catch (err) {
                console.error(err)
              }
            })
        })
        .catch(console.error)
    


    3단계: 실행node bot.js을 실행하여 로컬에서 실행하고 개인 계정에서 봇을 팔로우하면 봇에서 DM을 받게 됩니다.

    P.S.: 슬픈 부분은 무료 계정의 경우 24시간 창에서 5개의 DM만 보낼 수 있다는 것입니다. 그러나 훨씬 더 큰 캡으로 많은 다른 작업을 수행할 수 있습니다.

    지금까지 달성한 ​​하이파이브.


    Heroku에 배포합니다.

    좋은 웹페이지 즐겨찾기