Tutorial: Crear sitios Wordpress con contenido importado de forma automatizada

Desde
7 Abr 2009
Mensajes
754
Introducción:

Para los que me conocen, soy un desarrollador web con más de 13 años de experiencia y me dedico al mundo de los sitios webs. Sin embargo yo compito de otra forma, no con blogs sino extrayendo contenido de muchas webs y creando sitios a partir de ese contenido. Por ejemplo: hace 1 año desarrollé una API para Pinterest y gracias a ella pude crear www.pictame.com , un sitio cuyo objetivo es tener las mejores imágenes de internet por categorías.

MUmVNu2.png

Todavía no está terminado pero el sitio mediante procesos va todos los días y toma imágenes de Pinterest y las actualiza. Esto no lo ve el usuario, de hecho ni se da cuenta. La idea es tener un sitio que se actualize sin ayuda de un humano sin que yo haga nada o casi-nada. Está montado sobre PHP/LARAVEL 4.0/MYSQL/BASH.

Con pictame trato de llenar el hueco de toda la gente buscando "Imágenes de XXX" en google con imágenes de calidad.

Objetivo
Sin entrar en más detalles hoy les quería hablar de como construir sitios webs completos importando contenido a wordpress. La idea es que si tu tienes una API(como la que hice para pinterest), una base de datos, un excel, o alguno tipo de formato electrónico puedas crear un sitio de Wordpress importando el contenido.

La ventaja de Wordpress es que una vez que tienes el contenido puedes disponer de una serie de recursos que te hacen la vida fácil:
  • Plugins SEO
  • Temas
  • Manejador de Contenido
  • Cache
  • etc...

Ejemplo:

Pasemos a la acción. Para importar contenido a un wordpress lo primero que tenemos que hacer es crear un archivo en raiz y poner el siguiente código(asumiendo que WP ya está instalado).


Ver el archivo adjunto 27712

Yo crearé el archivo /load_content.php
PHP:
<?
include "./wp-load.php";

.....

Con esta instrucción llamamos al core de wodpress y podemos usar sus funciones sin necesidad de programar un plugin, un tema, o insertar código dentro de los archivos de Wordpress. Lo siguiente que debemos hacer es obtener el contenido, para este ejemplo vamos usar la API de The OMDb API v2.1 by Brian Fritz que nos permite obtener información del sitio IMDB.

http://www.omdbapi.com/?s=Star Wars&r=json // Para obtener las péliculas con StarWars
http://www.omdbapi.com/?i=tt0076759&r=json // para obtener una película por su ID, en este caso "Star Wars: Episode IV - A New Hope"

El siguiente código obtiene los datos usando JSON.

<?php
PHP:
include "./wp-load.php"; 

$busqueda="Star";
$url_busqueda_api=sprintf("http://www.omdbapi.com/?s=%s&r=json", $busqueda);
//Obtenemos el contenido de la URL con file_get_contents
$output = file_get_contents($url_busqueda_api);
//Convertimos el string obtenido a un objecto por la función json_decode
$objecto_peliculas=json_decode($output);

// Como lo obtenido es un objecto con el "N" número de items según la búsqueda, podemos hacer un for
foreach ($objecto_peliculas->Search as $pelicula) {
        /* 
           Pelicula contiene: 
           Title, Year, imdbID, Type:
         */
        //Como necesitamos la descripción, el poster y más datos hacemos una petición a la API por id de Movie.
        $url_pelicula=sprintf("http://www.omdbapi.com/?i=%s", $pelicula->imdbID);
        $pelicula_details = json_decode( file_get_contents($url_pelicula));

        /*{Codigo para insertar en WP}
          ....
          ....
          .... */

}

La variable $pelicula_details contiene el detalle de cada película y aquí es donde se pone interesante. Ya que tenemos los datos estructurados en un arreglo podemos empezar a insertar el contenido en WP. Para ello usaremos la función wp_insert_post.

PHP:
        $my_post = array(
                        'post_title'    => $pelicula_details->Title,
                        'post_content'  => $pelicula_details->Plot,
                        'post_status'   => 'publish',
                        'post_author'   => 1,
                        );

        wp_insert_post( $my_post );

Por cada película encontrada, va añadir un post con el titulo y contenido. Sin embargo tenemos más datos en la API como son poster(imagen) y algunos metadatos como director, actores .. etc que pueden ir como custom fields de wordpress.

Para obtener la imagen y guardarla en nuestro servidor y ponerla como imagen destacada del post.



PHP:
        /* CODIGO PARA INSERTAR LA imagen
        
        */
        //Directorio Raiz donde Guardaremos las imágenes
        $wp_upload_dir = wp_upload_dir();

        $path_img=$wp_upload_dir['path']."/{$id_post}.jpg";

        
        copy($pelicula_details->Poster, $path_img);


        // Checamos el mimetype
        $filetype = wp_check_filetype( basename( $path_img ), null );
        
        // Preparamos el arreglo para insertar la imagen
        $attachment = array(
                        'guid'           => $wp_upload_dir['url'] . '/' . basename( $path_img ), 
                        'post_mime_type' => $filetype['type'],
                        'post_title'     => preg_replace( '/\.[^.]+$/', '', basename( $path_img ) ),
                        'post_content'   => '',
                        'post_status'    => 'inherit'
                        );

        // Insertamos el attachment
        $attach_id = wp_insert_attachment( $attachment, $path_img, $id_post );
        //Añadimos archivo para generar los thumbs
        require_once( ABSPATH . 'wp-admin/includes/image.php' );

        //metadataNecesaria para el atachment 
        $attach_data = wp_generate_attachment_metadata( $attach_id, $filename );
        wp_update_attachment_metadata( $attach_id, $attach_data );

        //Convertimos este attachment en la imagen destacada del Post
        set_post_thumbnail( $id_post, $attach_id );

       /* FIN CODIGO PARA INSERTAR LA imagen */

Por último si vemos todo lo que nos regresa la API podemos guardar muchos datos como metadatos.

Captura de pantalla 2014-05-26 a la(s) 22.55.54.png

Solo guardaré director por motivos Didácticos.
PHP:
add_post_meta($id_post, 'director',$pelicula_details->Director);

Código Final.
PHP:
<?php

include "./wp-load.php"; 

$busqueda="Star";
$url_busqueda_api=sprintf("http://www.omdbapi.com/?s=%s&r=json", $busqueda);
//Obtenemos el contenido de la URL con file_get_contents
$output = file_get_contents($url_busqueda_api);
//Convertimos el string obtenido a un objecto por la función json_decode
$objecto_peliculas=json_decode($output);

// Como lo obtenido es un objecto con el "N" número de items según la búsqueda, podemos hacer un for
foreach ($objecto_peliculas->Search as $pelicula) {
        /* 
           Pelicula contiene: 
           Title, Year, imdbID, Type:
         */
        //Como necesitamos la descripción, el poster y más datos hacemos una petición a la API por id de Movie.
        $url_pelicula=sprintf("http://www.omdbapi.com/?i=%s", $pelicula->imdbID);
        $pelicula_details = json_decode( file_get_contents($url_pelicula));

        /*{Codigo para insertar en WP} */

        $my_post = array(
                        'post_title'    => $pelicula_details->Title,
                        'post_content'  => $pelicula_details->Plot,
                        'post_status'   => 'publish',
                        'post_author'   => 1,
                        );
        //Insertamos y guardamos el id
        $id_post=wp_insert_post( $my_post );
        


        /* CODIGO PARA INSERTAR LA imagen
        
        */
        //Directorio Raiz donde Guardaremos las imágenes
        $wp_upload_dir = wp_upload_dir();

        $path_img=$wp_upload_dir['path']."/{$id_post}.jpg";

        
        copy($pelicula_details->Poster, $path_img);


        // Checamos el mimetype
        $filetype = wp_check_filetype( basename( $path_img ), null );
        
        // Preparamos el arreglo para insertar la imagen
        $attachment = array(
                        'guid'           => $wp_upload_dir['url'] . '/' . basename( $path_img ), 
                        'post_mime_type' => $filetype['type'],
                        'post_title'     => preg_replace( '/\.[^.]+$/', '', basename( $path_img ) ),
                        'post_content'   => '',
                        'post_status'    => 'inherit'
                        );

        // Insertamos el attachment
        $attach_id = wp_insert_attachment( $attachment, $path_img, $id_post );
        //Añadimos archivo para generar los thumbs
        require_once( ABSPATH . 'wp-admin/includes/image.php' );

        //metadataNecesaria para el atachment 
        $attach_data = wp_generate_attachment_metadata( $attach_id, $filename );
        wp_update_attachment_metadata( $attach_id, $attach_data );

        //Convertimos este attachment en la imagen destacada del Post
        set_post_thumbnail( $id_post, $attach_id );

       /* FIN CODIGO PARA INSERTAR LA imagen */

        add_post_meta($id_post, 'director',$pelicula_details->Director);

}

Una vez que corramos el código podemos ver como se insertaron los Post con todos los datos en Wordpress, la imagen predeterminada automáticamente se ve por el tema e incluso se crearon los thumbs.

Captura de pantalla 2014-05-26 a la(s) 23.01.43.png
Captura de pantalla 2014-05-26 a la(s) 23.03.40.png

Y vemos que funciona, pueden ver el ejemplo aquí: http://michoacano.com.mx/ejemplo10/.


Como pueden ver, este es un ejemplo sencillo pero que pueden usar para cualquier cosa. Desde importar sitios completos hasta porciones de contenido a un sitio ya existente. Yo lo he usado para crear páginas de juegos apartir de otras(jeje). Y también se puede usar para crear contenido dinámico todos los días.

Si tienen dudas no duden en dejar comentarios, y si necesitan un trabajo que quieren que realice pueden contactarme en el foro, twitter o por email.
 
Última edición:

ferrodqui

Dseda
Verificación en dos pasos activada
Verificado por Whatsapp
Verificado por Binance
Desde
15 Jul 2013
Mensajes
1.036
excelente, muy buena tu explicacion. lo guardo para analizarlo con calma

saludos.
 

JavierNeri

Épsilon
SEO
Verificación en dos pasos activada
Desde
6 Abr 2009
Mensajes
871
Buenisimo, yo usaba la librería XML-RPC para "autopublicar" en wordpress, pero hace varias versiones que dejo de funcionar correctamente
 

carlossalasamper

Dseda
Verificación en dos pasos activada
Verificado por Whatsapp
Desde
5 Sep 2012
Mensajes
1.200
Muy detallado y poniendo el ejemplo de las webs warez de películas para llamar al público :star2:
 

park

Gamma
Verificación en dos pasos activada
Verificado por Whatsapp
Desde
12 Abr 2012
Mensajes
416
yo tengo un plugin que hace lo mismo pero muchos sitios ponen spam(link de la web del contenido) y no lo puedo poner automaticamente, tengo que estar editando la entrada.
 
Desde
14 Jun 2013
Mensajes
1.555
Muy bueno! A marcadores para analizarlo con calma y adaptarlo a algunas ideas que me vienen rondando...

yo tengo un plugin que hace lo mismo pero muchos sitios ponen spam(link de la web del contenido) y no lo puedo poner automaticamente, tengo que estar editando la entrada.

Hombre, si estás obteniendo su contenido, más que spam eso sería un link de autoría a la fuente, ¿no?
 

park

Gamma
Verificación en dos pasos activada
Verificado por Whatsapp
Desde
12 Abr 2012
Mensajes
416
si pero es warez todo es ilegal
Muy bueno! A marcadores para analizarlo con calma y adaptarlo a algunas ideas que me vienen rondando...



Hombre, si estás obteniendo su contenido, más que spam eso sería un link de autoría a la fuente, ¿no?
 

Carlos Arreola

Admin
Sigma
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
Verificado por Binance
¡Excelente comerciante!
Suscripción a IA
Desde
6 Abr 2009
Mensajes
12.390
Gracias por el aporte, contenido que no se encuentra fácilmente por ahí :D
 

supercordobes

Zeta
Programador
Verificación en dos pasos activada
Verificado por Whatsapp
Desde
2 Sep 2011
Mensajes
1.506
Buen aporte para los programadores. La clave es encontrar las API's para consumir los datos, si hay algún programador fanático de los comics y que le guste montar un sitio como este pero con los personajes e historietas de Marvel pueden ver esta documentación: Marvel Developer Portal - Interactive Documentation :encouragement:
 

Michoacano

Épsilon
Desde
7 Abr 2009
Mensajes
754
Buen aporte para los programadores. La clave es encontrar las API's para consumir los datos, si hay algún programador fanático de los comics y que le guste montar un sitio como este pero con los personajes e historietas de Marvel pueden ver esta documentación: Marvel Developer Portal - Interactive Documentation :encouragement:


Uyyyyy, ya estuvo que hice un sitio de comics. Solo a la info le meto la api de traducción para convertirla en español jajajaja.

No hace falta una API para obtener el contenido, puede ser una base de datos o alguno otro tipo de dato estructurado. También existe el arte de hacer scraping (Web scraping - Wikipedia, la enciclopedia libre) para obtener datos de una web "robando" el html y convirtiendo en datos estructurados para después pasarlo a wordpress.

Pero esa... es otra historia y quizás pronto haga un tutorial sobre eso, que de hecho la API de pinterest que hice la primera capa es técnicamente web scraping.
 
Última edición:

softwareydiseno

VIP
Zeta
Social Media
Verificación en dos pasos activada
Verificado por Binance
Suscripción a IA
Desde
31 Ago 2011
Mensajes
1.886
Muy buen tuto y muy detallado, con tiempo lo leeré. Te envío MP con consulta afin a tu post.
 

Uriel

1
Kappa
Redactor
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
Suscripción a IA
Desde
8 Jul 2009
Mensajes
2.686
Se me ocurren tantas aplicaciones XD, muchas gracias michoano
 

supercordobes

Zeta
Programador
Verificación en dos pasos activada
Verificado por Whatsapp
Desde
2 Sep 2011
Mensajes
1.506
Uyyyyy, ya estuvo que hice un sitio de comics. Solo a la info le meto la api de traducción para convertirla en español jajajaja.

No hace falta una API para obtener el contenido, puede ser una base de datos o alguno otro tipo de dato estructurado. También existe el arte de hacer scraping (Web scraping - Wikipedia, la enciclopedia libre) para obtener datos de una web "robando" el html y convirtiendo en datos estructurados para después pasarlo a wordpress.

Pero esa... es otra historia y quizás pronto haga un tutorial sobre eso, que de hecho la API de pinterest que hice la primera capa es técnicamente web scraping.

Claro que scrapeando se puede obtener cualquier información que este estructurada pero mi comentario iba más orientado al tema que hablaba el tutorial relacionado con las API's.

Que api usas para traducir??? Hay alguna que no tengan limitación en la cantidad de diaria de caracteres?
 

Michoacano

Épsilon
Desde
7 Abr 2009
Mensajes
754
Claro que scrapeando se puede obtener cualquier información que este estructurada pero mi comentario iba más orientado al tema que hablaba el tutorial relacionado con las API's.

Que api usas para traducir??? Hay alguna que no tengan limitación en la cantidad de diaria de caracteres?

Uso la de Bing y pues si hay que pagar pero se me hace poco.
 

Pompinchu

Pi
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
¡Ha verificado su Paypal!
Verificado por Binance
Desde
2 Jul 2013
Mensajes
5.475
Así que así es como se obtuvo datos de IMDB. Un dato: la web que dan allí está disponible :D
 

Neill

Gamma
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
20 Mar 2015
Mensajes
238
Buenisimo, yo usaba la librería XML-RPC para "autopublicar" en wordpress, pero hace varias versiones que dejo de funcionar correctamente

mi libreria XML-RPC que uso en mi aplicacion C# ya no publica, me sale algo de:

'CookComputing.XmlRpc.XmlRpcServerException' occurred in CookComputing.XmlRpcV2.dll

lo extraño fue que no cambie nada de un dia para otro. Sabes porque sera?, si no, podrias decirme en que seccion del foro puedo publicar esta pregunta. Saludos.
 
Arriba