img

با کمک Python به صورت اتوماتیک Retweets کنید…

/
/
/

تا سال ۲۰۲۲، اغلب بسترهای سرویسِ کنونی(PaaSها)، به مدلی اساسا فاقد سرور تکامل خواهند یافت. بدین ترتیب، معماری‌های بسترهای ابری، که امروزه حکم فرمایی می کنند، منسوخ خواهند شد.

احتمالا تا به حال درباره‌ی پردازش بدون سرور و مزایا و معایب و فن آوری‌های دخیل در آن چیزهایی شنیده‌اید. نظرتان درباره‌ی استفاده از این نوع پردازش در اتوماسیون وظایف گوناگون چیست؟ به عنوان مثال، جالب نخواهد بود اگر بتوانید tweet هایی را که شامل هشتگ‌های مورد علاقه شما هستند را به صورت خودکار بازنشر(Retweet) دهید. مثلا می توانید tweetهایی را که شاملِ هشتگ‌هایی چون #serverless و #opensource می شوند را retweet کنید.
این موضوعی است که در این مقاله به بررسی آن خواهیم پرداخت. ما برای نیل به این مقصود، دست به ساختِ باتی(bot) خواهیم زد ( نامِ TweetBot، برای این بات، انتخابِ مناسبی به نظر می رسد)، که شما در آن هشتگ‌های مورد نظرتان را تعیین می کنید، و سپس بات آنها را در بازه‌های زمانیِ دلخواه شما انتشار می دهد.
ما این پروژه را با نوشتنِ کدِ انجامِ retweet به صورت خودکار(auto-retweeting)، به زبان python آغاز می کنیم، و آن را بر روی رایانه‌ی خود امتحان کرده، سپس توسطِ OpenWhisk بر روی IBM Bluemix بارگذاری خواهیم کرد. در نوشتنِ این مقاله فرض بر این گرفته شد که شما از مقدمات برنامه نویسی به زبان python آگاه هستید. برای درک این مقاله، شما نیاز به دانستن چیزی درباره‌ی OpenWhisk یا Bluemix از قبل ندارید – زیرا در راستای این مقاله با آنها آشنا خواهید شد.

 

توسعه‌ی باتِ Retweet کننده(TweetBot)
برای نوشتن کدهای این بات، اولین اقدام عاجل و لازم، نصب python 3 می باشد.
رابطِ برنامه‌نویسیِ کاربردیِ(API) Twitter، خواندن و نوشتن داده‌ها را در Twitter، ایجاد یک tweet جدید، خواندنِ اطلاعاتِ کاربر و داده های دنبال کننده، retweet، و سایر چیزهای دیگر را ممکن می سازد. برای این منظور، شما بایستی ابتدا یک نرم افزار Twitter بسازید و ملاحظاتِ OAuth آن را یادداشت کنید، چون به آن برای پیکربندیِ بات خود نیاز دارید.
(برای ساخت نرم افزار به  https://apps.twitter.com/ سر بزنید.)
دسترسی به API توئیتر در Python، به وسیله‌ی ماژولِ TwitterFollowBot میسر می شود. با استفاده از این ماژول، شما قادر به انجام خیلی بیش از فقط retweet کردن خواهید بود – می توانید به صورت خودکارلایک کرده، و دیگران را حتی دنبال (follow) کنید. برای توسعه‌ی باتِ مورد نظرمان، که آن را TwitterBot نام نهادیم، بایستی ماژول را به جای نصب در مسیرِ پیش فرضِ bin، در یک فولدرِ دیگر نصب کنید. برای این منظور این فرمان را اجرا نمایید:

pip install –target <target_folder> TwitterFollowBot

حالا برنامه‌ای را خواهیم نوشت، که از ماژولِ TwitterFollowBot برای retweet کردن آخرین tweet های شامل عبارتی خاص استفاده می کند ( مثلا توئیت‌های شاملِ #Serverless)
اکنون یک نمونه از TwitterFollowBot را می سازیم. TwitterFollowBot، از فایلِ config.txt که در مسیرِ فعلی قرار دارد برای پیکربندیِ بات استفاده می کند.
پس اجازه دهید ابتدا بات را پیکربندی کنیم. برای این منظور، شما بایستی یک فایلِ config.txt را بسازید و آن را با اطلاعاتی که در زیر آمده است پر نمایید، تا بات، توانایی اتصال به Twitter API را داشته باشد:

OAUTH_TOKEN:
OAUTH_SECRET: API Keys from
CONSUMER_KEY: the twitter app
CONSUMER_SECRET:
TWITTER_HANDLE: <your twitter handle>
ALREADY_FOLLOWED_FILE: already-followed.txt
FOLLOWERS_FILE:followers.txt
FOLLOWS_FILE:following.txt
USERS_KEEP_FOLLOWING:
USERS_KEEP_UNMUTED:
USERS_KEEP_MUTED:

فایل‌های already-followed.txt، followers.txt و following.txt حاویِ ID های twitter مد نظر ما می باشند. بدیهی است که شما خودتان باید این فایل‌ها را بسازید – می توانید آنها را خالی نیز بگذارید. سایر جایگاه‌ها(field) هم می توانند خالی باقی بمانند.

# Program to retweet fve latest tweets based on a hashtag
(#Serverless)
from TwitterFollowBot import TwitterBot

def retweet():
# create an instance of the TwitterFollowBot
# by default, the bot will look for a confguration
fle called confg.txt
# in your current directory
my_bot = TwitterBot()
# autoretweets the 5(count)
latest tweets that matches the hashtag
my_bot.auto_rt(“#Serverless”, count = 5)
return {‘message’ : ‘retweeted successfully’}
retweet()

کد کوتاه و لذت بخشی است! بیایید آن را با نام test.py ذخیره کنیم، و سپس آن را اجرا نماییم. آنچه که از اجرای این کد حاصل می شود، در شکل ۱، نمایش داده شده است.
هنگامی که شما اسکریپت python را اجرا می کنید، اتصال با API توئیتر برقرار شده، و retweet انجام می گیرد. نتیجه به شکل یک هشدار، که بیانگرِ آپدیت نشدنِ followers.txt می باشد، به نمایش در می آید؛ که می توانید آن را نادیده بگیرید، و یا اینکه فایل‌های مورد بررسی را به روز‌رسانی کنید، تا از شرِ این هشدار خلاص شوید. برنامه‌ی ما tweetهای retweet شده را نمایش خواهد داد، پس معلوم می شود که زحمات ما به بار نشسته‌اند.
هنگامی که کد در رایانه‌ی ما امتحان شد، وقت آن است که برنامه را در فضای ابری، با استفاده از روشِ بدونِ سرور بارگذاری کرده، و سپس اجرا کنیم. برای این منظور، ما Apache OpenWhisk را به عنوانِ بسترِ بدونِ سرورِ خود انتخاب کردیم، و از IBM Bluemix به عنوان بسترِ ابری، برای بارگذاریِ آنچه که OpenWhisk بایستی انجام دهد استفاده خواهیم کرد.

Apache OpenWhisk چیست؟
Apache OpenWhisk نام یک بستر ابریِ بدون سرور است، که متن باز نیز هست. این بستر عملکردهای گوناگونی را به فراخور رویدادها، در هر مقیاسی اجرا می کند.
OpenWhisk ابتدا توسطِ IBM پدید آمد، و اکنون توسط Apache رشد و توسعه داده می شود. Adobe نیز یکی از حامیانِ مهمِ این پروژه بوده، و API دروازه‌ای (API Gateway) را برای آن توسعه داده است. OpenWhisk اعمال تعریف شده‌ای را (کارهای درخواستی یا action) در پاسخ به رویدادهای صورت پذیرفته انجام می دهد، که این رویدادها را می توان راه اندازهای درخواستی نیز در نظر گرفت.(called triggers)
از آنجایی که این بستر، بستری بدون سرور می باشد، شما فقط کافی است کدی را که می خواهید اجرا شود را ارائه دهید، و اصلا لازم نیست نگرانِ سامان دادنِ چرخه‌ی عملیاتِ حمل کننده‌های اجرا کننده‌ی کد باشید.
انتخاب اینکه OpenWhisk کجا اجرا شود با شما است. می توانید آن را روی لپ تاپ خود، و یا بر روی فضای ابری داشته باشید. اگر آن را در فضای ابری اجرا کنید، نسخه‌ی Paas یا بسترِ به عنوانِ سرویس OpenWhisk که توسط IBM Bluemix ارائه می گردد برایتان مهیا می شود، که اگر بخواهید می توانید آن را به فضاهای زیرساخت به عنوانِ سرویسی(IaaS) چون Bluemix، Amazon EC2، Microsoft Azure و بسترِ ابریِ Google مجهز کنید.
چند نمونه از جنبه‌های کلیدیِ OpenWhisk از قرارِ زیر است:
* متن باز است. و اگر تمایل داشته باشید، می توانید در کدها به کند و کاو پرداخته، و آنها را دستکاری کرده، و با توجه به نیازتان تغییرشان دهید. برای انجامِ اینگونه تغییرات، از زبان‌های بسیاری همچون Node.js 6، python 3، PHP 7.1 و Swift 3.1.1 پشتیبانی می شود.
* کارها(عملکرد‌های بدونِ سرور) حتی می توانند بسته‌های نرم افزاریِ در غالب Docker را نیز شامل شوند، یعنی می توانید بسته‌های Docker را در OpenWhisk اجرا کنید.
* می توانید آن را به صورت محلی اجرا کنید! هیچ کدام از بسترهای بدونِ سرورِ بزرگ، این ویژگی را ندارند. می توانید عملکردها را به صورت محلی بر روی سخت افزار خود ساخته، و اجرایشان کنید، و سپس آنها را برروی فضای ابری بارگذاری نمایید.

TweetBot و OpenWhisk
برای آنکه بتوان از TweetBot به شیوه‌ی بدون سرور استفاده کرد، شما باید OpenWhisk را برروی رایانه خود نصب کرده، و یک حساب BlueMix را نیز برای خودتان درست کنید. برای دریافت OpenWhisk، به

آدرسِ http://console.bluemix.net/openwhisk/cli بروید. جذابیتِ فن‌آوریِ بدون سرور این است که نیازی نیست کل برنامه‌ی خود را از نو بنویسید؛ تنها کافی است کدهای ساده‌‌ای را که برروی رایانه‌ی شما اجرا می شوند را تغییر دهید. جالب است بدانید TweetBot ما تنها به یک تغییر نیاز دارد – بایستی یک تابع اصلی با یک ورودی از نوع دیکشنری داشته باشد و با نام __main__.py ذخیره شود.
در اینجا کد تغییر یافته را ملاحظه می کنید:

# Program to retweet fve latest tweets based on a hashtag
(#Serverless)
from TwitterFollowBot import TwitterBot

def retweet(dict):
# create an instance of the TwitterFollowBot
# by default, the bot will look for a confguration fle
called confg.txt
# in your current directory
my_bot = TwitterBot()
# autoretweets the 5(count)
latest tweets that matches the hashtag
my_bot.auto_rt(“#Serverless”, count = 5)
def main(dict):
retweet(dict)
return {‘message’ : ‘retweeted successfully’}

اکنون این کد را در فایلی به نام __main__.py ذخیره کنید. فایل‌های

config.txt, already-followed.txt,

followers.txt و following.txt را ساخته، و آنها را به همراهِ __main__.py و متعلقاتِ ماژولِ TwitterFollowBot به صورت یک فایل zip ذخیره کنید.

 

فرآیندِ فراخواندن
هنگامی که wsk CLI (واسطِ خطِ فرمان) نصب گردید و فایل zip آماده شد، مراحل زیر را انجام دهید.

گام نخست: ساخت و به روز رسانی یک عمل(action)
به حساب IBM Bluemix خود وارد شوید(http://console.bluemix.net/openwhisk/) و یک عملِ جدید بسازید. تنها راه بارگذاریِ فایل zip از طریق CLI می باشد. نحوه‌ی کار بدین صورت است:

wsk action create <action-name> –kind <language:version>
<file_name>
Sample Command:
wsk action create tweetBot –kind python:3 OpenWhisk.zip

 

گام دوم: فراخوانیِ عملکرد(وضعیتِ دسترسی-آزاد)
کد لازم:

wsk action invoke <action-name>
Sample Command: wsk action invoke tweetBot

 

گام سوم: چک کردن نتیجه
از آنجایی که ما عملکرد را در وضعیت دسترسی-آزاد فراخوانی نمودیم ( اگر پارامترِ –blocking را افزوده بودیم، عکس این موضوع رخ می داد.)، فرمان بلادرنگ نتیجه را برگشت می دهد، اما در پشت صحنه، فرآیند اجرای فرمان در حال انجام می باشد. کد به شکل زیر است:

wsk activation result <action ID>
Sample Command:
wsk activation result f4df0d1dcb12488396978d2cda832b09
گام چهارم: بررسیِ صورتِ عملیات(log)
کد بدین نحو است:
wsk activation logs <action ID>
Sample Command:
wsk activation logs f4df0d1dcb12488396978d2cda832b09

 

خودکار کردنِ فراخوانی
زمانی که عمل تعریف شده (action) فراخوانی شود، حسابِ Twitter شما ۵ تا tweet آخری را که حاویِ هشتگِ #Serverless باشند را retweet خواهد کرد.
با این وجود، هنوز هم این کار، عملی دستی محسوب می گردد. برای پررنگ کردنِ اتوماسیون، بهتر است فرآیندِ فراخوانی نیز خودکار گردد، تا تنها وظیفه شما تعریف دستور انجام کار(action) باشد.
استفاده از یک راه‌اندازِ دوره‌ای(periodic trigger) بهترین گزینه می باشد. این راه‌انداز در بازه‌هایی از قبل تعیین شده‌، وظیفه‌ی مورد نظر ما را که همان retweet کردنِ tweetهای حاویِ #Serverless می باشد را انجام می دهد. برای این منظور، کاربر بایستی یا یک الگو را انتخاب کند، و یا یک عبارت زمان‌دار(cron) را بنویسد.
الگویی که در شکل ۷ پدیدار است، عمل retweet را در هر روز هفته، هر شش ساعت یکبار انجام می دهد، و زحمت فعالیت در Twitter را از دوش شما برمی دارد!

 

چند نکته‌
قبل از آنکه این مقاله را به پایان ببریم، چند نکته‌ای وجود دارد که بایستی نسبت به آنها دقت داشته باشید:
۱- openWhisk متن باز، و رایگان است، اما برای بارگذاریِ آن، ما از IBM Bluemix استفاده کردیم که رایگان نمی‌باشد. توصیه می شود از آدرس:https://console.bluemix.net/openwhisk/learn/pricing برای تخمین هزینه‌ی ماهانه استفاده کنید.
۲- عمل retweet، از API توئیتر که توسط ماژولِ TwitterFollowBot در اختیارمان می گذارد استفاده می کند.
استفاده‌ی ناصحیح از این ماژول، می تواند منجر به بسته شدن دسترسیِ برنامه‌ی Twitter شما گردد، پس برای جلوگیری از چنین رخدادی، با دقت قوانین خودکار ساختنِ وظایف در Twitter را مطالعه کنید.

(http://support.twitter.com/articles/ 76915)

ما در این مقاله به بررسیِ باتی پرداختیم که می تواند عمل retweet را برای آخرین tweetهایی که محتویِ هشتگ‌های مورد نظر ما باشند را به صورت خودکار انجام دهد. ما عمل مورد نظرمان(action) را به صورت عملکردی فاقدِ سرور(serverless function) با زبان python نوشتیم، و آن را به وسیله‌ی OpenWhisk برروی IBM Bluemix بارگذاری کردیم. همچنین با بهره‌گیری از راه اندازها(trigger) فراخوانیِ عمل‌های تعریف شده را در بازه‌های معینی انجام دادیم.
با این مقدمه‌ی آموزشی، شما را دعوت می کنیم تا با OpenWhisk و سایرِ فن‌آوری‌هایِ هیجان‌اگیزِ بدونِ سرور، بیشتر آشنا شوید.

نظر بدهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

It is main inner container footer text