Jak pobierać dane z Twittera?
Twitter udostępnia dwa API do pobierania danych.
- API do odczytywania historycznych wiadomości pasujących do określonego wzorca,
- API do aktywnego nasłuchiwania strumienia wiadomości pasujących do określonego wzorca (otrzymujemy zaledwie wycinek całego API).
Omówimy poniżej oba API.
Autoryzacja z API Twittera
Aby móc automatycznie pobierać dane z Twittera należy ze strony https://apps.twitter.com pobrać klucze Access Token i Access Token Secret.
Następnie, używając funkcji setup_twitter_oauth() należy autoryzować program R do pobierania danych. Poniżej klucze są wykropkowane, należy pobrać własne klucze z www strony.
library(twitteR)
consumerKey <- "..................................."
consumerSecret <- "..................................."
access_token <- "..................................."
access_secret <- "..................................."
setup_twitter_oauth(consumerKey, consumerSecret, access_token, access_secret)
## [1] "Using direct authentication"
Czytanie z historii Twittera
Po autoryzacji można dane pobrać używając funkcji searchTwitter(). Pierwszy argument określa słowa kluczowe, które będą wyszukiwane. Drugi argument określa ile wiadomości ma być pobranych. Kolejne argumenty pozwalają na dookreślenie, czy wiadomości mają być pobierane z określonego okresu czasu, czy określonej lokalizacji.
Wynikiem funkcji searchTwitter() jest lista obiektów opisujących wiadomości. Do analizy wygodniej jest tą listę zamienić na tabelę danych. Można to zrobić funkcją twListToDF.
Poniższy przykład pobiera z Twittera 10 wiadomości zawierających słowo chopin. Następnie wynik zamienia na tabelę danych i wyświetla z tej tabeli trzy kolumny (numer, datę utworzenia i treść wiadomości).
library(twitteR)
tweets <- searchTwitter("chopin", n=10)
dftweets <- twListToDF(tweets)
dftweets[,c("id", "created", "text")]
## id created
## 1 703739618911502336 2016-02-28 00:32:54
## 2 703739332004216832 2016-02-28 00:31:46
## 3 703739324530081792 2016-02-28 00:31:44
## 4 703739032912732161 2016-02-28 00:30:34
## 5 703738659376373761 2016-02-28 00:29:05
## 6 703738344790839296 2016-02-28 00:27:50
## 7 703738246484914176 2016-02-28 00:27:27
## 8 703737940330070016 2016-02-28 00:26:14
## 9 703737600650059776 2016-02-28 00:24:53
## 10 703737487211032577 2016-02-28 00:24:26
## text
## 1 RT @PGENarodowy: Kings On Ice. Tribute to Chopin już za nami! Dziękujemy Wam za wspólną zabawę :-) https://t.co/W2qlCuMC7i
## 2 Relájense con \xed\xae\xba\xed\xb0\x97\xed\xae\xba\xed\xb0\x99\xed\xa0\xbc\xed\xbc\xb3 #chopin https://t.co/dzBLYJONrG
## 3 This Guy Perfectly Explains How to Recognize The Artist Of A Painting. He do indeed %%robert\xed\xa0\xbc\xed\xbe\x93\xed\xa0\xbd\xed\xb3\x9a\xed\xa0\xbc\xed\xbe\xb9\xed\xa0\xbc\xed\xbf\x9b\xed\xa0\xbc\xed\xbe\xa8\xed\xa0\xbc\xed\xbe\xa8 H/t @good_mewls https://t.co/D4dmLgo9el
## 4 Friday night spent sleeping with a sausage dog curled up under my bed. Saturday night and I'm listening to Chopin on Myleen Klass' show.
## 5 #Chopin : Variations sur "La ci darem la mano" - N.Goerner / Orch du 18è siècle / F.Brüggen .#classicalmusic
## 6 やっぱり、もうちょいお絵描き!モイ!iPhoneからキャス配信中 - / 少しだけお絵描き https://t.co/ka3JGQmy75
## 7 #INTL Suggest me the classic(s) instrument? Chopin, etc.
## 8 I liked a @YouTube video https://t.co/UkfHyvjzCb Chopin Sonata op.65 1st mvt
## 9 Chopin Funeral March (Arr. for Organ) https://t.co/K4pr8QkL6f 來自 @YouTube
## 10 Pour travailler, se concentrer et tout, Chopin c'grave un bon ami
Strumień wiadomości
Drugim sposobem pobierania danych z serwisu Twitter jest nasłuchiwanie przez określony okres czasu i zapisywanie wiadomości, które pasują do określonego wzorca.
Ten sposób pobierania danych jest możliwy dzięki pakietowi streamR.
Aby z niego skorzystać musimy użyć innego sposobu autoryzacji OAuth.
Funkcja handshake() wywołana z obiektu klasy OAuth otworzy stronę internetową z kluczem, dzięki któremu będzie można dokonać autoryzacji.
library(ROAuth)
requestURL <- "https://api.twitter.com/oauth/request_token"
accessURL <- "https://api.twitter.com/oauth/access_token"
authURL <- "https://api.twitter.com/oauth/authorize"
consumerKey <- ".............................."
consumerSecret <- ".............................."
my_oauth <- OAuthFactory$new(consumerKey=consumerKey,
consumerSecret=consumerSecret,
requestURL=requestURL, accessURL=accessURL, authURL=authURL)
my_oauth$handshake(cainfo = system.file("CurlSSL", "cacert.pem", package = "RCurl"))
Po wykonaniu autoryzacji można pobierać wiadomości korzystając z funkcji filterStream() z pakietu streamR.
Przez okres czasu określony w sekundach przez argument timeout zapisuje do pliku file wiadomości pasujące do wzorca track.
library(streamR)
filterStream(file="chopin.json",
track="chopin, konkurs",
timeout=5*60, oauth=my_oauth)
Capturing tweets...
Connection to Twitter stream was closed after 300 seconds with up to 41 tweets downloaded.
Po zebraniu danych można je następnie wczytać z pliku json do programu R z użyciem funkcji parseTweet(). Wczytuje ona wiadomości ze wskazanego pliku a następnie przekształca je do formatu ramki danych.
parsedTwees <- parseTweets("chopin.json", simplify = FALSE, verbose = TRUE)
parsedTwees[,c("id_str", "created_at", "text")]
id_str created_at
1 703746124276998145 Sun Feb 28 00:58:45 +0000 2016
2 703746342280159232 Sun Feb 28 00:59:37 +0000 2016
3 703746344213725185 Sun Feb 28 00:59:38 +0000 2016
4 703746680345067521 Sun Feb 28 01:00:58 +0000 2016
text
1 Frédéric Chopin - Prelude in E-Minor (op.28 no. 4) https://t.co/EdwzCFZedd
2 Abbey Simon / Chopin: 3 Waltzes, Op. 64: No. 1 in D-Flat Major "Minute"
3 SprintAir to base Saab 340 in Radom from April - SprintAir (SRN, Warsaw Chopin) has announced another expansion... https://t.co/8mmHlDU9ry
4 RT @Norah_min: インスタ見た感じだとこのマートンのChopinで演ったっぽいね!?\nhttps://t.co/GlWT3zW11g
Inne użyteczne funkcje
Poza filtrowaniem twittera w poszukiwaniu wiadomości pasujących do określonych słów kluczowych, można również pobierać dane w inny sposób.
- Funkcja
userTimeline()pozwala na pobieranie ostatnich wiadomości utworzonych przez określonego użytkownika. - Funkcja
homeTimeline()pozwala na pobieranie wiadomości z linii aktualnego użytkownik. - Funkcja
mentions()pozwala na pobieranie wiadomości, w których określony użytkownik został mieniony. - Funkcja
retweetsOfMe()pozwala na zliczanie liczby retwittów kolejnych wiadomości.
Aby korzystać z powyżej opisanych pakietów należy pobrać z konta odpowiednie klucze. Szczegółowa instrukacj jak to zrobić, krok po kroku po stronie Twittera, znajduje się na stronie http://bigcomputing.blogspot.com/2016/02/the-twitter-r-package-by-jeff-gentry-is.html.