노드가 있는 간단한 트위터 로봇.js 튜토리얼 3부분: 검색 및 전송

15711 단어 webdevbotnodebeginners
이 문장은 최초로 발표되었다
만약 네가 아직 세 번째 부분을 읽지 않았다면, 나는 네가 세 번째 부분을 더욱 잘 이해하도록 읽어 보라고 건의한다.
본 강좌의 앞부분 두 부분에서 우리는 트위터 로봇을 어떻게 만드는지 토론했다. 이 로봇은 Today in History API를 통해 트윗을 보내고 계획 임무를 만들어서 이 트윗이 하루 중 특정 시간에 자동으로 발송되도록 한다.Twitter API에 쉽게 연결하기 위해 사용하고 있습니다.위의 라이브 액션에서 이 강좌의 로봇을 볼 수 있습니다.
이 강좌의 이 부분에서 우리는 특정한 조회에 따라 추문을 검색하여 그것들을 전송할 것이다.너는 아마도 많은 로봇이 이렇게 하는 것을 본 적이 있을 것이다.트위터에 라벨이나 특정 키워드가 달린 글을 올렸는데 로봇이 바로 전달했다.이게 우리가 해야 할 일이야.1분마다 "#HistoryBot"태그가 있는 트윗을 검색하여 전달합니다.
당신은 GitHub Repository에서 본 강좌의 코드를 계속 배울 수 있습니다.

트윗 검색


첫 번째 단계는 나중에 전달할 수 있도록 "#HistoryBot"태그가 있는 최신 트윗을 검색하는 것입니다.
프로젝트의 루트 디렉터리에 search.js 라는 새 파일을 만들 것입니다.단독 파일에서 이 동작을 실행하는 이유는, 이 파일에서 예약된 명령을 독립적으로 실행해야 하기 때문입니다.
파일은 다음과 같이 TwitterClient 초기화부터 시작해야 합니다.
//search.js
require('dotenv').config()
const {TwitterClient} = require('twitter-api-client')

const twitterClient = new TwitterClient({
    apiKey: process.env.TWITTER_API_KEY,
    apiSecret: process.env.TWITTER_API_SECRET,
    accessToken: process.env.TWITTER_ACCESS_TOKEN,
    accessTokenSecret: process.env.TWITTER_ACCESS_TOKEN_SECRET
})
강좌를 계속 공부하고 있다면 index.js 의 내용이 완전히 같다는 것을 알 수 있습니다.그러니 코드를 반복하지 마세요.우리는 이 코드를 init.js 라는 다른 파일로 옮겨서 twitterClient 내보낸 다음 index.js 파일과 search.js 파일에 그것을 필요로 합니다.(프로젝트에 대한 자습서만 수행하는 경우에는 이 단계를 수행할 필요가 없습니다.)
현재 Dell은 init.js 및 다음과 같은 기능을 제공합니다.
//init.js
require('dotenv').config()
const {TwitterClient} = require('twitter-api-client')

const twitterClient = new TwitterClient({
    apiKey: process.env.TWITTER_API_KEY,
    apiSecret: process.env.TWITTER_API_SECRET,
    accessToken: process.env.TWITTER_ACCESS_TOKEN,
    accessTokenSecret: process.env.TWITTER_ACCESS_TOKEN_SECRET
})

module.exports = twitterClient
그런 다음 index.js에서 TwitterClient를 요청하고 이전에 TwitterClient를 초기화한 코드를 삭제합니다.
//index.js
const twitterClient = require('./init')
const axios = require('axios')

axios.get... //rest of the code from before
변경search.js:
//search.js
const twitterClient = require('./init')
이렇게 하면 우리는 서로 다른 파일에서 같은 코드를 반복하는 것을 피할 수 있다.
이제 검색 스크립트로 돌아갑니다.트위터 클라이언트를 초기화한 후에는 "#HistoryBot"이 포함된 트윗을 검색해야 합니다.이를 위해, 우리는 트위터 방법을 사용할 것이다.Twitter 클라이언트에서 검색합니다.예를 들어, id가 특정 트윗 이후에 트윗을 가져오는 데 도움을 줄 수 있으므로 이 메서드는 가변 수량 매개변수를 사용합니다.이것은 당신이 하고 있는 검색과 전송하고 있는 트윗을 최적화하는 데 도움을 줄 수 있다.모든 매개 변수의 목록을 찾을 수 있습니다.
예시된 기본적인 사용법에 대해 우리는 두 가지 인자를 전달할 것이다. q 이것은 우리가 실행하고 있는 검색 조회이고, 우리의 강좌에는 '#History Bot' 이지만, 추문에서 찾을 수 있도록 어떤 종류의 키워드나hashtag을 놓을 수 있습니다.두 번째 매개 변수는 result_type인데 그 값은 recent일 것이다.이 매개 변수의 기본값은 mixed 이고, 최근의 트윗과 유행하는 트윗의 혼합을 검색하기 위해서입니다.우리는 recent를 사용해야 한다. 왜냐하면 우리의 목표는 트윗이 발표될 때 트윗을 전달하는 것이기 때문이다.
기본적으로 이 방법이 호출된 단점은 최대 15개의 추문을 검색합니다.필요하면 전달count 파라미터를 통해 변경할 수 있으며, 이 파라미터는 최대 100까지 변경할 수 있다.
따라서 search.js의 코드는 다음과 같습니다.
const twitterClient = require('./init')

twitterClient.tweets.search({
    q: '#HistoryBot',
    result_type: 'recent', //get latest tweets with this hashtag
}).then ((response) => {
    console.log(response)
}).catch ((err) => console.error(err))
이렇게 하면 마지막 15개의 "#HistoryBot"이 포함된 트윗이 검색되어 콘솔에 인쇄됩니다.
이를 테스트하려면 터미널에서 다음 명령을 실행합니다.
node search.js
만약 모든 것이 정상이라면, status 속성을 포함하는 대상을 보게 될 것입니다. 이 속성은 상태 그룹을 가지고 있습니다.각 상태에는 id,id_str,text 등의 속성이 있고 다른 속성도 많다.이 탭을 사용하는 트윗이 많지 않다는 것을 기억하십시오. 왜냐하면 이 탭을 사용하는 것은 교과서가 무작위로 어떤 내용도 전달하지 않도록 하기 위해서입니다.그래서 라벨을 다른 어떤 것으로 바꿔서 효과를 볼 수 있다.

트윗


우리의 조회에 따라 추문을 검색한 후, 우리는 그것들을 우리의 로봇에 전송하기를 희망한다.이를 위해 tweets.statusesRetweetById에서 방법twitterClient을 사용할 것입니다.이 방법은 매개 변수id를 가져옵니다. 이것은 우리가 이전에 받은 상태 대상id_str에서 나온 것입니다.
주의해야 할 것은 트위터가 이미 글을 올렸을 때 트위터는 그것을 무시할 것이다.전송 제한에 도달하면 상태 코드가 403인 오류가 발생합니다.이 단점에 대한 더 많은 정보를 읽을 수 있습니다.
따라서 search.js의 코드는 다음과 같이 변경됩니다.
//...
twitterClient.tweets.search({
    q: '#HistoryBot',
    result_type: 'recent', //get latest tweets with this hashtag
}).then ((response) => {
    if (response.statuses) {
        response.statuses.forEach((status) => {
            twitterClient.tweets.statusesRetweetById({
                id: status.id_str
            })
            .then ((resp) => console.log(`Retweeted tweet #${status.id}`))
            .catch ((err) => console.error(err))
        })
    }
}).catch ((err) => console.error(err))
우리는 tweets.search의 응답을 컨트롤러에 인쇄하지 않고 응답에서 받은 상태 그룹을 교체하고 tweets.statusesRetweetById를 사용하여 모든 추문을 전송하여 각 상태를 전달한다id_str.성공하면 컨트롤 데스크톱 Retweeted tweet #${status.id} 에 출력되며, 그 중 status.id 은 상태의 id입니다.실패하면, 컨트롤러에 오류를 출력합니다.
이제 동일한 명령을 실행하여 이 점을 다시 테스트해 보겠습니다.
node search.js
너는 그것이 이 라벨로 추문을 전달하는 것을 보게 될 것이다.

주의: @HistoryBot7에 트윗을 올린 적이 있기 때문에 라벨이 달린 트윗이 없으면 테스트해 보셔도 됩니다!

서버에 배포


만약 당신이 우리의 강좌를 계속 공부한다면, 당신은 우리가 alwaysdata에 로봇을 배치한 것을 발견할 수 있을 것이다.현재, 우리는 업데이트된 코드로 서버를 업데이트할 것이다. 그러면 우리는 스케줄러 작업 후 분당 한 번씩 검색을 실행하고 실행할 수 있다.js.
먼저 최신 변경 사항을 사용하여 서버에서 사용하는 GitHub 저장소를 업데이트합니다.
git add .
git commit -m "added retweet functionality"
git push origin master
그리고 SSH를 사용하여 서버에 연결합니다. 저희가 2부분에서 증빙서류를 사용한 것처럼.
연결 후 bot 코드를 포함하는 디렉토리로 이동하여 GitHub 저장소에서 추출합니다.
cd history-bot
git pull origin master
이것은 최신 변경 사항으로 서버의 코드를 업데이트할 것입니다.
현재, 우리는alwaysdata 서버에 계획 작업을 만듭니다.다른 서버를 사용한다면,cron 작업을 만드는 간단한 방법일 뿐입니다.
alwaysdata 관리 계기판에서 사이드바의 '고급' 아래의 '계획 작업' 으로 이동합니다.그런 다음 예약된 작업 추가 를 클릭합니다.

다음 페이지의 양식에서 작업 유형에 대한 명령 실행을 선택한 다음 값에 대한 명령 node~/history bot/search.js 를 입력합니다.서버 경로와 파일에 따라 명령을 바꿔야 합니다.

Environment 섹션에서는 드롭다운 목록에서 SSH 사용자를 선택하고 Working Directory 필드/home/history bot/history bot에 입력하십시오. 첫 번째history bot은 Alwaysdata에서bot을 위한 응용 프로그램의 이름이고 두 번째는history bot의 목록입니다.이 점을 무시할 수도 있습니다. 왜냐하면 저희 명령은 검색의 전체 경로를 지정했기 때문입니다.js
주파수 부분에서 '매' 를 선택하고 필드에 1 을 입력하여 분당 명령을 실행합니다.물론, 사용자의 용례에 맞는 내용으로 변경할 수 있습니다.

완료되면 제출 을 클릭합니다.그런 다음 사이드바의 웹 사이트로 이동하여 애플리케이션을 다시 시작합니다.지금, 스크립트는 분당 한 번 실행됩니다!

이 강좌의 역사 로봇을 테스트하려면 #History Bot을 사용하여 트위터에 뭔가를 올리면 전달됩니다!
만약 로봇이 전체 강좌에서 일부 트윗을 전송했다면, 즉시 그 효과를 볼 수 있도록 트윗을 취소해야 한다는 것을 주의하십시오.
로봇이 정상적으로 작동하지 않으면 서버의 로그를 보고 더 많은 정보를 얻을 수 있습니다.alwaysdata를 사용한다면 ~/admin/logs/job/2021 에서 로그를 찾을 수 있습니다.

결론


이 세 가지 강좌에 따르면 정기적으로 트윗하는 로봇을 만들고 특정한 키워드나 라벨에 따라 트위터를 검색하고 트윗을 전송한 후 로봇을 배치할 수 있어야 한다.네가 그것으로 위대한 것을 창조할 수 있기를 바란다.

좋은 웹페이지 즐겨찾기