Podemos descargar en nuestro ordenador todos los tuits de un usuario de Twitter pinchando uno a uno, dándole botón derecho y guardando la página... o haciendo un pequeño script.
Veamos paso a paso cómo hacerlo:
Acotar la búsqueda
Vamos a usar la cuenta de @LinuxCenterEs como ejemplo, así que vamos a mirar cuándo se unió a twitter, a qué fecha estamos y usaremos esos dos datos para delimitar el rango temporal desde donde hay que descargar.
Para saber la fecha actual, usaremos date.
Para saber la fecha en la que se unió un usuario a Twitter, tenemos que mirar en el código fuente. Para saber qué cadena buscamos, vamos a mirar primero la fecha en el perfil del usuario:
Después buscamos esa cadena en el código fuente y miramos a qué clase o div pertenece:
Y comprobamos si esa clase se utiliza únicamente para ese dato:
Ya tenemos la pista con la que extraer la cadena de la fecha en la que se unió el usuario a Twitter.
Ahora tenemos que descargar la página, buscar la línea y extraer únicamente la cadena:
#!/bin/bash
wget https://twitter.com/$1 -O $1.html
lineafecha=$(cat $i.html | grep "ProfileHeaderCard-joinDateText js-tooltip u-dir")
echo $lineafecha
Voy a comprobar si funciona hasta aquí:
Por ahora parece que vamos bien. Ahora vamos a limpiar la cadena.
Ojo, tenemos que limpiar acorde con el idioma de nuestro sistema. Si, por ejemplo, tuviésemos el sistema en inglés, la cadena es distinta:
Veamos cómo llevamos el script hasta ahora:
#!/bin/bash
wget https://twitter.com/$1 -O $1.html
lineafecha=$(cat $i.html | grep "ProfileHeaderCard-joinDateText js-tooltip u-dir")
mescomienzo=$(echo $lineafecha | cut -d " " -f 13)
anocomienzo=$(echo $lineafecha | cut -d " " -f 15 | cut -d "<" -f 1)
case $mescomienzo in
enero)
mescomienzo="01"
;;
febrero)
mescomienzo="02"
;;
marzo)
mescomienzo="03"
;;
abril)
mescomienzo="04"
;;
mayo)
mescomienzo="05"
;;
junio)
mescomienzo="06"
;;
julio)
mescomienzo="07"
;;
agosto)
mescomienzo="08"
;;
septiembre)
mescomienzo="09"
;;
octubre)
mescomienzo="10"
;;
noviembre)
mescomienzo="11"
;;
diciembre)
mescomienzo="12"
;;
esac
mesfinal=$(date +%m)
anofinal=$(date +%Y)
echo "Las fechas a buscar son desde el "$mescomienzo" de "$anocomienzo" hasta el "$mesfinal" de "$anofinal
Y veamos si funciona bien:
Pues parece que vamos por buen camino. Así que seguimos:
Ahora que ya sabemos las fechas que hemos de recorrer, vamos a ver cómo explotar este dato, tal como adelanté en un hilo de twitter: https://twitter.com/hacemoswebserie/status/1040037466802151426
Antes de seguir, comentaré que la cadena para hacer una búsqueda de los tuits que un determinado usuario de Twitter ha publicado entre dos fechas es:
"https://twitter.com/search?q=From%3A"$1"%20since%3A"$anocomienzo"-"$mescomienzo"-"$diacomienzo"%20until%3A"$anofinal"-"$mesfinal"-"$diafinal"&src=typd"
Y siempre es así. Simplemente cambiando las variables. Pero lo mejor de todo, es que todas las redes sociales siguen patrones similares, por lo que este tutorial es extrapolable a cualquier otra red social o cualquier otra búsqueda dentro de Twitter.
Y una advertencia, a veces si hacemos muchas descargas desde una misma IP o desde un mismo navegador, puede que nos bloquee ese servidor las descargas y no sirva nuestro script. Varias soluciones para esto:
- Usar Tor para usar distintas IPs.
- Lanzar varios scripts desde distintos ordenadores con distintas IPs (mejor si usamos servidores desde distintos puntos del planeta).
- Ir cambiando de "user agent", es decir, cambiar la cabecera de wget para que se haga pasar por otro navegador. Tenemos un enorme listado de cabeceras en la página http://www.useragentstring.com/
Pero si vamos a hacer un uso moderado, como en este ejemplo en el que descargarnos los tuits de un único usuario, no debería darnos más problema que no nos deja descargar con wget si no le indicamos un "user agent" distinto.
Así que le indicaremos a wget que, por ejemplo, usamos Firefox con Windows. Lo haremos con: wget --user-agent="Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.2.3) Gecko/20100401 Lightningquail/3.6.3"
Y nos quedaría un script así:
#!/bin/bash
lineafecha=$(cat $i.html | grep "ProfileHeaderCard-joinDateText js-tooltip u-dir")
mescomienzo=$(echo $lineafecha | cut -d " " -f 13)
anocomienzo=$(echo $lineafecha | cut -d " " -f 15 | cut -d "<" -f 1)
case $mescomienzo in
enero)
mescomienzo="01"
;;
febrero)
mescomienzo="02"
;;
marzo)
mescomienzo="03"
;;
abril)
mescomienzo="04"
;;
mayo)
mescomienzo="05"
;;
junio)
mescomienzo="06"
;;
julio)
mescomienzo="07"
;;
agosto)
mescomienzo="08"
;;
septiembre)
mescomienzo="09"
;;
octubre)
mescomienzo="10"
;;
noviembre)
mescomienzo="11"
;;
diciembre)
mescomienzo="12"
;;
esac
mesfinal=$(date +%m)
anofinal=$(date +%Y)
for a in $(seq $anocomienzo $anofinal)
do
for m in $(seq 1 12)
do
if [ $m -lt 10 ]
then
m="0"$m
fi
cadena="https://twitter.com/search?q=From%3A"$1"%20since%3A"$a"-"$m"-01%20until%3A"$a"-"$m"-31&src=typd"
wget --user-agent="Mozilla/5.0 (Windows; U; Windows NT 5.1; pl; rv:1.9.2.3) Gecko/20100401 Lightningquail/3.6.3" $cadena -O "tuits-"$m"-"$a".html"
done
done
Sobre esta base, podemos seguir evolucionando, como definir que el primer año sólo descargue a partir del mes de comienzo, que el último año sólo descargue hasta el mes de final, que descargue los tuits día a día... Eso a gusto de cada uno.
En cuanto a usos, una vez descargados todos los tuits, podemos analizar las candenas con múltiples fines, desde hacer análisis de mercados, comprobar el número de adjetivos, sustantivos, pronombres... que utiliza ese usuario, o, por ejemplo, saber cuántas veces nos cita ese usuario:
Veamos cómo se porta LinuxCenterEs conmigo:
#!/bin/bash
let contador=0
for i in $(ls *.html)
do
let nominaciones=$(cat $i | grep -c hacemoswebserie)
let contador=$contador+$nominaciones
let nominaciones=0
done
echo "Te han citado "$contador" veces."
Veamos si funciona:
Y como funciona todo hasta aquí, aquí dejo el artículo. Ahora es tarea de cada usuario el adaptar este artículo a sus intereses. Las bases están sentadas... que la evolución haga el resto.