การสร้างบอท 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