Underc0de

Programación Web => Zona Webmaster => Mensaje iniciado por: Oggy en Septiembre 27, 2015, 01:21:41 PM

Título: Scraping web
Publicado por: Oggy en Septiembre 27, 2015, 01:21:41 PM
De qué nos sirve Kimono?

Nos sirve para evitarnos el problema de programar algún script que nos saque cierta información de un sitio web o bien evitar pagarle a alguien para que haga esta tarea.

Imaginen este escenario que además traeré a la vida muy facilmente...
Queremos usar la api de twitter para publicar desde ella en nuestro twitter con alguna librería en php pero lo que queremos publicar está en un sitio web en especifico y se actualiza a cada rato, además de ello no queremos estar publicando o modificando el script a mano...
Pues fácil y sencillo, usamos kimono para Scrapear la data que queremos de la web, pasarsela a algún lenguaje y si la data es dinámica, osea se actualiza usamos un motor de base de datos para alojarla en una base de datos propia (por si queremos usar mucho mejor la data scrapeada)
como motor de bases de datos muchos usamos mysql, así que en éste tutorial en el ejemplo que presentaré usaré ese motor de base de datos.


Requerimientos

Scrapear cualquier web desde kimono -> Cualquiera puede hacerlo, no requiere conocimientos especiales.

Manejar los datos scrapeados(sacados de la web) -> Kimono ya trae una manera de usar la data que recolectamos, o bien si deseas más libertad necesitas un nivel de lengaje de programación intermedio, aconsejo Js,php,python...

Crear la app de twitter, combinarla con kimono y php para crear un autopublicador con Kimono php y un cron job -> Nivel de php intermedio

Bueno como decía mi abuela, primero la primaria les presentaré kimono, para ello nos dirijimos a https://www.kimonolabs.com/ (https://www.kimonolabs.com/)  Es la página oficial de kimono, nos registramos desde: https://www.kimonolabs.com/signup (https://www.kimonolabs.com/signup)

(http://i.imgur.com/CfNjIo8.png)

nos dirijimos a el apartado learn y buscamos la sección donde nos proveen la extención de chrome :

(http://i.imgur.com/SW2cbIl.png)

Acá les dejo el link directo de la chrome extención: https://www.kimonolabs.com/learn/chrome-extension (https://www.kimonolabs.com/learn/chrome-extension)

Se la bajan y tendrán en su navegador algo similar:

(http://i.imgur.com/pvysouS.png)

Listo, ya estamos listos para empezar a sacar la información de el sitio que queramos vamos a ello!

El ejemplo que daré será Sacar los chistes de un website.
(http://i.imgur.com/ApHEjK9.gif)

Explico: Property1, vendría siendo el nombre de cada información que saquemos de la web, ejemplo estamos en la página de chistes, yo sólo quiero sacar los chistes y nada más, cómo le llamaremos? pues chistes, si estan por ejemplo en un sitio web de noticias, podés llamar a cada propiedad por un nombre como: título,autor,contenido, así cuando Kimono te pase la info en el Formato Json pues no te vas a perder con la data que extrajiste.

Guardas el proyecto y estas listo para empezar.

(http://i.imgur.com/gxqNEME.png)

[LIST=1]
Luego se van a la página principal de kimono y desde su cuenta se dirigen a su apis.

(http://i.imgur.com/MQKhThP.png)

Después de irse al apartado de sus apis creadas, se desplegará la info de su api.

(http://i.imgur.com/qNWzhZJ.png)

Muestra información como nombre de su api, cuándo kimono volverá a jalar información nueva de la página scrapeada, información de errores,aciertos de la api y otras hiervas más.

No eres programador y quieres usar la data que sacaste de la web?

Este apartado enseñaré la manera más fácil dónde no se requiere saber programar en ningún lenguaje para manipular la data que scrapeaste, crearemos una app con kimono dónde desplegaremos toda la información.

En su cuenta tendrán un apartado llamado App builder, se usará para crear una app en la cual usaremos la información de la web que scrapeamos.
Link directo para crear la app: https://www.kimonolabs.com/newapp (https://www.kimonolabs.com/newapp)

(http://i.imgur.com/p6zFeOn.png)

Enlazarán su app con la data scrapeada, kimono les ofrecerá esa opción, después de ello escogen el estilo que desean para su app y tendrán una app con data actualizable de el sitio web scrapeado.

(http://i.imgur.com/ncPHhSJ.png)

El link de este ejemplo pueden verlo acá: forobetachistes (http://kimonolabs.com/kimonoapp/forobetachistes)

También los que no les interesa o no saben programar en algún lenguaje tienen otra opción de embeder su app en wordpress o a un sitio web, acá más info: https://www.kimonolabs.com/learn/wordpress (https://www.kimonolabs.com/learn/wordpress)

Creando app en twitter y combinándola con kimono, php y un Cron job

Cualquiera puede hablar y presentar un tutorial Basándose en simples teorías que quieren venir a ofrecerte algo sin haber sido probado, éste tutorial pretende enseñarte lo que yo mismo he aprendido y de una manera fácil, sin suposiciones ni nada por el estilo, en el ejemplo que yo daré usaré la api que creamos y la combinaremos con la api de twitter y una librería en php más un cron job que nos permitirá twittear nuestros chistes automáticamente.

Requerimientos: Saber php, entusiasmo e imaginación.

conexion.php

Código (php) [Seleccionar]
<?php

$db 
mysqli_connect("host","user","pass","bd");

if(
$db){
    echo 
"conectado";
}else{
    echo 
"No te has conectado hay un problema";
}


chistes.php
Código (php) [Seleccionar]
<?php

error_reporting
(0);

require(
"conexion.php");
include(
"TwitterAPIExchange.php");



$hora date("i"); // minutos para escojer qué chiste se enviará a twitter

$nm mysqli_query($db,"select * from chistes where id = $hora"); //recojemos el chiste y depende de la hora/minuto o lo que tengas programado se publicarán un diferente chiste de la base de datos
 
$um mysqli_fetch_assoc($nm); //iniciamos la función para traer el chiste de la bd

$pop $um["chiste"];


//Logica para enviar los datos a twitter con su libreria

$settings = array(
    
'oauth_access_token' => "Tu token",
    
'oauth_access_token_secret' => "Tu token secreto",
    
'consumer_key' => "tu llave ",
    
'consumer_secret' => "tu consumer secret"
);

$url "https://api.twitter.com/1.1/statuses/update.json";

$postdata = array(

'status' => $pop //chiste pasado a la libreria para que sea enviado a twitter


);

$metodo "POST";

$twitter = new TwitterAPIExchange($settings);

echo 
$twitter->setPostfields($postdata)
             ->
buildOauth($url,$metodo)
             ->
performRequest();


También necesitarán la api de twitter en php, TwitterAPIExchange, la bajan desde acá https://github.com/J7mbo/twitter-api-php (https://github.com/J7mbo/twitter-api-php)

Para crear tu app en twitter se van a https://dev.twitter.com/ (https://dev.twitter.com/)

Crean su app, le dan permisos de lectura y escritura.

Para poder guardar los chistes de kimono a la bd yo hice esto: Recorrí los datos con un foreach anidado, así al finalizar el foreach anidado me enviaba los datos a mi bd:

Logica para enviar mis datos de kimono a mi bd:

Código (php) [Seleccionar]
<?php
require("conexion.php"); 
$request "https://www.kimonolabs.com/api/77rvy8e2?apikey=Bbx40LCzP5mlQFEtUW0PLbChLDJ4YWeZ"//Nuestra api kimono en formato json
$response file_get_contents($request); //Obtener el código de la api
$results json_decode($responseTRUE); //Decodificar el json de la api


//foreach anidado para obtener el chiste
foreach ($results as $key => $value) {
    

    foreach (
$value as $clave => $valor) {
        
        foreach (
$valor as $culo => $fluflu) {
            

            foreach (
$fluflu as $wea => $nono) {
                
                
$insertar $nono["text"]; //asignamos a $insertar los chistes y se recorren todos con el foreach anidado

                
mysqli_query($db,"insert into chistes(id,chiste) values('','$insertar')"); //consulta sql para insertar los chistes
            
}
        }
    }
}


Creando un cron job para automatizar los tweets

Con un cron job se nos facilitará la vida y la publicación de tweets automáticos, en éste ejemplo estamos usando los chistes que sacamos de la web de chistes y después de haberlos acomodado en la api de kimono los pasamos a nuestra bd, ahora realizaremos el cron job.
esta vez no usaré ningún cpanel sino que usaré un servicio gratuito que nos dejará crear un cron job y ejecutar nuestro script cada cierto tiempo, nos iremos a: https://cron-job.org/ (https://cron-job.org/) se registran y se dirigen a el area de members, ahí estarán los detalles de sus cron jobs creados, si no tienen ni uno no les saldrá nada, se irán a "Cron jobs" y crearán uno nuevo:

(http://i.imgur.com/fcGOvmB.png)

Configuran a gusto su cron job, en mi ejemplo lo pondré que se ejecute cada 1 minuto para demostrarles que funcionan los tuits automáticos.

(http://i.imgur.com/J4Oeq2L.png)

Después de haberlo dejado unos minutitos corriendo este fue el resultado:

(http://i.imgur.com/hcD3GMK.png)

Podés jugar con los caracteres, ya ves que se lia un poco con las eñes y otros caracteres, esto se soluciona cambiando el charset y teniendo un poco de lógica en php.

Todas nuestras apis pasan a servirse en un json, podés usar json desde casi cualquier lenguaje de programación.
Puedo darles ideas,: Sacar las listas de alguna web de anime, sacar las listas de una web de pelis, sacar la información diaria de algun sitio web de noticias, ya saben que kimono actualiza su api automáticamente así que solo tienen que scrapear una sola vez, kimono también permite scrapear secciones dónde te pide logueo, en la documentación que dejaré explican cómo hacerlo.

Documentación oficial de kimono en videos: https://www.youtube.com/user/kimonolabs/videos (https://www.youtube.com/user/kimonolabs/videos)

http://vimeo.com/user23724399 (http://vimeo.com/user23724399) (Mejor vean los tutoriales con viemeo, aconsejado.)

Documentación completa: https://www.kimonolabs.com/learn/ (https://www.kimonolabs.com/learn/)

qué es scraping: http://es.wikipedia.org/wiki/Web_scraping (http://es.wikipedia.org/wiki/Web_scraping)
Saludos 8)!
Título: Re:Scraping web
Publicado por: ANTRAX en Septiembre 27, 2015, 01:59:25 PM
Fantástico aporte hermano!
Muchas gracias!

Saludos!
ANTRAX