Статьи

Сбор и извлечение из твитов с R

Вчера вечером я хотел поиграть с Twitter, чтобы увидеть, какие сайты я использовал в качестве ссылок в своих твитах. Я хотел создать список лучших четырех.


Первая проблема, с которой я столкнулся, заключалась в том, что установить twitteR в Ubuntu не так просто!
Вы должны правильно установить
RCurl … но прежде чем устанавливать пакет в R, необходимо запустить следующую строку в терминале:

$ sudo apt-get install 
  libcurl4-gnutls-dev

затем запустите R:
$ R

и тогда вы можете запустить стандарт:
> install.packages("RCurl")

и, наконец, установить пакет интересов,
> install.packages("twitteR")

Затем вторая проблема, с которой я столкнулся, заключалась в том, что 
twitteR  был недавно обновлен благодаря новому API Twitter. Теперь вам нужно зарегистрироваться на
веб-странице разработчиков Twitter , получить идентификатор и пароль, а затем использовать их в следующей функции (я изменил их оба ниже, поэтому, если вы попытаетесь запустить следующий код, вы, вероятно, получите сообщение об ошибке ):
> library(twitteR)
> cred <- getTwitterOAuth("ikzCtYif9Rwoood45w","rsCCifp99kw5sJfKfOUhhwyVmPl9A")
> registerTwitterOAuth(cred)
[1] TRUE
> T <- userTimeline('freakonometrics',n=5000)

Вы также должны перейти на эту веб-страницу и ввести PIN-код, который вам дают.
To enable the connection, please direct your web browser to:

http://api.twitter.com/oauth/authorize?oauth_token=cQaDmxGe...

When complete, record the PIN given to you and provide it here:

Это боль в **, поверь мне.
Во всяком случае, я смог запустить его. Затем я могу получить список со всеми моими (недавними) твитами:

> T <- userTimeline('freakonometrics',n=5000)

Теперь моей (третьей) проблемой было извлечение URL-адресов ссылок из моих твитов. Второй твит из списка был:

Но когда вы смотрите на текст, вы видите:

> T[[2]]
[1] "freakonometrics: [textmining] \"How a Computer Program Helped Reveal J. K. 
Rowling as Author of A Cuckoos Calling\" http://t.co/wdmBGL8cmj by @garethideas"

Таким образом, я получаю не URL-адрес, используемый в моем твите, а ярлык для URL-адресов с
http://t.co/ . К счастью, @
3wen  (как всегда) смог помочь мне со следующими функциями:
> extraire <- function(entree,motif){
+	res <- regexec(motif,entree)
+	if(length(res[[1]])==2){
+		debut <- (res[[1]])[2]
+		fin <- debut+(attr(res[[1]],"match.length"))[2]-1
+		return(substr(entree,debut,fin))
+	}else return(NA)}
> unshorten <- function(url){
+	uri <- getURL(url, header=TRUE, nobody=TRUE, followlocation=FALSE, 
+       cainfo = system.file("CurlSSL", "cacert.pem", package = "RCurl"))
+	res <- try(extraire(uri,"\r\nlocation: (.*?)\r\nserver"))
+	return(res)}

Теперь, если мы используем эти функции, мы можем получить  истинный URL:

> url <- "http://t.co/wdmBGL8cmj"
> unshorten(url)
[1] http://www.scientificamerican.com/article.cfm?id=how-a-computer-program-helped-show..

Теперь я могу поиграть со своим списком, чтобы извлечь URL-адреса и адрес веб-сайта:
> exturl <- function(i){
+ text_tw <- T_text[i]
+ locunshort2 <- NULL
+ indtext <- which(substr(unlist(strsplit(text_tw, " ")),1,4)=="http")
+ if(length(indtext)>0){
+ loc <- unlist(strsplit(text_tw, " "))[indtext]
+ locunshort=unshorten(loc)
+ if(is.na(locunshort)==FALSE){
+ locunshort2 <- unlist(strsplit(locunshort, "/"))[3]}}
+ return(locunshort2)}

Используя apply с этой функцией и моим списком, и подсчитывая с помощью простой функции table (), я вижу, что мои лучшие четыре (из более чем 900 твитов) справочные сайты следующие:

Хорошо, не правда ли?