ساخت ربات توییتر با Node.JS — از صفر تا صد
در این مقاله با روش ساخت ربات توییتر با Node.js و اجرای آن روی Heroku آشنا خواهیم شد. این بات موجب بهبود کارهای ما در توییتر میشود و ما را قادر میسازد که کارهایی مانند ریتوییت و غیره را انجام دهیم. این کارکردها با استفاده از Twitter API ممکن میشود.
درخواست تبدیل به حساب توسعهدهنده در توییتر
مهمترین و دشوارترین بخش این راهنما همین ارائه درخواست به توییتر برای تبدیل شدن به حساب توسعهدهنده (Developer) است. به این منظور باید مراحل زیر را طی کنید:
- به توییتر لاگین کنید.
- به کنسول توسعهدهندگان بروید و درخواست حساب توسعهدهنده را ارائه بکنید.
- نوع اپلیکیشنی که میخواهید بسازید را مشخص سازید.
- هدف اپلیکیشن خود را قید کنید.
در ادامه متن توافقنامه و سیاستنامه توسعهدهنده را پیش از ارسال درخواست به دقت بخوانید. در صورتی که هر یک از شرایط ذکر شده در این موارد را نداشته باشید، درخواست شما رد خواهد شد.
ایجاد اپلیکیشن برای ساخت ربات توییتر
زمانی که حساب توسعهدهنده شما از سوی توییتر تأیید شد، به کنسول توسعهدهنده توییتر بروید.
- در نشانی apps.twitter.com یک اپلیکیشن بسازید.
- همه جزییات ضروری را پر کنید.
- یک کلید API یکتا ایجاد کنید.
- به جزییات اپلیکیشن بروید و وارد بخش keys and tokens بشوید.
- کلید API خود را در جای مطمئن و محرمانهای نگهداری کنید.
تنظیم محیط برای توسعه ربات توییتر با Node.js
ابتدا باید Node.js و npm را روی رایانه خود نصب کنید.
سپس دایرکتوری جدیدی به نام your- bot-name بسازید. محیط git را مقداردهی کرده و همه وابستگیهای twit را با استفاده از npm نصب کنید. دستورهای زیر را درون دایرکتوری بات وارد کنید:
$ git init $ npm init $ npm install twit
اکنون موفق شدهاید محیط توسعه را تنظیم و راهاندازی کنید.
پیادهسازی کد ربات توییتر
ابتدا باید twit را احراز هویت کنید و کد و اپلیکیشن توییتر را با استفاده کلیدهای API که قبلاً تولید کردیم، به آن لینک کنید. به این منظور یک فایل جدید به نام config.js ایجاد کرده و کد زیر را در آن قرار دهید:
1module.exports = {
2consumer_key: APPLICATION_CONSUMER_KEY_HERE,
3consumer_secret: APPLICATION_CONSUMER_SECRET_HERE,
4access_token: ACCESS_TOKEN_HERE,
5access_token_secret: ACCESS_TOKEN_SECRET_HERE
6}
کلیدهای یکتای خود را از داشبورد توییتر بگیرید و کد زیر را در فایل bit.js بنویسید:
1const config = require('./config')
2const twit = require('twit')
3
4const T = new twit(config)
5
6function retweet(searchText) {
7 // Params to be passed to the 'search/tweets' API endpoint
8 let params = {
9 q : searchText + '',
10 result_type : 'mixed',
11 count : 25,
12 }
13
14 T.get('search/tweets', params, function(err_search, data_search, response_search){
15
16 let tweets = data_search.statuses
17 if (!err_search)
18 {
19 let tweetIDList = []
20 for(let tweet of tweets) {
21 tweetIDList.push(tweet.id_str);
22
23 //more code here later...
24 }
25
26 // Call the 'statuses/retweet/:id' API endpoint for retweeting EACH of the tweetID
27 for (let tweetID of tweetIDList) {
28 T.post('statuses/retweet/:id', {id : tweetID}, function(err_rt, data_rt, response_rt){
29 if(!err_rt){
30 console.log("\n\nRetweeted! ID - " + tweetID)
31 }
32 else {
33 console.log("\nError... Duplication maybe... " + tweetID)
34 console.log("Error = " + err_rt)
35 }
36 })
37 }
38 }
39 else {
40 console.log("Error while searching" + err_search)
41 process.exit(1)
42 }
43 })
44}
45
46// Run every 60 seconds
47setInterval(function() { retweet('#DataScience OR #DataVisualization'); }, 60000)
در کد فوق شیء twit را با استفاده از پیکربندی خودمان مقداردهی کردهایم. پارامترهای زیر را به API جستجو ارسال کردهایم.
- q – کوئری جستجو
- result_type – توییتهای محبوب یا قدیمی
- counts – تعداد توییتهای دریافتی
شیء JSON برای بازیابی همه توییتها استفاده میشود و همه توییتها به status/retweet/:id ارسال میشوند. اکنون بات را به صورت لوکال با استفاده از دستور زیر تست میکنیم:
node bot.js
از تکرار ریتوییت اجتناب کنید
کد زیر را در حلقه for در فایل bot.js اضافه کنید:
1if(tweet.text.startsWith("RT @")) {
2 if(tweet.retweeted_status) {
3 tweetIDList.push(tweet.retweeted_status.id_str);
4 }
5 else {
6 tweetIDList.push(tweet.id_str);
7 }
8}
9else {
10 tweetIDList.push(tweet.id_str);
11}
سپس کد زیر را در خارج از حلقه اضافه کنید:
1/ Utility function - Gives unique elements from an array
2function onlyUnique(value, index, self) {
3 return self.indexOf(value) === index;
4}
5
6// Get only unique entries
7tweetIDList = tweetIDList.filter( onlyUnique )
- هر توییت یک شناسه یکتا به صورت id_str دارد.
- هر ریتوییت شناسه متفاوتی به صورت id_str دارد.
- API جستجو برای یافتن این که توییت ارجینال یا ریتوییت است استفاده میشود.
- به این ترتیب از ایجاد موارد تکراری در بات خودمان جلوگیری میکنیم.
توزیع اپلیکیشن ربات توییتر
ابتدا یک حساب در Heroku ایجاد کنید و سپس یک اپلیکیشن با نام your botname بسازید. نام فایل دایرکتوری لوکال و نام پروژه هروکو را به صورت یکسان انتخاب کنید. heroku-cli را نصب کرده و یک heroku-cli با استفاده از دستورهای زیر ایجاد کنید:
1worker: node bot.js
با استفاده از heroku CLI لاگین کنید:
1$ heroku login
پیش از توزیع به داشبورد Heroku بروید و worker dyno را آغاز کرده و آن را پیکربندی کنید. با استفاده از این دستورها اپلیکیشن را روی هروکو توزیع کنید:
$ heroku git:remote -a your-botname $ git add $ git commit -am "Add code" $ git push heroku master
سخن پایانی
امیدواریم با مطالعه این راهنمای ساخت بات توییتر با Node.js مطالب جدیدی آموخته و با شیوه ساخت بات توییتر و توزیع آن روی Heroku آشنا شده باشید. هر گونه دیدگاه و پیشنهاد خود را در بخش نظرات این نوشته با ما و دیگر خوانندگان مجله فرادرس در میان بگذارید.
سلام
من میخام یکی برام چندین ربات تویتر بسازه که به طور خودکار پصت بزارن
هزینه شم باهم راه میایم
سلام وقت بخیر
یک ربات میخواستم که اتوماتیک به توییتی که براش تعریف کنم فیوبگیره و توییت رو فیواستار کنه