2013-01-24 15 views
5

मुझे यह त्रुटि क्यों मिल रही है? और यहां मैं स्ट्रीमिंग एपीआई को कैसे कॉल करता हूं।GAE पर ट्विटर स्ट्रीमिंग

import tweepy 
import sys 

creds = json.loads(open('credential.json').read()) 
tw_consumer_key = creds['tw_consumer_key'] 
tw_consumer_secret = creds['tw_consumer_secret'] 
tw_access_token = creds['tw_access_token'] 
tw_access_token_secret = creds['tw_access_token_secret'] 

try: 
    auth = tweepy.OAuthHandler(tw_consumer_key, tw_consumer_secret) 
    auth.set_access_token(tw_access_token, tw_access_token_secret) 
    api = tweepy.API(auth) 
except Exception: 
    service = None 
    api = None  

# Query terms 
Q = "Better" 

class CustomStreamListener(tweepy.StreamListener): 
    def on_status(self, status): 
     try: 
      print "%s\n%s\n%s\n%s\n\n" % (status.text, 
             status.author.screen_name, 
             status.created_at, 
             status.source,) 
     except Exception, e: 
      print >> sys.stderr, 'Encountered Exception:', e 
      pass 

    def on_error(self, status_code): 
     print >> sys.stderr, 'Encountered error with status code:', status_code 
     return True # Don't kill the stream 

    def on_timeout(self): 
     print >> sys.stderr, 'Timeout...' 
     return True # Don't kill the stream 



class LiveStream(webapp2.RequestHandler): 
    def get(self): 
     streaming_api = tweepy.streaming.Stream(auth, CustomStreamListener(), timeout=60) 
     self.response.out.write(streaming_api.filter(track=Q)) 

शायद GAE द्वारा कारण सॉकेट अनुमति नहीं है, मुझे यकीन है कि कैसे क्वेरी शब्द लागू करने के लिए विशिष्ट फ़िल्टर्ड स्ट्रीमिंग ट्वीट्स पाने के लिए नहीं कर रहा हूँ। कोड के इस हिस्से के साथ मेरा उद्देश्य नामित कीवर्ड के साथ लाइव स्ट्रीम प्राप्त करना है। यदि कोई वैकल्पिक तरीका है, तो कृपया गाइड करें।

+0

कुछ ने कहा कि Google ने हमें GAE में सॉकेट का उपयोग करने की अनुमति नहीं दी है, उदाहरण के साथ कोई वैकल्पिक तरीका है, कृपया मार्गदर्शन करें। धन्यवाद – 1myb

उत्तर

3

App इंजन पर, httplib कनेक्शन (और urllib) गूगल URL को प्राप्त सेवा का उपयोग करेगा: इसके बजाय, Stream निर्माता को secure = False पैरामीटर जोड़कर एक असुरक्षित कनेक्शन का प्रयास करें। URL Fetch service का मतलब है अन्य सर्वर (ऐप इंजन सेवारत उदाहरण नहीं) अनुरोध करते हैं और ऐप इंजन इंस्टेंस को प्रतिक्रिया वापस लौटाते हैं, प्रक्रिया के बजाए एक सॉकेट खोलने के बजाय।

मेरा मानना ​​है कि आप देख रहे हैं कि GAE पर चल रहे प्रेजेंटप्लिब संस्करण टाइमआउट सेट करने के लिए उपयोग किए जाने वाले सॉक विशेषता प्रदान नहीं करता है। हालांकि मूलभूत समस्या यह है कि स्ट्रीम प्राप्त करने का कोई तरीका नहीं है, प्रतिक्रिया पूरी होने तक आपको कोई भी परिणाम ऐप इंजन में वापस नहीं मिलेगा। मैंने परीक्षण नहीं किया है कि यह कैसे विफल रहता है, लेकिन मुझे उम्मीद है कि आपको यूआरएल सेवा से डेडलाइन एक्स्प्लेड एरर मिलेगा क्योंकि ट्विटर स्ट्रीमिंग प्रतिक्रिया बंद नहीं करेगा।

इस समय GAE पर स्ट्रीम प्राप्त करने के लिए कोई वैकल्पिक तरीका नहीं है। यह बैकएंड पर आउटबाउंड सॉकेट समर्थन के साथ काम कर सकता है। सॉकेट समर्थन वर्तमान में केवल परीक्षकों के लिए उपलब्ध है।

+0

उत्तर के लिए धन्यवाद नहीं है। क्या मुझे पता है कि मैं उनके परीक्षक कैसे बन सकता हूं या परीक्षक खाता प्राप्त कर सकता हूं? क्योंकि धारा आवश्यकता का हिस्सा है, जो अनिवार्य है .. क्या इसे प्राप्त करने के लिए वास्तव में कोई वैकल्पिक तरीका नहीं है? – 1myb

+2

[यहां] (https://docs.google.com/spreadsheet/viewform?formkey=dF9QR3pnQ2pNa0dqalViSTZoenVkcHc6MQ#gid=0) आउटबाउंड सॉकेट के लिए साइन अप फॉर्म है। जैसा कि @tesdal ने कहा, वर्तमान में GAE पर दीर्घकालिक कनेक्शन रखने का कोई तरीका नहीं है। मैंने कार्य कतार से उच्च समय सीमा के साथ सरल UrlFetches का उपयोग कर एप्स देखा है, सोचा। लेकिन अगर आप इसे काम करेंगे, तो यह ट्विटर की स्ट्रीम एपीआई नीतियों के खिलाफ है। –

+0

यदि आप एक ही उदाहरण से स्ट्रीम को संभालने में सक्षम होंगे, तो आप उस उदाहरण को ईसी 2 या इसी तरह के चलाने पर विचार कर सकते हैं, और जीएई के साथ संचार कर सकते हैं। इस बात पर निर्भर करता है कि आप किस डेटा का उपयोग करने जा रहे हैं। – tesdal

1

मेरा मानना ​​है कि जीएई fansplib.HTTPSConnection का समर्थन नहीं करता है।

class LiveStream(webapp2.RequestHandler): 
    def get(self): 
     streaming_api = tweepy.streaming.Stream(auth, CustomStreamListener(), timeout=60, secure=False) 
     self.response.out.write(streaming_api.filter(track=Q)) 
+0

कोई भाग्य दोस्त नहीं। अभी भी HTTP विशेषता के लिए एक ही वापसी: विशेषता त्रुटि: HTTPConnection उदाहरण में कोई विशेषता 'सॉक' – 1myb

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