तो, सबसे पहले, मुझे एहसास हुआ कि ट्विटर दर सीमाओं को संभालने के संबंध में कई प्रश्न हैं। मुझे पता नहीं क्यों, लेकिन उनमें से कोई भी जो मुझे अब तक मेरे लिए काम नहीं मिला है।

मैं ट्वीपी का उपयोग कर रहा हूँ। मैं एक उपयोगकर्ता के अनुयायियों के सभी अनुयायियों की सूची प्राप्त करने का प्रयास कर रहा हूं। जैसा कि अपेक्षित था, मैं ट्विटर की दर सीमा के कारण सब कुछ एक बार में नीचे नहीं खींच सकता। मेरे पास ट्वीपी वी 3.5 स्थापित है और इस प्रकार मैं http://docs.tweepy का जिक्र कर रहा हूं। org/hi/v3.5.0/api.html. मेरे द्वारा उपयोग किए जाने वाले मूल उपयोगकर्ता के अनुयायियों की सूची प्राप्त करने के लिए:

auth = tweepy.OAuthHandler(consumer_key,consumer_secret)
auth.set_access_token(access_token, access_secret)
api = tweepy.API(auth)

followerIDs = []
for page in tweepy.Cursor(api.followers_ids, screen_name=originatingUser, wait_on_rate_limit = True, wait_on_rate_limit_notify = True).pages():
    followerIDs.extend(page)

अनुयायी = api.lookup_users (अनुयायी)

यह थोड़ी देर के लिए काम करता है लेकिन जल्दी से बदल जाता है:

tweepy.error.TweepError: [{u'message': u'Rate limit exceeded', u'code': 88}]

मेरा सिद्धांत, इस तरह से कुछ का उपयोग करके प्रत्येक अनुयायी के लिए प्रत्येक उपयोगकर्ता के अनुयायियों को पुनः प्राप्त करना होगा:

for followerID in followerIDs:
        for page in tweepy.Cursor(api.followers_ids, id=followerID, wait_on_rate_limit = True, wait_on_rate_limit_notify = True).pages():
                followerIDs.extend(page)

मेरे पास दूसरी समस्या यह है कि जब मैं उपयोगकर्ता नाम देखने की कोशिश कर रहा हूं। इसके लिए, यह अनुयायियों को 100 के समूहों में विभाजित करने के लिए itertools से ग्रूपर फ़ंक्शन का उपयोग करता है (api.lookup_users एक समय में केवल 100 आईडी स्वीकार कर सकते हैं) और उपयोग करें

followerIDs = grouper(followerIDs,100)
for followerGroup in followerIDs:
        followerGroup=filter(None, followerGroup)
        followers = api.lookup_users(followerGroup,wait_on_rate_limit = True)
        for follower in followers:
                print (originatingUser + ", " + str(follower.screen_name))

उसे एक अलग त्रुटि मिलती है, अर्थात्:

 TypeError: lookup_users() got an unexpected keyword argument 'wait_on_rate_limit'

जो मुझे भ्रमित करने वाला लग रहा है, क्योंकि ट्वीपी एपीआई सुझाव देता है कि यह एक स्वीकृत तर्क होना चाहिए।

मैं क्या गलत कर रहा हूँ के बारे में कोई विचार?

चीयर्स बेन।

3
Ben 16 मई 2016, 10:41

3 जवाब

मुझे पता है कि इसमें थोड़ी देर हो सकती है, लेकिन यहाँ जाता है।

आप wait_on_rate_limit तर्क को Cursor कंस्ट्रक्टर में पास करते हैं, जबकि ट्वीपी दस्तावेज़ कहता है कि इसे API() कंस्ट्रक्टर पर पास किया जाना चाहिए।

5
Kostas Drk 28 नवम्बर 2016, 19:08

wait_on_rate_limit argument को API() कंस्ट्रक्टर में पास किया जाना है। आपके कोड में ऐसा दिखेगा:

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

एक अन्य तर्क wait_on_rate_limit_notify भी है, जो आपको सूचित करता है कि ट्वीपी कब आपकी दर सीमा के ताज़ा होने की प्रतीक्षा कर रहा है। दोनों को जोड़ने से अंतत: रेखा बन जाएगी:

api = tweepy.API(auth,wait_on_rate_limit=True,wait_on_rate_limit_notify=True)
1
user10731160user10731160 9 फरवरी 2021, 11:22

जैसा कि यहां बताया गया है, ट्विटर एपीआई के लिए एक दर सीमा है: https://dev.twitter.com /आराम/सार्वजनिक/दर-सीमित

इसे पास करने का त्वरित समाधान दर सीमा त्रुटि को पकड़ना और अपने आवेदन को थोड़ी देर के लिए सोना और फिर वहीं जारी रखना हो सकता है जहां आपने छोड़ा था।

pages = tweepy.Cursor(api.followers_ids, id=followerID).pages()
while True:
    try:
        page = pages.next()
        followerIDs.extend(page)
    except TweepError:
        time.sleep(60 * 15)
        continue
    except StopIteration:
        break

चाल चलनी चाहिए। सुनिश्चित नहीं है कि यह आपकी अपेक्षा के अनुरूप काम करेगा लेकिन मूल विचार यह है।

0
Heval 17 मई 2016, 22:54
सही है। मैं उम्मीद कर रहा था कि कुछ ऐसा था जो मैं Wait_on_rate_limit चीज़ के साथ गलत कर रहा था। यह एक बहुत अधिक ... सुरुचिपूर्ण समाधान होगा। हालांकि इस समय इसके बारे में जाने का यही एकमात्र तरीका प्रतीत होता है।
 – 
Ben
19 मई 2016, 10:01
मेरे लिए एक समझदार दृष्टिकोण की तरह नहीं लगता - If an application abuses the rate limits, it will be blacklisted. Blacklisted apps are unable to get a response from the Twitter API
 – 
geotheory
21 मार्च 2017, 02:25