Saturday, June 09, 2012

Te estoy siguiendo en Twitter...me estás siguiendo tu?

Si pasas algo de tiempo en Twitter, debes tener algunos seguidores y personas a las que sigues...a más tiempo pasas, con más gente vas a interactuar...

Algunas veces, te das cuenta de que sigues a mucha gente que puede seguirte de vuelta como no...para algunas "cuentas", eso no importa...es decir...si sigo a @annafaris no espero que me siga de vuelta...me encantaría que lo haga por supuesto, pero tengo algo de sentido común -:) Pero...cuando es un Juan Perez al que yo estoy siguiendo...y no me sigue de vuelta...las cosas se vuelven personales...y es tiempo de limpiar Twitter...aunque sea un poco...

Twitter provee APIs muy útiles, las cuales lastimosamente están limitadas a solo 150 llamadas por hora, como pueden verificar llamando a Rate_Limit_Status.

De cualquier modo...Estaba pensando hacer algo con Twitter y especialmente con la gente a la que sigo y no sigue de vuelta...así que por supuesto...escogí a #R puesto que ya había hecho cosas interesantes con Python...

setwd("C:/Debug/R Source Codes")

Get_Twitter_Info<-function(p_source){
  web_page<-readLines(p_source)
  mypattern = '<id>([^<]*)</id>'
  datalines = grep(mypattern,web_page,value=TRUE)
  getexpr = function(s,g)substring(s,g,g+attr(g,'match.length')-1)
  g_list = gregexpr(mypattern,datalines)
  matches = mapply(getexpr,datalines,g_list)
  result = gsub(mypattern,'\\1',matches) 
  names(result) = NULL
  return(result)
}

Get_Screen_Name<-function(p_userid){
  user_url<-paste("https://api.twitter.com/1/users/lookup.xml?user_id=",
                      p_userid,"&include_entities=false")
  web_page<-readLines(user_url)
  mypattern = '<screen_name>([^<]*)</screen_name>'
  datalines = grep(mypattern,web_page,value=TRUE)
  getexpr = function(s,g)substring(s,g,g+attr(g,'match.length')-1)
  g_list = gregexpr(mypattern,datalines)
  matches = mapply(getexpr,datalines,g_list)
  screen_name = gsub(mypattern,'\\1',matches)
  names(screen_name) = NULL
  return(screen_name)
}

trim <- function(x){
  x<-gsub(' ','',x)
  return(x)
} 

followers<-Get_Twitter_Info("https://api.twitter.com/1/followers/ids.xml?
                                cursor=-1&screen_name=Blag")
following<-Get_Twitter_Info("https://api.twitter.com/1/friends/ids.xml?
                                cursor=-1&screen_name=Blag")

People_Id<-""
Bad_People<-c()
Bad_Names<-c()
j<-0

for(i in 1:length(following)) {
  j<-j+1
  if(j>=100){
    j<-0
    People_Id<-substring(People_Id,2)
    Bad_People<-Get_Screen_Name(People_Id)
    Bad_Names<-append(Bad_Names,Bad_People)
    People_Id<-""
  }
  Match<-following[i] %in% followers
  if(Match == TRUE){
  }
  else{
    following[i]<-trim(following[i])
    People_Id<-paste(People_Id,following[i],sep=",")
  }
}

write.csv(Bad_Names,"Bad_Names.csv",row.names=FALSE)

Este pequeño programa va a tomar a mis seguidores (de mi cuenta @Blag), y la gente a la que sigue...un simple loop a las personas a las que sigo me permite determinar quien me sigue y quien no. Con eso identificado, hago grupos de 100 User Id's (Puesto que el Lookup API solo soporta 100 cuentas) y tomar sus nombres de usuarios...

Finalmente, genero un archivo .CSV con toda la gente a la que sigo pero no me sigue de vuelta...tiempo de limpiar mi Twitter -;)

P.D: Me encantaría mostrar la lista...pero...no quiero exponer los nombres de las Malas Personas, cuyo único e imperdonable crimer es no seguirme de vuelta -:)

Saludos,

Blag.

No comments: