2013-05-17 8 views
7

से अधिक है मैं ट्विटर एपीआई से उपयोगकर्ता के अनुयायियों को लाने के लिए रूबी मणि ट्विटर (https://github.com/sferik/twitter) का उपयोग करने की कोशिश कर रहा हूं।रूबी ट्विटर जेम, दर सीमा

प्रलेखन के अनुसार (https://dev.twitter.com/docs/api/1/get/followers/ids), ट्विटर एक अनुरोध में 5000 उपयोगकर्ताओं को देता है। प्रति दर सीमा सेटिंग्स चहचहाना के रूप में मुझे 15 मिनट (https://dev.twitter.com/docs/rate-limiting/1.1/limits)

समस्या प्रति 15 कॉल करने के लिए अनुमति देता है:

जब मैं और अधिक से अधिक 75000 अनुयायियों (5000 * 15) के साथ एक उपयोगकर्ता के अनुयायियों को पुनः प्राप्त मैं एक ' दर सीमा 'त्रुटि से अधिक है।

जब मैं मणि विधि ट्विटर.फॉलोर्स_आईडी (उपयोगकर्ता) उपयोगकर्ता का उपयोग करता हूं, तो मुझे सभी अनुयायी स्वचालित रूप से कर्सर के साथ 5000 की बाल्टी में नहीं मिलता है। मुझे लगता है कि मणि आंतरिक रूप से इसका ख्याल रखता है, और इसलिए मैं इन अनुरोधों को नियंत्रित या देरी करने में असमर्थ हूं।

मणि दस्तावेज में दर सीमित (https://github.com/sferik/twitter#rate-limiting) का एक उदाहरण है, लेकिन मुझे नहीं पता कि यह पहले से पुनर्प्राप्त उपयोगकर्ताओं का ख्याल रखता है या फिर ताजा से शुरू होता है।

मेरा प्रश्न यह है कि मैं सभी अनुयायियों को पाने के लिए कैसे और कब एक थ्रॉटलिंग तंत्र लागू करता हूं?

सादर

+0

क्या आपने कभी यह पता लगाया है? मैं भी स्टंप हो गया हूं :( – Gregology

+0

@ ग्रेगोलॉजी नंबर, मैं सक्षम नहीं हूं। मैंने ऐप के लिए RoR से PHP तक स्विच किया था। PHP बहुत आसान है। –

उत्तर

0

ट्विटर मणि जो lib/ट्विटर/API/utils.rb

https://github.com/sferik/twitter/blob/master/lib/twitter/api/utils.rb

def cursor_from_response_with_user(collection_name, klass, request_method, path, args, method_name) 
    puts "sleeping 60" 
    sleep 60 
    arguments = Twitter::API::Arguments.new(args) 
    merge_user!(arguments.options, arguments.pop || screen_name) unless arguments.options[:user_id] || arguments.options[:screen_name] 
    cursor_from_response(collection_name, klass, request_method, path, arguments.options, method_name) 
end 

प्रत्येक कर्सर प्रतिक्रिया जाएगा में स्थित है में cursor_from_response_with_user पद्धति के लिए एक नींद आदेश जोड़ें कम से कम 60 सेकंड लें ताकि आप 15 मिनट प्रति 15 अनुरोधों पर नहीं जाएंगे। यह एक हैक का थोड़ा सा है लेकिन यह तब तक काम करेगा जब तक कि इस समस्या को 75 के + follower_ids के लिए हल नहीं किया जाता है।

6

इस समस्या के लिए कामकाज बहुत अच्छी तरह से समझाया गया है here

MAX_ATTEMPTS = 3 
num_attempts = 0 
begin 
    num_attempts += 1 
    retweets = Twitter.retweeted_by_user("sferik") 
rescue Twitter::Error::TooManyRequests => error 
    if num_attempts <= MAX_ATTEMPTS 
    # NOTE: Your process could go to sleep for up to 15 minutes but if you 
    # retry any sooner, it will almost certainly fail with the same exception. 
     sleep error.rate_limit.reset_in 
    retry 
    else 
    raise 
    end 
end 
+0

इसमें वास्तव में दर सीमा को मारना शामिल है, जिसमें एक सीमा है ट्विटर पर [blacklisted] प्राप्त करने का जोखिम (https://dev.twitter.com/rest/public/rate-limiting#Blacklisting) यदि यह बहुत अधिक होता है। एक बेहतर दृष्टिकोण [कार्यों में] होता है (https://github.com/sferik/twitter/pull/626)। –

संबंधित मुद्दे