2015-12-03 29 views
10

Próbuję użyć tweepy do pobierania tweetów za pomocą lokalizacji tweet, a nie według lokalizacji użytkownika. Obecnie mogę pobierać tweety z lokalizacją użytkownika, ale nie mogę uzyskać lokalizacji tweetów, nawet jeśli geo_enabled zwraca True.Skreślić tweety przez tweet lokalizację i lokalizację użytkownika

Załóżmy na przykład, że user_a pochodzi z Nowego Jorku, ale tweetuje z Kalifornii. Chcę zarówno lokalizację użytkownika, Nowy Jork, jak i lokalizację tweet w Kalifornii.

Kod:

import tweepy 
from tweepy import Stream 
from tweepy import OAuthHandler 
from tweepy.streaming import StreamListener 
import pandas as pd 
import json 
import csv 
import sys 
reload(sys) 
sys.setdefaultencoding('utf8') 

ckey = 'key' 
csecret = 'secret' 
atoken = 'token' 
asecret = 'secret' 
#csvfile = open('StreamSearch.csv','a') 
#csvwriter = csv.writer(csvfile, delimiter = ',') 

class StdOutListener(StreamListener): 
    def __init__(self, api=None): 
     super(StdOutListener, self).__init__() 
     self.num_tweets = 0 

    def on_data(self, data): 
     self.num_tweets += 1 
     if self.num_tweets < 5: #Remove the limit of no. of tweets to 5 
      print data 
      return True 
     else: 
      return False 

    def on_error(self, status): 
     print status 


l = StdOutListener() 
auth = OAuthHandler(ckey, csecret) 
auth.set_access_token(atoken, asecret) 
stream = Stream(auth, l) 
stream.filter(locations = [80.10,12.90,80.33,13.24]) #user location 

Wyjście

userLocation, userTimezone, Coordinates,GeoEnabled, Language, TweetPlace 
London,UK  Amsterdam     FALSE  en   null 
Aachen,Germany Berlin     TRUE  de   null 
Kewaunee Wi        TRUE  en   null 
Connecticut, Eastern Time (US & Canada) TRUE  en   null 
              TRUE  en   null 
Lahore, City of Gardens London   TRUE  en   null 
NAU class of 2018. Arizona    FALSE  en   null 
              FALSE  en   null 
    Pacific Time (US & Canada)   FALSE  en   null 

Powyższe dane wyjściowe jest czyszczony wersję masywnych danych. Mimo że włączone jest Geolocation, nie mogę uzyskać lokalizacji tweet ani co-ordinates.

+0

To bardzo szerokie pytanie, daj nam znać, co próbowałeś. – SIslam

+0

@SIslam Zawarte kod i wyjście –

+1

Mogą być związane- http://stackoverflow.com/a/16892093/4065350 –

Odpowiedz

6
  1. Dlaczego tweety z numerem geo_enabled == True nie podają lokalizacji na Twitterze?

Zgodnie z this, jeśli miejscem lub współrzędnymi jest Brak, oznacza to, że użytkownik nie zezwolił na dostęp do tego tweeta. Użytkownicy z włączonym geo_enabled nadal muszą udzielać wyraźnej zgody na wyświetlenie ich dokładnej lokalizacji. Również documentation stwierdza:

geo_enabled: Kiedy prawda, wskazuje, że użytkownik włączył możliwość z geotagging swoich tweetów. To pole musi być prawdziwe, aby bieżący użytkownik mógł dołączyć dane geograficzne podczas korzystania ze statusu/aktualizacji POST.

  1. Jak filtrować według lokalizacji tweetów? Check here

Jeśli filtrowane według lokalizacji, zaledwie Tweety objęte żądanych ograniczających skrzynek zostaną włączone, pole lokalizacja użytkownika nie jest używana do filtrowania tweets. Jeśli współrzędne i miejsce są puste, tweet nie przejdzie przez filtr.

#filter all tweets from san francisco 
myStream.filter(location= [-122.75,36.8,-121.75,37.8]) 
  1. Jak filtrować według lokalizacji użytkownika i lokalizacji tweeta?

Możesz przechwycić tweety z filtra, a następnie sprawdzić lokalizację autorów, aby dopasować je do obszaru zainteresowania.

class StdOutListener(StreamListener): 
    def __init__(self, api=None): 
     super(StdOutListener, self).__init__() 
     self.num_tweets = 0 

    def on_data(self, data): 
    #first check the location is not None 
     if status.author.location and 'New York' in status.author.location: 
      self.num_tweets += 1 
      print data 
     if self.num_tweets < 5: #Remove the limit of no. of tweets to 5    
      return True 
     else: 
      return False 
    def on_error(self, status): 
     print status 
  1. Jak nie ograniczamy się do filtrów API Twittera?

Zapamiętaj filtr pozwala wszystkie tweety tak długo, jak przechodzi jeden z parametrów, więc jeśli chcesz być bardziej restrykcyjne tylko zawierają klauzule warunkowe w def on_data(self, data) jak ja w (3) dla lokalizacji autora.