Monday, December 02, 2013

Unseguidores en Twitter con R y Rook - Revisitado

Hace algún tiempo escribí un blog llamado Unseguidores en Twitter con R y Rook donde utilicé R y Twitter para obtener una lista de las personas que seguimos...pero que no nos siguen a nostros...

Ahora...ese post es obsoleto puesto que Twitter cambió su API a API 1.1 lo cuál significa que la autenticación OAuth debe ser usada...

Así que...por supuesto...vamos a utilizar eso para nuestra nueva versión del Unseguidores con Twitter -;)

Obteniendo el Twitter Auth
library("ROAuth")
library("twitteR")

setwd("C:/Blag/R_Scripts/Important_Scripts")

options(RCurlOptions = list( capath = system.file("CurlSSL", "cacert.pem", package = "RCurl"), ssl.verifypeer = FALSE))

reqURL<-"https://api.twitter.com/oauth/request_token"

accessURL<-"http://api.twitter.com/oauth/access_token"

authURL<-"http://api.twitter.com/oauth/authorize"

consumerKey<-"Your own Consumer Key"

consumerSecret<-"Your own Consumer Secret"

download.file(url="http://curl.haxx.se/ca/cacert.pem", destfile="cacert.pem")

credentials<-OAuthFactory$new(consumerKey=consumerKey,
                              consumerSecret=consumerSecret,
                              requestURL=reqURL,
                              accessURL=accessURL,
                              authURL=authURL)

credentials$handshake(cainfo = system.file("CurlSSL", "cacert.pem", package = "RCurl"))

save(credentials, file="credentials.RData")

Lo que estamos hacindo aquí es simplemente obtener la autorizacipin de Twitter y guardando esa información como un archivo RData que podremos utilizar más adelante. Este script necesita ser utilizado una sola vez...y te pedirá que ingreses un PIN para validar la conexión...


Luego de eso...estamos listos para comenzar -;)

Unseguidores en Twitter
require("Rook")
library("ROAuth")
library("twitteR")

setwd("C:/Blag/R_Scripts/Important_Scripts")
load("credentials.RData")
registerTwitterOAuth(credentials)
Get_Screen_Name<-function(p_userid){
  SomeUser<-getUser(p_userid,cainfo="cacert.pem")
  SomeUser<-SomeUser$screenName
  return(SomeUser)
}

newapp<-function(env){
  req<-Rook::Request$new(env)
  res<-Rook::Response$new()
  res$write('<form method="POST">\n')
  res$write('Enter your Twitter username: <input type="text" name="UserName">\n')
  res$write('<input type="submit" name="Get Bad People!">')
  res$write('</form>')
  
  People_Id<-""
  Bad_People<-c()
  Bad_Names<-c()
  j<-0  
  
  if (!is.null(req$POST())) {
    UserName = req$POST()[["UserName"]]
    
    User<-userFactory$new(screenName=UserName)
    followers<-User$getFollowerIDs(n=NULL,cainfo="cacert.pem")
    following<-User$getFriendIDs(n=NULL,cainfo="cacert.pem")

    for(i in 1:length(following)) {
      Match<-following[i] %in% followers
      if(Match == TRUE){
      }
      else{
        Bad_Person<-Get_Screen_Name(following[i])
        res$write(paste(' ',Bad_Person,sep=' '))
        res$write('</BR>')
      }
    }
}
  res$finish()
}

server = Rhttpd$new()
server$add(app = newapp, name = "Twitter_Rook")
server$start()
server$browse("Twitter_Rook")

Gracias a esto...pude reducir el código de 85 líneas de la versión anterior a solo 51 lineas de código...gran logro si me lo preguntan -;)

Así que...cuando ejecutamos el código...tendremos esto...


Por supuesto...No espero que todos me sigan de vuelta puesto que en su mayoría son empresas...pero para las personas...siganme o serán unseguidos -:P

Saludos,

Blag.

No comments: