2015-12-12 12 views
9

特定のトピックに関するツイートを収集するのに、以下のコードを使用していますが、「場所」属性を抽出したすべてのツイートにNoneがあります。私は何か間違っているのですか?また、コードは既存のツイートを抽出するためのものであり、Iは、APIソリューションをストリーミングし、ストリーミングAPIのこの解決策を探していない必要がありません:placeフィールドは、そのアプリするすべてのつぶやきのためのMUSTである場合https://www.quora.com/How-can-I-get-a-stream-of-tweets-from-a-particular-country-using-Twitter-APITweet - 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

あなたが検索結果を確実に取得できるように、場所を限定して検索することができます。

geocode(緯度、経度、半径[km/mi])パラメータを設定すると、地域内の検索を制限できます。 Twython経由

例そのような要求は、次のとおりです。

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

私は結果がより少ない結果を得ています:( – user3667569

+0

この回答は技術的に正しいものではありません。このフィルタは結果がより多くの場所に割り当てられるようにします。 –

+0

実際に 'search/tweet' 'place'タグは返されますが、' place'タグはほとんど常に空です。 'place'タグにデータがあるのは約1%です。 – Jonas

0

は、すべてのツイートはKeyErrorは、次のアプローチを使用を避けるために、それでなどtweet_text、場所、国、言語などのすべてのフィールド、

を持っているわけではありません。探しているkeyが見つからない場合は、デフォルト値が返されるようにコードを修正してください。

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

はここで、上記の行は、「そう、それが存在する場合は、キーplaceを取得した後、キーcountryを検索None戻る」

+0

答えはありがたいですが、私が書いたように、エラーはありません。その場所の属性はNONEです。だから、ありがたいですが、それは役に立ちません。このケース。 – user3667569

+1

あなたは間違ったことはしていません。あなたはより多くのつぶやきを得る必要があります.50kのつぶやきを調べましたが、私は100の "場所"フィールドしか見つけられず、残りは "null"でした。処理前に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タグデータが見つかります。

関連する問題