Python حرفه‌ای: ساخت ربات توییتر

?Professional Python: How to Build a Twitter Robot

25 اسفند 1399
درسنامه درس 29 از سری پایتون حرفه‌ای
Python حرفه ای: ساخت ربات توییتر (قسمت 29)

ثبت نام برای دریافت کلید API

در قدم اول باید به صفحه ثبت نام API توییتر رفته و ثبت نام خود را انجام بدهید. در صفحه ای که برایتان باز می شود گزینه ای به نام Apply وجود دارد (بالای صفحه و سمت راست). با کلیک روی این گزینه صفحه ای برایتان باز می شود که از شما می خواهد یک دسته از سه دسته زیر را انتخاب کنید:

  • Academic: استفاده آکادمیک و آموزشی
  • Hobbyist: برای تفریح و کنجکاوی
  • Professional: استفاده حرفه ای (تجاری، تحلیل آمار و غیره)

ما گزینه Hobbyist را انتخاب کرده و سپس گزینه Making A bot را انتخاب می کنیم. در مرحله بعدی از شما سوالاتی ساده پرسیده می شود که باید به آن ها جواب بدهید:

  • What would you like us to call you: در این قسمت باید نامی را برای ربات خود انتخاب کنید. توییتر از این به بعد برنامه شما را با این نام می شناسد.
  • What country do you live in: در این قسمت باید کشور محل زندگی خود را انتخاب کنید.
  • What’s your current coding skill level: در این قسمت باید سطح مهارت خود در برنامه نویسی را مشخص کنید.
  • Get the latest Twitter API news: اگر تیک این گزینه را فعال کنید، اخبار جدیدی در رابطه با تغییرات API توییتر دریافت خواهید کرد.

در مرحله بعدی به سوال زیر برخورد می کنید:

In English, please describe how you plan to use Twitter data and/or APIs. The more detailed the response, the easier it is to review and approve.

این سوال از ما می خواهد که دلیل استفاده از API توییتر را توضیح بدهیم. این توضیح باید حداقل ۲۰۰ کلمه و به زبان انگلیسی باشد و هر چه توضیحات دقیق تری در آن بدهید می توانید اطلاعات بهتری دریافت کنید. یک نمونه ساده از این توضیح را در متن زیر می بییند:

I'm trying to learn web development and one of my milestones is to work with a bunch of different APIs. I've decided that making a personal bot for twitter can teach me some good stuff about working with APIs therefore I'm submitting this.

The bot will be a personal bot for myself to try and do a couple of things with (like sending notifications to my personal number when i get a like or liking my friends tweets and other basic functionalities to learn better). I have read the restrictions of twitter bots and know what things are allowed and what things are not.

متنی که برای توییتر می نویسید باید صادقانه باشد و از نوشتن دروغ حتما پرهیز کنید. این متن ساده توضیح می دهد که ما در حال یادگیری توسعه وب و برنامه نویسی هستیم و می خواهیم از طریق ساخت یک ربات برای توییتر دانش خود را توسعه بدهیم. همچنین توضیح می دهیم که این ربات برای استفاده شخصی ما است و کارهای ساده ای مانند ارسال نوتیفیکیشن به شماره شخصی خودمان یا لایک کردن پست دوست هایمان را انجام می دهد. همچنین نوشته ایم که قوانین دسترسی به API توییتر را مطالعه کرده ایم و می دانیم که چه نوع استفاده هایی غیرقانونی و چه استفاده هایی مجاز می باشد.

در قسمت بعد مجموعه سوالات زیر را مشاهده می کنید:

Please answer each of the following with as much detail and accuracy as possible. Failure to do so could result in delays to your access to Twitter developer platform or rejected applications.

این متن به ما می گوید که تمام فیلدهای بعدی باید به دقت و با جزئیات کامل پر شوند. در قدم اول از شما پرسیده می شود که Are you planning to analyze Twitter data یعنی آیا قصد آنالیز و انجام تحلیل های مختلف (آماری، روانشناسی و غیره) را در توییت ها دارید؟ اگر چنین قصدی را دارید باید دلایل خود را توضیح بدهید. از آنجایی که ما فقط می خواهیم یک ربات ساده بنویسیم و قصدی برای تحلیل داده ها نداریم تیک این گزینه را غیرفعال می کنیم. در قسمت بعدی با سوال Will your app use Tweet, Retweet, Like, Follow, or Direct Message functionality روبرو می شویم که یعنی آیا برنامه ما قصد دارد از قابلیت هایی مانند لایک کردن پست و فالو کردن افراد استفاده کند؟ در این صورت باید توضیحات خود را بنویسیم:

As I've mentioned before, I am trying to become familiar with twitter API. Naturally, I will be using the like and tweet functionalities as they are the basic functionalities that I will require for my personal account.

این پاراگراف توضیح می دهد که هدف ما از توسعه این ربات فقط یادگیری است و از طرفی ربات برای استفاده روی حساب شخصی ما است به همین دلیل از قابلیت لایک کردن و توییت کردن استفاده خواهیم کرد.

در بخش بعدی از شما سوال خواهد شد که Do you plan to display Tweets or aggregate data about Twitter content outside Twitter یعنی آیا قصد جمع آوری داده های توییتر در خارج از فضای توییتر را دارید؟ به طور مثال آرشیو کردن توییت های یک فرد و امثال آن از این دسته عملیات ها هستند. از آنجایی که ما چنین قصدی نداریم این گزینه را غیرفعال می کنیم. در بخش بعدی با سوال Will your product, service, or analysis make Twitter content or derived information available to a government entity روبرو می شویم که می گوید آیا خدمات ما یا جمع آوری داده هایمان به قصد ارائه آن ها به دولت های دنیا است؟ طبیعتا این گزینه برای کار ما منفی است و تیک آن را برمی داریم.

در نهایت با ثبت درخواست خود ممکن است از شما خواسته شود که ایمیل خود را تایید کنید. اگر چنین اتفاقی افتاد باید به ایمیل خود رفته و روی لینک فعال سازی کلیک کنید. پس از آن ایمیلی دریافت خواهید کرد که متن زیر را دارد:

We’ve received your application for a Twitter developer account, and we’re starting our review.

Please keep an eye on this email address, and your spam folder, in case we reach out for more information. We know this application process might delay getting started with Twitter’s APIs, but we use this information to offer the best support to our developers, while protecting our platform and serving the health of the public conversation.

خلاصه این ایمیل بدین معنا است که درخواست ما در حال بررسی بوده و در آینده نتیجه اش اعلام خواهد شد. همچنین در این ایمیل گفته شده است که ممکن است در آینده از شما خواسته شود اطلاعات بیشتری را در رابطه با برنامه خود برایشان ارسال کنید بنابراین حواستان به ایمیل خود و پوشه spam باشد.

طی چند روز آینده و زمانی که حساب شما تایید شد می توانید به داشبورد خود رفته و از آنجا روی گزینه Get Started کلیک کنید. با این کار می توانید از صفحه باز شده گزینه create an app را انتخاب کنید. با کلیک روی این گزینه باید اطلاعات مهم مانند نام ربات و دلیل استفاده از آن را وارد کنید، سپس اجازه استفاده را خواهید داشت.

نصب و آشنایی با پکیج Tweepy

مسئله مهم اینجاست که کار با API و نوشتن همه چیز از صفر کار آزاردهنده ای است بنابراین مثل همیشه از پکیجی خارجی استفاده می کنیم. نام این پکیج tweepy است و به ما اجازه می دهد به شکل بسیار ساده تری با API توییتر ارتباط برقرار کنیم. در مرحله اول باید آن را نصب کنیم:

pip3 install tweepy

در مرحله بعدی باید محلی برای نوشتن کدهایمان اختصاص بدهیم. من پوشه ای به نام tweepy ایجاد می کنم و درون آن یک فایل به نام mytweepy.py می سازم. حالا به صفحه documentation این پکیج رفته و به قسمت getting started نگاهی می اندازیم. در این قسمت کد ساده را برای شروع به کار ما قرار داده است:

import tweepy




auth = tweepy.OAuthHandler(consumer_key, consumer_secret)

auth.set_access_token(access_token, access_token_secret)




api = tweepy.API(auth)




public_tweets = api.home_timeline()

for tweet in public_tweets:

    print(tweet.text)

بگذارید این کد را برایتان توضیح بدهم. در قسمت اول tweepy را وارد اسکریپت کرده ایم و سپس با استفاده از متد OAuthHandler متغیری به نام auth را ایجاد کرده ایم. توجه داشته باشید که باید به جای consumer_key و consumer_secret و همینطور access_token و  access_token_secret مقادیر دریافت شده از API توییتر را قرار بدهید. در توییتر و در صفحه برنامه های خودتان می توانید لیست برنامه های ساخته شده خود را مشاهده کنید. اگر روی دکمه details کلیک کرده و به سربرگ keys and tokens بروید، می توانید هر چهار مقدار را مشاهده کنید. حالا باید این مقادیر را به صورت رشته درون این کد قرار بدهید. مثال:

import tweepy




consumer_key = 'cChZNFj6T5R0TigYB9yd1w'

consumer_secret = 'PbKfYqSryyeKDWz4ebtY3o5ogNLG11WJuZBc9fQrQo'

access_token = 'NPcudxy0yU5T3tBzho7iCotZ3cnetKwcTIRlX0iwRl0'

access_token_secret = 'veNRnAWe6inFuo8o2u8SLLZLjolYDmDP7SzL0YfYI'




auth = tweepy.OAuthHandler(consumer_key, consumer_secret)

auth.set_access_token(access_token, access_token_secret)




api = tweepy.API(auth)




public_tweets = api.home_timeline()

for tweet in public_tweets:

    print(tweet.text)

طبیعتا کلیدها و توکن های شما با من متفاوت خواهد بود بنابراین مقادیر مربوط به حساب خود را وارد کنید.

هشدار: من کلیدهای بالا را فقط و فقط به جهت ارائه مثال آورده ام. شما نباید تحت هیچ شرایطی کلیدهای خود را با کسی به اشتراک بگذارید چرا که می توانند حساب شما را به دست بگیرند.

در مرحله بعدی از متد api در پکیج tweepy استفاده کرده ایم تا در API توییتر احراز هویت کنیم. از این قسمت به بعد می توانیم با استفاده از متد home_timeline به تمام توییت های موجود در timeline خودمان (همان صفحه فید شخصی) دسترسی داشته باشیم بنابراین با یک حلقه for بین آن ها گردش می کنیم و متن هر کدام از این توییت ها را نشان می دهیم. زمانی که این کد را اجرا کنید توییت های موجود در تایم لاین خود را در کنسول دریافت خواهید کرد. شاید بپرسید چه تعداد از توییت های موجود در تایم لاین را می گیریم؟ متد home_timeline دقیقا ۲۰ توییت اول (جدید ترین توییت ها) را برای شما برمی گرداند.

در ضمن در صورتی که بخواهید اطلاعات حساب خودتان را دریافت کنید باید از متد me استفاده کنید:

import tweepy




consumer_key = 'cChZNFj6T5R0TigYB9yd1w'

consumer_secret = 'PbKfYqSryyeKDWz4ebtY3o5ogNLG11WJuZBc9fQrQo'

access_token = 'NPcudxy0yU5T3tBzho7iCotZ3cnetKwcTIRlX0iwRl0'

access_token_secret = 'veNRnAWe6inFuo8o2u8SLLZLjolYDmDP7SzL0YfYI'




auth = tweepy.OAuthHandler(consumer_key, consumer_secret)

auth.set_access_token(access_token, access_token_secret)




api = tweepy.API(auth)




print(api.me())

با اجرای این کد اطلاعات حساب شخصی خودتان را دریافت خواهید کرد. اگر فقط نام حساب را بخواهید بدین شکل عمل می کنیم:

api = tweepy.API(auth)

user = api.me()




print(user.name)

خصوصیت های دیگر در documentation پکیج tweepy موجود است و می توانید آن را چک کنید.

عملیات follow در ربات توییتر

برای تمرین API توییتر می خواهیم در این قسمت رباتی را بسازیم که فالو بک انجام می دهد. یعنی چه؟ یعنی زمانی که فردی حساب ما را دنبال (follow) کرد، ما نیز به صورت خودکار آن را فالو کنیم. برای شروع باید در شیء Cursor از پکیج tweepy گردش کنیم. آیا می دانید cursor چیست؟ اگر قرار باشد به محض اتصال به API توییتر تمام داده های حساب خود را دریافت کنیم، مجبور به دانلود حجم بسیار سنگینی می شویم و از طرفی سرور های توییتر نیز باید چنین بار کاری را تحمل کنند. راه حل مناسب در این قسمت بدین شکل است که از یک شیء cursor استفاده کنیم. این شیء به جای آنکه مطالب را یکجا برای ما ارسال کند آن ها را به صورت بخش بخش به ما می دهد (دقیقا مانند pagination) تا به مشکل برخورد نکنیم. یک کد نمونه برای استفاده از cursor به شکل زیر است:

import tweepy




consumer_key = 'cChZNFj6T5R0TigYB9yd1w'

consumer_secret = 'PbKfYqSryyeKDWz4ebtY3o5ogNLG11WJuZBc9fQrQo'

access_token = 'NPcudxy0yU5T3tBzho7iCotZ3cnetKwcTIRlX0iwRl0'

access_token_secret = 'veNRnAWe6inFuo8o2u8SLLZLjolYDmDP7SzL0YfYI'




auth = tweepy.OAuthHandler(consumer_key, consumer_secret)

auth.set_access_token(access_token, access_token_secret)




api = tweepy.API(auth)




for follower in tweepy.Cursor(api.followers).items():

    print(follower.name)

ما با صدا زدن Cursor و سپس پاس دادن منبع مورد نظر (فالوئرها، توییت ها، فالویینگ ها و غیره) به آن منابع دسترسی خواهیم داشت. البته برای دریافت هر کدام از آن ها باید متد items را نیز صدا بزنیم تا آن آیتم را به صورت کامل درون حلقه خود دریافت کنیم. این کد از نظر عملکرد به درستی کار می کند اما آیا می توانید مشکل منطقی آن را تشخیص بدهید؟ اکثر API هایی که با آن ها تعامل دارید دارای قابلیتی به نام Rate limiting (به معنی «محدود کننده نرخ») هستند. توجه داشته باشید که در هنگام تعامل با API توییتر، به سرور های آن متصل می شویم و از آن ها کار می خواهیم. طبیعتا دستوری که ما به این سرور ها می دهیم برای توییتر هزینه خواهد داشت بنابراین تعداد درخواست های ما بر ثانیه (نرخ درخواست ها) محدودیت خاص خودشان را دارند. در صورتی که از این محدودیت فراتر بروید توییتر درخواست های شما را قطع خواهد کرد. در صورتی که به صفحه rate limit از documentation رسمی توییتر مراجعه کنیم با توضیحات زیر روبرو می شویم:

The maximum number of requests that are allowed is based on a time interval, some specified period or window of time. The most common request limit interval is fifteen minutes. If an endpoint has a rate limit of 900 requests/15-minutes, then up to 900 requests over any 15-minute interval is allowed.

این پاراگراف توضیح می دهد که توییتر خصوصیت rate limit را به چه شکلی پیاده سازی کرده است. به طور مثال اگر در قسمتی از جداول این صفحه نوشته شده باشد که rate limit حدود ۹۰۰ درخواست در ۱۵ دقیقه است یعنی در هر ۱۵ دقیقه می توانید حدود ۹۰۰ درخواست را ارسال کنید. توجه داشته باشید که توییتر برای هر endpoint خود یک rate limit یا نرخ محدودیت جداگانه دارد و این عدد برای تمام عملیات ها یکسان نیست. همچنین نسخه اول و دوم API توییتر از نظر نرخ محدودیت با یکدیگر تفاوت دارند. برای مطالعه نرخ های محدودیت در نسخه اول API توییتر به صفحه developer.twitter.com/en/docs/twitter-api/v1/rate-limits و برای نسخه دوم به صفحه developer.twitter.com/en/docs/twitter-api/rate-limits مراجعه نمایید.

بر اساس آنچه گفته شد باید کدهای خود را به شکل زیر تغییر بدهیم:

import tweepy

import time







consumer_key = 'cChZNFj6T5R0TigYB9yd1w'

consumer_secret = 'PbKfYqSryyeKDWz4ebtY3o5ogNLG11WJuZBc9fQrQo'

access_token = 'NPcudxy0yU5T3tBzho7iCotZ3cnetKwcTIRlX0iwRl0'

access_token_secret = 'veNRnAWe6inFuo8o2u8SLLZLjolYDmDP7SzL0YfYI'




auth = tweepy.OAuthHandler(consumer_key, consumer_secret)

auth.set_access_token(access_token, access_token_secret)




api = tweepy.API(auth)




def limit_handle(cursor):

  while True:

    try:

      yield cursor.next()

    except tweepy.RateLimitError:

      time.sleep(1000)







for follower in limit_handle(tweepy.Cursor(api.followers).items()):

    print(follower.name)

من در این کد ابتدا ماژول time را وارد کرده ام، سپس متدی به نام limit_handle را تعریف کرده ام. این متد cursor را دریافت می کند و در یک حلقه while آن را دائما اجرا می کند. با هر بار اجرای شدن limit_handle یک نفر از فالوئرهای خود را دریافت می کنیم و این روند ادامه خواهد داشت تا زمانی که به خطای RateLimitError برخورد کنیم. این خطا زمانی رخ می دهد که به rate limiter توییتر رسیده باشیم (بیش از حد مجاز درخواست ارسال کرده باشیم). در چنین حالتی متدی از ماژول time به نام sleep را صدا زده ام. متد sleep همانطور که از نامش مشخص است، اسکریپت ما به خواب می برد! یعنی به مقدار زمان تعیین شده توسط ما، اسکریپت را متوقف می کند. من در کد بالا ۱۰۰۰ میلی ثانیه را مشخص کرده ام بنابراین زمانی که توییتر جلوی درخواست های ما را بگیرد، یک ثانیه صبر خواهیم کرد و سپس ادامه می دهیم (متد next روی شیء cursor باعث حرکت به آیتم بعدی می شود). طبیعتا کد بالا تمام فالوئرهای ما را لیست می کند و اگر تعداد فالوئرهایتان زیاد باشد، این فرآیند طول خواهد کشید. در ضمن در این قسمت از کدها می توانید هر کار دیگری به جای پرینت کردن نامشان را نیز انجام بدهید. به طور مثال:

import tweepy

import time







consumer_key = 'cChZNFj6T5R0TigYB9yd1w'

consumer_secret = 'PbKfYqSryyeKDWz4ebtY3o5ogNLG11WJuZBc9fQrQo'

access_token = 'NPcudxy0yU5T3tBzho7iCotZ3cnetKwcTIRlX0iwRl0'

access_token_secret = 'veNRnAWe6inFuo8o2u8SLLZLjolYDmDP7SzL0YfYI'




auth = tweepy.OAuthHandler(consumer_key, consumer_secret)

auth.set_access_token(access_token, access_token_secret)




api = tweepy.API(auth)




def limit_handle(cursor):

  while True:

    try:

      yield cursor.next()

    except tweepy.RateLimitError:

      time.sleep(1000)







for follower in limit_handle(tweepy.Cursor(api.followers).items()):

    if follower.name == 'roxo':

        follower.follow()

        break

در اینجا گفته ام اگر کسی از بین فالوئرهای من نام roxo را دارد باید او را فالو کنیم. با اجرای اسکریپت بالا این فرد (در صورتی که در فالوئرهایتان وجود داشته باشد) فالو خواهد شد. حالا که با کلیت ربات آشنا شده اید بهتر است آن را به روشی بنویسیم که توییت های دارای عبارت خاصی را لایک کند.

لایک توییت ها بر اساس کلیدواژه

فرض کنید بخواهیم رباتی داشته باشیم که بر اساس کلیدواژه خاصی در توییت های ما، آن ها را لایک  کند! من ابتدا کد آماده را برایتان قرار می دهم و سپس خط به خط آن را بررسی می کنیم:

import tweepy

import time







consumer_key = 'cChZNFj6T5R0TigYB9yd1w'

consumer_secret = 'PbKfYqSryyeKDWz4ebtY3o5ogNLG11WJuZBc9fQrQo'

access_token = 'NPcudxy0yU5T3tBzho7iCotZ3cnetKwcTIRlX0iwRl0'

access_token_secret = 'veNRnAWe6inFuo8o2u8SLLZLjolYDmDP7SzL0YfYI'




auth = tweepy.OAuthHandler(consumer_key, consumer_secret)

auth.set_access_token(access_token, access_token_secret)




api = tweepy.API(auth)







def limit_handle(cursor):

    while True:

        try:

            yield cursor.next()

        except tweepy.RateLimitError:

            time.sleep(1000)







# for follower in limit_handle(tweepy.Cursor(api.followers).items()):

#     if follower.name == 'roxo':

#         follower.follow()

#         break




search_string = "python"

numberOfTweets = 2




for tweet in tweepy.Cursor(api.search, search_string).items(numberOfTweets):

    try:

        tweet.favorite()

        print('I liked the tweet')

    except tweepy.TweepError as e:

        print(e.reason)

    except StopIteration:

        break

همانطور که می بینید من کد قبلی را کامنت کرده ام تا با کد جدید ما مداخله نداشته باشد. در مرحله بعدی دو متغیر را داریم: search_string که عبارت جست و جو شده در توییت ها خواهد بود و numberOfTweets که تعداد توییت هایی است که می خواهیم بر این اساس لایک کنیم. حالا مثل همیشه یک حلقه for را نوشته ایم اما این بار باید api.search را به شیء cursor بدهیم تا به پکیج tweepy بگوییم که قصد جست و جو داریم. چه جست و جویی؟ جست و جوی رشته python یا همان  search_string که به عنوان آرگومان دوم پاس داده ایم. در نهایت items را صدا زده ایم و این بار numberOfTweets را نیز به آن پاس داده ایم تا فقط بین ۲ آیتم گردش کنیم. از آنجایی که هدف ما گردش بین ۲ توییت است، نیازی به استفاده از limit_handler نداریم و من هم از آن استفاده نکرده ام. ما درون این حلقه یک بلوک try & except داریم که tweet مورد نظر را favorite می کند (همان لایک کردن). همچنین قسمتی را برای دریافت خطا قرار داده ام و در نهایت StopIteration را داریم تا اگر به خطایی از نوع StopIteration برخورد کردیم از حلقه خارج شویم.

شما می توانید با مراجعه به API این کتابخانه و مطالعه متدهای مختلف، کارهای مختلفی را در این اسکریپت انجام بدهید. به طور مثال اگر بخواهیم به جای لایک کردن یک توییت آن را ریتوییت کنیم از متد retweet استفاده می کنیم:

import tweepy

import time







consumer_key = 'cChZNFj6T5R0TigYB9yd1w'

consumer_secret = 'PbKfYqSryyeKDWz4ebtY3o5ogNLG11WJuZBc9fQrQo'

access_token = 'NPcudxy0yU5T3tBzho7iCotZ3cnetKwcTIRlX0iwRl0'

access_token_secret = 'veNRnAWe6inFuo8o2u8SLLZLjolYDmDP7SzL0YfYI'




auth = tweepy.OAuthHandler(consumer_key, consumer_secret)

auth.set_access_token(access_token, access_token_secret)




api = tweepy.API(auth)







def limit_handle(cursor):

    while True:

        try:

            yield cursor.next()

        except tweepy.RateLimitError:

            time.sleep(1000)







# for follower in limit_handle(tweepy.Cursor(api.followers).items()):

#     if follower.name == 'roxo':

#         follower.follow()

#         break




search_string = "python"

numberOfTweets = 2




for tweet in tweepy.Cursor(api.search, search_string).items(numberOfTweets):

    try:

        tweet.retweet()

        print('Retweeted the tweet')

    except tweepy.TweepError as e:

        print(e.reason)

    except StopIteration:

        break

متدهای پرکاربرد tweepy

من چند متد از متدهای مشهور tweepy را برایتان مثال می زنم اما برای مطالعه بیشتر باید به documentation آن مراجعه کنید. برای فالو کردن یک فرد خاص بر اساس username از متد create_friendship استفاده می شود:

api.create_friendship("roxo")

برای بروز رسانی قسمت description در حساب کاربری خود از متد update_profile استفاده می کنیم:

api.update_profile(description="I like Python")

برای دریافت آخرین توییت در تایم لاین خود و لایک آن از کد زیر استفاده می کنیم:

tweets = api.home_timeline(count=1)

tweet = tweets[0]

print(f"Liking tweet {tweet.id} of {tweet.author.name}")

api.create_favorite(tweet.id)

برای گردش بین کاربران بلاک شده از روش زیر استفاده می کنیم:

for block in api.blocks():

    print(block.name)

همانطور که در کد بالا نیز مشاهده کردید، برای جست و جو بر اساس عبارتی خاص بین توییت ها از api.search استفاده می کنیم:

for tweet in api.search(q="Python", lang="en"):

    print(f"{tweet.user.name}:{tweet.text}")

برای دریافت ترندهای جهانی به شکل زیر عمل می کنیم:

trends_result = api.trends_place(1)

for trend in trends_result[0]["trends"]:

    print(trend["name"])

قابلیت stream در tweepy به شما اجازه می دهد که توییت ها را به صورت زنده و در لحظه تحت نظر داشته باشید. برای استفاده از این قابلیت و جست و جو در توییت هایی که حاوی کلمات python و django و tweepy هستند از روش زیر استفاده می کنیم:

import json

import tweepy




class MyStreamListener(tweepy.StreamListener):

    def __init__(self, api):

        self.api = api

        self.me = api.me()




    def on_status(self, tweet):

        print(f"{tweet.user.name}:{tweet.text}")




    def on_error(self, status):

        print("Error detected")




# Authenticate to Twitter

auth = tweepy.OAuthHandler("CONSUMER_KEY", "CONSUMER_SECRET")

auth.set_access_token("ACCESS_TOKEN", "ACCESS_TOKEN_SECRET")




# Create API object

api = tweepy.API(auth, wait_on_rate_limit=True,

    wait_on_rate_limit_notify=True)




tweets_listener = MyStreamListener(api)

stream = tweepy.Stream(api.auth, tweets_listener)

stream.filter(track=["Python", "Django", "Tweepy"], languages=["en"])

فرض کنید می خواهید هر کسی که شما را mention کرده است ابتدا لایک کرده و سپس فالو کنید. برای این کار می توانیم به شکل زیر عمل کنیم:

tweets = api.mentions_timeline()

for tweet in tweets:

    tweet.favorite()

    tweet.user.follow()

متدهای موجود در این کتابخانه بسیار زیاد هستند و نمونه کدهایی که برایتان قرار داده ام از پرکاربردترین متدهای موجود در آن است اما متدهای دیگر زیادی وجود دارد که در documentation اصلی توضیح داده شده اند.

تمام فصل‌های سری ترتیبی که روکسو برای مطالعه‌ی دروس سری پایتون حرفه‌ای توصیه می‌کند:
نویسنده شوید

دیدگاه‌های شما (1 دیدگاه)

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.

محمد
25 اردیبهشت 1400
سلام. من به ربات میخوام که توییت هایی که توسط من لایک میشه رو به صورت خودکار به کانال تلگرام خودم بفرسته. از نرم افزار ifttt استفاده کردم اما همه رو نمیفرسته. چند تا ربات هم پیدا کردم اما اکثرا تایم لاین من رو میفرستن و گزینه ای برای ارسال توییت های لایک شده توسط من رو ندارن. اگه هزینه ای هم داشته باشه پرداخت میکنم. ممنون میشم کمکم کنید

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.