Michoacano Seguir
Épsilon
- 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.
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:
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
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
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.
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.
Por último si vemos todo lo que nos regresa la API podemos guardar muchos datos como metadatos.
Solo guardaré director por motivos Didácticos.
Código Final.
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.
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.
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.
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.
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.
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: