2015-12-12 11 views
9

मैं किसी निश्चित विषय से संबंधित ट्वीट एकत्र करने के लिए निम्न कोड का उपयोग कर रहा हूं लेकिन सभी ट्वीट्स में मैंने 'स्थान' विशेषता निकाली है, कोई नहीं है। क्या मुझसे कुछ गलत हो रही है? इसके अलावा, कोड मौजूदा ट्वीट्स निकालने के लिए है और मैं और एपीआई समाधान स्ट्रीमिंग की जरूरत नहीं है स्ट्रीमिंग एपीआई के इस समाधान की तलाश में नहीं: https://www.quora.com/How-can-I-get-a-stream-of-tweets-from-a-particular-country-using-Twitter-APIएक ट्वीट का देश प्राप्त करने में सक्षम नहीं - Twython API

api = Twython(consumer_key, consumer_secret, access_key, access_secret) 

tweets       = [] 
MAX_ATTEMPTS     = 200 
COUNT_OF_TWEETS_TO_BE_FETCHED = 10000 
in_max_id = sys.argv[1] 
next_max_id = '' 
for i in range(0,MAX_ATTEMPTS): 

    if(COUNT_OF_TWEETS_TO_BE_FETCHED < len(tweets)): 
     break # we got 500 tweets... !! 

    #----------------------------------------------------------------# 
    # STEP 1: Query Twitter 
    # STEP 2: Save the returned tweets 
    # STEP 3: Get the next max_id 
    #----------------------------------------------------------------# 

    # STEP 1: Query Twitter 
    if(0 == i): 
     # Query twitter for data. 
     results = api.search(q="#something",count='100',lang='en',max_id=in_max_id,include_entities='true',geo= True) 
    else: 
     # After the first call we should have max_id from result of previous call. Pass it in query. 
     results = api.search(q="#something",include_entities='true',max_id=next_max_id,lang='en',geo= True) 

    # STEP 2: Save the returned tweets 
    for result in results['statuses']: 

     temp = "" 
     tweet_text = result['text'] 
     temp += tweet_text.encode('utf-8') + " " 
     hashtags = result['entities']['hashtags'] 
     for i in hashtags: 
      temp += i['text'].encode('utf-8') + " " 
     print result 
     #temp += i["place"]["country"] + "\n" 
     #output_file.write(temp) 




    # STEP 3: Get the next max_id 
    try: 
     # Parse the data returned to get max_id to be passed in consequent call. 
     next_results_url_params = results['search_metadata']['next_results'] 
     next_max_id  = next_results_url_params.split('max_id=')[1].split('&')[0] 
    except: 
     # No more next pages 
     break 
+0

क्या आपको कोई त्रुटि मिल रही है? यदि हां, तो किस तरह की त्रुटि? – kmario23

+0

कोई त्रुटि नहीं। बस "स्थान" विशेषता खाली है! – user3667569

+0

मेरे कोड के अनुसार अपना कोड संपादित करें, तो इसे ठीक काम करना चाहिए। – kmario23

उत्तर

1

तो place क्षेत्र सभी ट्वीट के लिए एक चाहिए कि आप अनुप्रयोग होगा प्रक्रिया, फिर आप यह सुनिश्चित करने के लिए किसी भी स्थान पर अपनी खोज को सीमित कर सकते हैं कि सभी परिणाम निश्चित रूप से होंगे।

आप किसी क्षेत्र के भीतर अपनी खोज को सीमित करने के लिए geocode (अक्षांश, देशांतर, त्रिज्या [किमी/मील]) पैरामीटर सेट करके ऐसा कर सकते हैं। Twython के माध्यम से

एक उदाहरण इस तरह के अनुरोध है:

geocode = '25.032341,55.385557,100mi' 
api.search(q="#something",count='100',lang='en',include_entities='true',geocode=geocode) 
+0

इस तरह काम नहीं कर रहा है कि मुझे कम परिणाम मिल रहे हैं :( – user3667569

+0

यह उत्तर तकनीकी रूप से सही नहीं है। यह फ़िल्टर केवल यह सुनिश्चित करता है कि परिणाम एक स्थान निर्दिष्ट होने की अधिक संभावना है। –

+0

यह उत्तर भी सही नहीं है क्योंकि 'खोज/ट्वीट' वास्तव में 'प्लेस' टैग वापस करता है। हालांकि, 'प्लेस' टैग लगभग हमेशा खाली होता है। सभी ट्वीट्स में से केवल 1% में 'प्लेस' टैग में डेटा होता है। – Jonas

0

नहीं सभी ट्वीट्स tweet_text, जगह, देश, भाषा आदि जैसे सभी क्षेत्रों है,

तो, KeyError निम्नलिखित दृष्टिकोण का उपयोग से बचने के लिए। अपने कोड को संशोधित करें ताकि जब आप देख रहे हैं key नहीं मिला है, तो डिफ़ॉल्ट मान लौटाया जाता है।

result.get('place', {}).get('country', {}) if result.get('place') != None else None 

यहाँ, इसके बाद के संस्करण लाइन का अर्थ है "कुंजी place प्राप्त करते समय यदि वह मौजूद है के बाद कुंजी country के लिए खोज, अन्यथा लौट None"

+0

उत्तर के लिए धन्यवाद लेकिन जैसा कि मैंने लिखा है कि कोई त्रुटि नहीं है। बस यह है कि स्थान विशेषता कोई नहीं है। इसलिए धन्यवाद लेकिन यह सहायक नहीं होगा इस मामले। – user3667569

+1

आप कुछ भी गलत नहीं कर रहे हैं। आपको और अधिक ट्वीट्स प्राप्त करने की आवश्यकता है। मैंने ~ 50k ट्वीट्स का निरीक्षण किया, लेकिन मैं केवल सौ "जगह" फ़ील्ड ढूंढने में सक्षम था, बाकी "शून्य" थे। प्रसंस्करण से पहले JSON लाया। – kmario23

0

kmario सही है। अधिकांश ट्वीट्स में यह जानकारी नहीं होती है, लेकिन एक छोटा प्रतिशत करते हैं। एक स्थान खोज करना इस मौके को बढ़ाएगा उदा। https://api.twitter.com/1.1/search/tweets.json?q=place%3Acba60fe77bc80469&count=1

"place": { 
    "id": "cba60fe77bc80469", 
    "url": "https://api.twitter.com/1.1/geo/id/cba60fe77bc80469.json", 
    "place_type": "city", 
    "name": "Tallinn", 
    "full_name": "Tallinn, Harjumaa", 
    "country_code": "EE", 
    "country": "Eesti", 
    "contained_within": [], 
    "bounding_box": { 
     "type": "Polygon", 
     "coordinates": [ 
     [ 
      [ 
      24.5501404, 
      59.3518286 
      ], 
      [ 
      24.9262886, 
      59.3518286 
      ], 
      [ 
      24.9262886, 
      59.4981855 
      ], 
      [ 
      24.5501404, 
      59.4981855 
      ] 
     ] 
     ] 
    }, 
    "attributes": {} 
    }, 
1

संक्षिप्त उत्तर है, नहीं, आप कुछ भी गलत नहीं कर रहे हैं। कारण सभी place टैग खाली हैं क्योंकि सांख्यिकीय रूप से वे डेटा रखने में बहुत संभावना नहीं हैं। सभी ट्वीट्स में से केवल 1% में उनके place टैग में डेटा होता है। ऐसा इसलिए है क्योंकि उपयोगकर्ता शायद ही कभी अपने स्थान को ट्वीट करते हैं। स्थान डिफ़ॉल्ट रूप से बंद है।

100 या अधिक ट्वीट डाउनलोड करें और आपको शायद place टैग डेटा मिलेगा।

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