2015-01-11

Scraping Twitter Php 2016

Esto de scrapear páginas webs como twitter y facebook es un absoluto rollo. Los pobres programadores que trabajan allí están obligados a cambiar su código cada x tiempo porque alguien de arriba les dice esto o lo otro.

Por eso, cuando buscas algún código útil de como scrapear Twitter con php siempre te encuentras con código que funcionaba en el pasado 2014 o 2013 pero que no funciona ahora en el 2015.

Yo he buscado y he encontrado esto:

http://sledgedev.com/build-a-scraper-with-php un código muy simple que debía funcionar hace poco.

http://blog.oneduality.com/2013/06/26/how-to-get-a-twitter-feed-using-php-without-using-api-1-1-and-without-oauth/  un código un poquito más currado en el que el programador relata en  el final que está hasta los cojones de los cambios que pasa de actualizarlo.

De uno y de otro podemos coger ideas. En realidad, son códigos muy parecidos.

Los dos hacen uso de la librería http://simplehtmldom.sourceforge.net/

y luego parsean gracias a esta librería.

He analizado el código actual de Twitter  y yo sólo necesito el tweet, ni la fecha, ni los rt ni nada más. Quizás en un futuro lo actualice para coger esa información o quizás alguien lo haga y nos lo enseñe. Si se quiere hacer los pasos son obvios coger en lugar del párrafo donde se encuentra el tweet, el div principal donde está toda la información del tweet.

El código para scrapear el contenido del tweet es este:

<php?
include 'simple_html_dom.php';
$i=0;
$html = file_get_html('https://twitter.com/pixies');
$tweets = $html->find('p[class=ProfileTweet-text]');
foreach ($tweets as $tweet) {

$tweet=str_replace("&_nbsp;", " ", $tweet);
echo $i." - ".strip_tags($tweet)."\n";
$i++;
 if ($i >3){
   
     break;
 }
}
?>

He añadido un break para mostrar solamente un número definido de tweets .- También un striptags para que no me muestre tags de código. Salían bastantes espacios en  código  por lo que con un str:_replace los he quitado.

Cómo veis un código muy sencillo por no llamarlo cutre.  Como decía antes dejo para otro fin de semana sin obligaciones lo de currarme la fecha y demás campos informativos que se pueden sacar.

P.S: donde pone pixies hay que poner la cuenta de la que queráis obtener información. En mi caso pondré varias y las ejecutaré con un cron . Luego una página web mostrará el resultado. Algo así como lo último de los fulanitos....

P:S. Twtitter ha cam,biado su código ahora hay que poner
$tweets = $html->find('p[class=tweet-text]');

Con esto el código es válido el 2016 hasta que lo vuelvan a cambiar. Estamos en febrero y todo sigue funcionando.