Konwertuje tweety z Twittera na punkty?

14

Przeprowadziłem badania nad użyciem R do dataminowania Twittera, ale tak naprawdę nie znalazłem odpowiedzi ani przyzwoitego samouczka na moje pytanie.

Interesuje mnie pobieranie tweetów z Twittera z określonym hashtagiem w określonym czasie i wykreślanie lokalizacji tych tweetów na mapie w QGIS lub ArcMap.

Wiem, że tweety mogą mieć powiązaną z nimi geolokalizację, ale w jaki sposób mam wyodrębnić te informacje?

Bradley_Jay
źródło
Może to pomóc: mike.teczno.com/notes/streaming-data-from-twitter.html Przyznaję, że nie przeczytałem wszystkiego, ale wygląda na to, że pokazują, jak uzyskać lokalizację każdego z tweetów.
ianbroad
1
wygląda na to, że możesz stracić tagi produktu „r”, „qgis” i „arcgis”, ponieważ wystarczy wyodrębnić współrzędne z API Twittera. Gdy zdobędziesz te informacje, dodasz punkty do dowolnego produktu przy użyciu jego standardowej funkcjonalności
Stephen Lead
Błąd 401 nadchodzi po uruchomieniu kodu.
shikhar

Odpowiedzi:

22

Znalazłem sposób, używając czysto Pythona, aby uzyskać współrzędne dla tweetów za pomocą filtru słów. Nie wydaje się, aby wiele osób dołączało lokalizację za pomocą swoich tweetów.

To może nie być to, czego szukasz, ponieważ są to dane przesyłane strumieniowo na żywo. Możesz to przetestować, umieszczając unikalne słowo filtrujące, a następnie tweetując je ze swojego konta na Twitterze. Zobaczysz swój tweet pojawiający się w Pythonie prawie natychmiast. Byłoby to całkiem fajne do użycia na wielkie wydarzenie.

Musisz zainstalować Tweepy .

pip install tweepy

I zdobądź klucz API Twittera .

Następnie możesz użyć tego skryptu jako szablonu:

import json
from tweepy import Stream
from tweepy import OAuthHandler
from tweepy.streaming import StreamListener

#Enter Twitter API Key information
consumer_key = ''
consumer_secret = ''
access_token = ''
access_secret = ''

file = open("C:\\Output.csv", "w")
file.write("X,Y\n")

data_list = []
count = 0

class listener(StreamListener):

    def on_data(self, data):
        global count

        #How many tweets you want to find, could change to time based
        if count <= 2000:
            json_data = json.loads(data)

            coords = json_data["coordinates"]
            if coords is not None:
               print coords["coordinates"]
               lon = coords["coordinates"][0]
               lat = coords["coordinates"][1]

               data_list.append(json_data)

               file.write(str(lon) + ",")
               file.write(str(lat) + "\n")

               count += 1
            return True
        else:
            file.close()
            return False

    def on_error(self, status):
        print status

auth = OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_secret)
twitterStream = Stream(auth, listener())
#What you want to search for here
twitterStream.filter(track=["Halloween"])

Sprawdź również tę dokumentację z Twittera, pokazuje ona, co możesz umieścić w filtrze.

Oto wynik umieszczenia filtra przez kilka minut jako „Halloween”:

wprowadź opis zdjęcia tutaj

A do diabła, oto pierwsze 2000 tweetów, które wspominały Halloween!

http://i.stack.imgur.com/bwdoP.png wprowadź opis zdjęcia tutaj

Wesołego Halloween!

ianbroad
źródło
Byłoby to w 100% tym, czego szukałem, jeśli pozwoliłoby mi to również przeczesywać starsze tweety. Będę się tym bawić i zobaczę, co mogę wymyślić. Dziękuję Ci bardzo!
Bradley_Jay
@Bradley_Jay Nie ma problemu. Zgodnie z tym, Twitter tak naprawdę nie udostępnia starszych tweetów. stackoverflow.com/questions/1662151/…
ianbroad
Możesz także filtrować za pomocą obwiedni zamiast „śledzić”, np. Lokalizacje = [- 180, -90,180,90]
Matt