การสร้างบอท Twitter ใน NodeJS

ฉันรู้ว่าช่วงนี้ฉันเงียบไปนิดหน่อย และค่อนข้างจะหยุดพักจากการเขียนโค้ดเรื่อง Chanukah บ้าง เมื่อคืนฉันคิดว่าแทนที่จะเข้าร่วม "ประเพณียิวโบราณในการรับประทานอาหารจีนที่ดีที่สุด" ฉันจะอยู่บ้านและทำงานในโครงการที่ฉันตั้งใจจะสำรวจ กำลังเขียนบอท Twitter

ฉันเลือกสิ่งที่เรียบง่ายเพื่อเริ่มต้นด้วย ใครก็ตามที่เป็นเจ้าของรถในนิวยอร์กซิตี้จะรู้ดีถึงความเจ็บปวดของ Alternate Side Parking (ASP) ในบางวันของสัปดาห์ เราไม่ได้รับอนุญาตให้จอดยานพาหนะของเราบนบางด้านของถนนในช่วงเวลาหนึ่งชั่วโมงครึ่งตามอำเภอใจ ในนาทีที่นัดหมาย กองทัพอีแร้งในชุดเครื่องแบบสีน้ำเงินเคลื่อนตัวเข้ามาในเมือง และรถทุกคันที่เจ้าของมาสายแม้ไม่กี่นาที จะถูกประดับด้วยซองสีส้มซึ่งมีค่าปรับเป็นค่าปรับ

โชคดีที่มีไม่กี่วันในระหว่างปี (ส่วนใหญ่เป็นวันหยุดตามกฎหมายและวันหลังจากพายุหิมะถล่ม) ซึ่งเราจะได้รับการบรรเทาโทษ ฉันตัดสินใจสร้างบอทที่จะทวีตในช่วงสมัยนั้น

ความจริงก็คือ NYC มีบัญชี Twitter ที่ทวีตสถานะของ ASP (@NYCASP) อยู่แล้ว แต่บัญชีนั้นทวีตทุกวันว่าสถานะคืออะไร ฉันไม่ต้องการให้ฟีดของฉันเกะกะในวันที่กฎ ASP มีผลบังคับใช้ (ซึ่งก็คือเกือบทุกวัน) ดังนั้น ฉันคิดว่าฉันจะเขียนบอทที่จะติดตาม @NYCASP สำหรับฉัน และรีทวีตเฉพาะในวันที่ ASP เท่านั้น กฎถูกระงับ

โชคดีที่มีแพ็คเกจโหนดที่เรียกว่า twit ซึ่งมีไคลเอนต์ Twitter API ที่ค่อนข้างใช้งานง่าย

เพื่อตั้งค่าบอท ฉันใช้ บทช่วยสอนที่ยอดเยี่ยมนี้ โดยเพื่อนของฉันและเพื่อนผู้สำเร็จการศึกษา Flatiron School Ben Greenberg หากคุณต้องการเขียนบอทของคุณเอง ฉันขอแนะนำให้ติดตามโพสต์ของเขาสำหรับการตั้งค่าเริ่มต้น รวมถึงคำแนะนำวิธีการปรับใช้กับ Heroku เพื่อให้บอทของคุณสามารถใช้งานจริงได้ ในโพสต์นี้ ฉันจะอธิบายว่าฉันสร้างบอทได้อย่างไร

ในที่สุด บอทของฉันก็มีลักษณะเช่นนี้:

const twit = require('twit');
require('dotenv').config()                                              
const config = {
    consumer_key: process.env.consumer_key,
    consumer_secret: process.env.consumer_secret,
    access_token: process.env.access_token,
    access_token_secret: process.env.access_token_secret
}
const Twitter = new twit(config)
const userID = "102773464"
const stream = Twitter.stream('statuses/filter', {follow: [userID]})
stream.on('tweet', function (tweet) {
    if(tweet.text.includes("suspended")) {
        retweet(tweet.id_str)
    }
})
const retweet = function(id) {
   Twitter.post('statuses/retweet/:id', {id: id}, function(err,res){
      if(res){
         console.log("Successfully Retweeted")
      } else {
         console.log(error.message)
      }
   })
}

ในบรรทัดแรก ฉันนำเข้าแพ็คเกจ twit จากนั้นฉันกำหนดการกำหนดค่าที่จำเป็นสำหรับบอทของฉันในการโพสต์ ฉันซ่อนคีย์ลับในตัวแปรสภาพแวดล้อมที่ฉันเข้าถึงโดยใช้ dotenv

จากนั้น ฉันกำหนดตัวแปรบางตัว: ตัวแปร Twitter สำหรับอินสแตนซ์ใหม่ของ twit โดยใช้การกำหนดค่าของฉัน ตัวแปร userID ที่เก็บ ID ผู้ใช้ของบัญชี Twitter @NYCASP และสุดท้าย ฉันเปิด twit stream ที่รับฟังทุกคน กิจกรรมที่เกี่ยวข้องกับบัญชีทวิตเตอร์ @NYCASP

ตอนนี้ฉันกำลังสตรีมอยู่ ฉันได้แนบตัวฟังเหตุการณ์เข้ากับสตรีมที่เรียกใช้ฟังก์ชันโทรกลับทุกครั้งที่มีการเพิ่มทวีตในสตรีม ฟังก์ชันนี้จะดูข้อความของทวีต และหากมีคำว่า "suspended" ฟังก์ชันนั้นจะเรียกใช้ฟังก์ชันอื่นที่รีทวีต

เรียบง่ายจริงๆ!

ตอนนี้สิ่งที่เหลืออยู่คือปรับใช้กับ Heroku และรอเช้าวันคริสต์มาสและดูว่าบอทของฉันจะรีทวีตการระงับในเช้าวันนั้นหรือไม่:

แจ็คพอต! มันได้ผล!

หากคุณเป็นชาวนิวยอร์กที่ต้องการติดตามบอทของฉัน คุณสามารถค้นหาได้ที่ @AlterSideBot