Foros del Web » Creando para Internet » Sistemas de gestión de contenidos » WordPress »

Importar BD personalizada (sus sugerencias necesito)

Estas en el tema de Importar BD personalizada (sus sugerencias necesito) en el foro de WordPress en Foros del Web. Hola, estoy importando a WordPress una base de datos Access de un sitio de noticias. Para ello estoy usando $wpdb para recorrer la tabla de ...
  #1 (permalink)  
Antiguo 11/04/2011, 08:22
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 9 meses
Puntos: 535
Importar BD personalizada (sus sugerencias necesito)

Hola, estoy importando a WordPress una base de datos Access de un sitio de noticias. Para ello estoy usando $wpdb para recorrer la tabla de noticias de Access (previamente importada a la DB MySQL donde está instalado WP) y usando la función wp_insert_post() y add_post_meta(). Ya logré importar los 27.860 registros que tengo en esta base "amputada" (serán muchos más finalmente). O sea, técnicamente no tengo problemas. Lo que pido son sugerencias en cuanto a qué dato de la BD original correspondería a cuál de la estructura de WP, según su criterio.

Pongo lo que tengo hasta ahora:

'post_content' => $dato->NOTICIA
'post_date' => $dato->FECHA
'post_excerpt' => $dato->BAJADA
'post_name' => $dato->TITULO
'post_title' => $dato->TITULO

Asimismo, creo un "custom field" llamado id_noticias con el id de la noticia de la base de datos oiginal:

Código:
$new_post_id = wp_insert_post( $post );
add_post_meta($new_post_id, 'id_noticias', $dato->ID_NOTICIAS);
Esto es para luego hacer redirecciones 301 de cara a lo que google ya tenga indexado.

Ahora pongo lo que todavía no resolví:

Campo: CIUDAD -> Custom field o Tag?
Campo: FUENTE -> Custom field o concatenarlo con el campo NOTICIA al final? (este campo no es una URL sino una mera mención al nombre del medio donde se publicó originalmente)
Campo: FIRMA -> Custom field o concatenarlo con el campo NOTICIA al final?
Campo: FOTO -> Custom Field o qué?.... yo creo que las imágenes las voy a descartar... es un despelote.

Bueno, eso nada más.
Gracias!
__________________
...___...
  #2 (permalink)  
Antiguo 13/04/2011, 16:00
Avatar de j_aroche
Server Ninja
 
Fecha de Ingreso: agosto-2006
Ubicación: iPhone: 14.624481,-90.487457
Mensajes: 2.066
Antigüedad: 18 años, 3 meses
Puntos: 223
Respuesta: Importar BD personalizada (sus sugerencias necesito)

Esos campos extras... como aparecen en el sitio original? o se usan para "filtrar" noticias? Si no se usan para nada más que mostrarlos en el contenido, entonces yo los agregaría al post content si más.

Ahora si se usan para filtrar o buscar posts, tocaría usar tags o categorías.

Por cierto, yo me hubiera evitado lo del ID original como custom field, haciendo que sea el ID del post en WP. La ultima vez hice los INSERTs al wp_posts a mano (saltandome el api) para que quedaran :P Digo, si es que son numéricos.
__________________
Blog: JavierAroche.com - Twitter: @j_aroche
  #3 (permalink)  
Antiguo 14/04/2011, 07:24
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 9 meses
Puntos: 535
Respuesta: Importar BD personalizada (sus sugerencias necesito)

Hola Javier, esos campos extras se usaban sólo para mostrarlos. Pero estaría bueno que ahora algunos sirvan para filtrar. Por ejemplo el campo ciudad (bah, creo que es el único que serviría).

Sobre los id's originales, si, son numéricos. Ahora, siendo un campo autoincremental no tenía idea que se los podía insertar "a mano"... pensé que era la BD quien los asignaba automáticamente. Cosa que si ocurre con Access y siempre asumí que en MySQL ocurría lo mismo! (Edito: en realidad MySQL también los asigna automáticamente, pasa que la diferencia con MSAccess es que este último no te permite darle un valor) Bueno saberlo. Entonces, si decido no usar ningún custom field (de los de WP) lo haré así, a mano. De lo contrario haré uso de la API... me resulta más fácil :perezoso:

Igualmente ahora estoy con un problema de datos en los contenidos del post. Detecté algunos casos en donde se inserta mal el post usando wp_insert_post(). Por ejemplo:


Cita:
...
...
Esta información aparece como consistente cuando se pregunta por la intención de voto.

En la alternativa de una res?ID_NOTICIAS
?ID_LINK
?VOLANTA???TITULO?ÿCOPETE???NOTICIA???FIRMA?ÿCIUDA D?ÿFECHA
?HORA?FUENTE?ÿFOTO?ÿPRINCIPAL ?HOME?ADJUNTO?ÿNOTICIA_RELACIONADA
?LECTURAS
?ULTIMA_LECTURA
?FECHA_CARGA
?USER_CARGA
?FECHA_MODIF
?USER_MODIF
?);
INSERT INTO `menu` VALUES (39,3,’Revistas’,NULL,2,?????RT INTO `noticias` VALUES (38928,56,’EL GOBERNADOR DE SANTA CRUZ ANUNCIO QUE EN OCTUBRE SE INAUGURA LA PLANTA CEMENTERA DE PICO TRUNCADO. AL ACTO ASISTIO EL PRESIDENTE KIRCHNER’,'Al lanzar su candidatura, Daniel Peralta prometió una provincia industrializada’,'El candidato a gobernado

...
...
Ya veré... ya veré...
__________________
...___...
  #4 (permalink)  
Antiguo 14/04/2011, 07:34
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 9 meses
Puntos: 535
Respuesta: Importar BD personalizada (sus sugerencias necesito)

Cita:
Iniciado por AlZuwaga Ver Mensaje
INSERT INTO `menu` VALUES (39,3,’Revistas’,NULL,2,?????RT INTO `noticias` VALUES
Mmm... esto tiene toda la pinta de ser un problema con la importación de las tablas menu y noticias desde la BD Access a MySQL usando MySQL-Front... a ver... SI: Los registros corruptos están presentes en la tabla noticias de la BD MySQL, mas no en la tabla noticias de la BD Access. Por lo que wp_insert_post() no es el culpable... Ya veré... ya veré...
__________________
...___...
  #5 (permalink)  
Antiguo 14/04/2011, 07:43
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 9 meses
Puntos: 535
Respuesta: Importar BD personalizada (sus sugerencias necesito)

Bien, creé una nueva tabla (noticias1) en la BD Access cuyo único contenido es uno de los registros corruptos. Importé esa tabla a MySQL con MySQL-Front y salió todo bien... será que alguno (MySQL-Front o Access) "se caga" cuando hay muchos registros a importar y hace desastres?

Edito: Volví a importar la tabla completa a MySQL y aparentemente no hay errores. Consultas de control como esta no retornan ningún registro:

Código:
select * from noticias where noticia like '%VALUES%'
Edito: Vuelvo a correr el script para insertar los post a WP. En 1 hora regreso ñ_Ñ!!!
__________________
...___...

Última edición por AlZuwaga; 14/04/2011 a las 08:01
  #6 (permalink)  
Antiguo 15/04/2011, 09:36
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 9 meses
Puntos: 535
Respuesta: Importar BD personalizada (sus sugerencias necesito)

Cita:
Por cierto, yo me hubiera evitado lo del ID original como custom field, haciendo que sea el ID del post en WP. La ultima vez hice los INSERTs al wp_posts a mano (saltandome el api) para que quedaran :P Digo, si es que son numéricos.
Bueno, finalmente me decidí por una mezcla: Hice uso del API con wp_insert_post() y add_post_meta() (para no escribir tanto código), pero luego tocó hacer una serie de UPDATES (también con el API):

- a wp_posts para modificar el valor del ID (de ID generado por WP a ID de origen)
- a wp_postmeta para asociar los custom fields a este ID de origen
- a wp_term_relationships para asociar los tags y las categorías a este ID de origen

El código que usé es éste:

Código PHP:
Ver original
  1. // me conecto a la "tabla fuente"
  2. $datos = $wpdb->get_results("SELECT * FROM noticias LIMIT 0, 1000");
  3.  
  4.  
  5. foreach ($datos as $dato) {
  6.     // previamente creé las categorías en WordPress. lógicamente no tienen los mismos ID's, así que tocó hacer una "traducción"de ellos
  7.     // if's concatenados usando una hoja de cálculo de excel... sé que era mejor un switch, pero esto fue más rápido :)
  8.     if($dato->ID_LINK == 1) {$nuevo_id_cat = 3;}
  9.     if($dato->ID_LINK == 38) {$nuevo_id_cat = 4;}
  10.     if($dato->ID_LINK == 2) {$nuevo_id_cat = 5;}
  11.     if($dato->ID_LINK == 3) {$nuevo_id_cat = 6;}
  12.     if($dato->ID_LINK == 4) {$nuevo_id_cat = 7;}
  13.     if($dato->ID_LINK == 5) {$nuevo_id_cat = 8;}
  14.     if($dato->ID_LINK == 47) {$nuevo_id_cat = 9;}
  15.     if($dato->ID_LINK == 43) {$nuevo_id_cat = 10;}
  16.     if($dato->ID_LINK == 59) {$nuevo_id_cat = 11;}
  17.     if($dato->ID_LINK == 7) {$nuevo_id_cat = 12;}
  18.     if($dato->ID_LINK == 6) {$nuevo_id_cat = 13;}
  19.     if($dato->ID_LINK == 49) {$nuevo_id_cat = 14;}
  20.     if($dato->ID_LINK == 50) {$nuevo_id_cat = 15;}
  21.     if($dato->ID_LINK == 56) {$nuevo_id_cat = 16;}
  22.     if($dato->ID_LINK == 61) {$nuevo_id_cat = 17;}
  23.     if($dato->ID_LINK == 24) {$nuevo_id_cat = 18;}
  24.     if($dato->ID_LINK == 8) {$nuevo_id_cat = 19;}
  25.     if($dato->ID_LINK == 34) {$nuevo_id_cat = 20;}
  26.     if($dato->ID_LINK == 35) {$nuevo_id_cat = 21;}
  27.     if($dato->ID_LINK == 9) {$nuevo_id_cat = 22;}
  28.     if($dato->ID_LINK == 10) {$nuevo_id_cat = 23;}
  29.     if($dato->ID_LINK == 11) {$nuevo_id_cat = 24;}
  30.     if($dato->ID_LINK == 13) {$nuevo_id_cat = 25;}
  31.     if($dato->ID_LINK == 26) {$nuevo_id_cat = 26;}
  32.     if($dato->ID_LINK == 14) {$nuevo_id_cat = 27;}
  33.     if($dato->ID_LINK == 46) {$nuevo_id_cat = 28;}
  34.     if($dato->ID_LINK == 15) {$nuevo_id_cat = 29;}
  35.     if($dato->ID_LINK == 25) {$nuevo_id_cat = 30;}
  36.     if($dato->ID_LINK == 60) {$nuevo_id_cat = 31;}
  37.     if($dato->ID_LINK == 54) {$nuevo_id_cat = 32;}
  38.     if($dato->ID_LINK == 21) {$nuevo_id_cat = 33;}
  39.     if($dato->ID_LINK == 22) {$nuevo_id_cat = 34;}
  40.     if($dato->ID_LINK == 18) {$nuevo_id_cat = 35;}
  41.     if($dato->ID_LINK == 17) {$nuevo_id_cat = 36;}
  42.     if($dato->ID_LINK == 19) {$nuevo_id_cat = 37;}
  43.     if($dato->ID_LINK == 23) {$nuevo_id_cat = 38;}
  44.     if($dato->ID_LINK == 52) {$nuevo_id_cat = 39;}
  45.     if($dato->ID_LINK == 44) {$nuevo_id_cat = 40;}
  46.     if($dato->ID_LINK == 53) {$nuevo_id_cat = 41;}
  47.     if($dato->ID_LINK == 20) {$nuevo_id_cat = 42;}
  48.  
  49.     //defino los datos a guardar en el post
  50.     $post = array(
  51.     //  'ID' => [ <post id> ] //Are you updating an existing post?
  52.     //  'menu_order' => [ <order> ] //If new post is a page, sets the order should it appear in the tabs.
  53.       'comment_status' => 'closed', // 'closed' means no comments.
  54.       'ping_status' => 'closed', // 'closed' means pingbacks or trackbacks turned off
  55.       'pinged' => '', //?
  56.       'post_author' => 1, //The user ID number of the author.
  57.       'post_category' => array($nuevo_id_cat), //Add some categories.
  58.       'post_content' => trim($dato->NOTICIA), //The full text of the post.
  59.       'post_date' => trim($dato->FECHA),//[ Y-m-d H:i:s ] //The time post was made.
  60.       'post_date_gmt' => trim($dato->FECHA), //[ Y-m-d H:i:s ] //The time post was made, in GMT.
  61.       'post_excerpt' => trim($dato->COPETE), //For all your post excerpt needs.
  62.       'post_name' => trim($dato->TITULO), // The name (slug) for your post
  63.       'post_parent' => 0, //Sets the parent of the new post.
  64.       'post_password' => '', //password for post?
  65.       'post_status' => 'publish', //[ 'draft' | 'publish' | 'pending'| 'future' | 'private' ] //Set the status of the new post.
  66.       'post_title' => trim($dato->TITULO), //The title of your post.
  67.       'post_type' => 'post', //[ 'post' | 'page' | 'link' | 'nav_menu_item' | custom post type ] //You may want to insert a regular post, page, link, a menu item or some custom post type
  68.       'tags_input' => trim($dato->CIUDAD), //For tags.
  69.       'to_ping' => '', //?
  70.     );
  71.    
  72.     //tomo el id del registro original
  73.     $idOriginal = $dato->ID_NOTICIAS;
  74.    
  75.     //inserto el contenido del post obteniendo el id generador por WP
  76.     $new_post_id = wp_insert_post( $post );
  77.  
  78.     //ELIMINAR DE VERSION DEFINITIVA: genero un custom field con el id original
  79.     add_post_meta($new_post_id, 'id_noticias', $dato->ID_NOTICIAS);
  80.  
  81.     //ELIMINAR DE VERSION DEFINITIVA: genero un custom field con el dato de la ciudad
  82.     if(trim($dato->CIUDAD) !== ''){
  83.         add_post_meta($new_post_id, 'ciudad', trim($dato->CIUDAD));
  84.     }
  85.  
  86.     //DECIDIR QUE HAGO CON ESTO EN VERSION DEFINITIVA: genero un custom field con el dato de la firma
  87.     if(trim($dato->FIRMA) !== ''){
  88.         add_post_meta($new_post_id, 'firma', trim($dato->FIRMA));
  89.     }
  90.  
  91.     //DECIDIR QUE HAGO CON ESTO EN VERSION DEFINITIVA: genero un custom field con el dato de la fuente
  92.     if(trim($dato->FUENTE) !== ''){
  93.         add_post_meta($new_post_id, 'fuente', trim($dato->FUENTE));
  94.     }
  95.  
  96.     //DECIDIR QUE HAGO CON ESTO EN VERSION DEFINITIVA: genero un custom field con el dato de la foto
  97.     if(trim($dato->FOTO) !== ''){
  98.         add_post_meta($new_post_id, 'foto_original', $dato->FOTO);
  99.     }
  100.  
  101.     //actualizo el ID del post recién insertado con el ID original
  102.     $wpdb->update( 'wp_posts', array( 'ID' => $idOriginal), array( 'ID' => $new_post_id ), $format = null, $where_format = null );
  103.     //actualizo los custom field antes insertados para asociarlos al ID original
  104.     $wpdb->update( 'wp_postmeta', array( 'post_id' => $idOriginal), array( 'post_id' => $new_post_id ), $format = null, $where_format = null );
  105.     //actualizo los tags y las categorías que tenga el post recién insertado para asociarlos al ID original
  106.     $wpdb->update( 'wp_term_relationships', array( 'object_id' => $idOriginal), array( 'object_id' => $new_post_id ), $format = null, $where_format = null );
  107.  
  108. } //foreach

Así como está... Le ves algo que haya omitido, Javier? (por ejemplo hacer un update a alguna tabla que no me haya percatado).

Gracias!
__________________
...___...
  #7 (permalink)  
Antiguo 15/04/2011, 12:30
Avatar de j_aroche
Server Ninja
 
Fecha de Ingreso: agosto-2006
Ubicación: iPhone: 14.624481,-90.487457
Mensajes: 2.066
Antigüedad: 18 años, 3 meses
Puntos: 223
Respuesta: Importar BD personalizada (sus sugerencias necesito)

Usar wp_insert_post es buena idea ya que aplica los filtros de cosas raras en el código/texto del post.

Me parece que alli está todo lo que necesitas cambiar, no veo que falte otra tabla :)
__________________
Blog: JavierAroche.com - Twitter: @j_aroche

Última edición por j_aroche; 20/04/2011 a las 00:47
  #8 (permalink)  
Antiguo 18/04/2011, 07:06
Avatar de AlZuwaga
Colaborador
 
Fecha de Ingreso: febrero-2001
Ubicación: 34.517 S, 58.500 O
Mensajes: 14.550
Antigüedad: 23 años, 9 meses
Puntos: 535
Respuesta: Importar BD personalizada (sus sugerencias necesito)

Gracias Javier!
__________________
...___...

Etiquetas: bd, personalizada, sugerencias
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 07:49.