Importando Contenido automaticamente en Wordpress

Estado
No está abierto para más respuestas.
Mensajes
99
Puntuación de reacción
0
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 un sitio cuyo objetivo es tener las mejores imágenes de internet por categorías.
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).


Yo crearé el archivo /load_content.php
Código 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
Código 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.



Código 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.



Código 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.

1.jpg

Solo guardaré director por motivos Didácticos.


Código PHP:
add_post_meta($id_post, 'director',$pelicula_details->Director);


Código Final.


Código 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.

2.jpg

Y vemos que funciona, pueden ver el ejemplo aquí: Películas | El imdb en español


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.

3.jpg

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.
 
Estado
No está abierto para más respuestas.
Arriba