Tutorial Crear post en WordPress de forma automática con PHP

Mensajes
115
Puntuación de reacción
0
Hola, quiero compartir un código para crear post en WordPress de forma automatizada.

Vamos a obtener las películas de algún sitio web para publicarlas en nuestra web.

Como ejemplo he tomado a Ver Aquarius: Primera Temporada / Temporada 1 Online Gratis Pelicula en Español

A tener en cuenta que se puede programar un scraper que vaya guardando todas las url de todas las películas de ese sitio web y luego ir tomando cada url para irla scrapeado y guardando en WP

Definimos el header
PHP:
<?php
header('Content-Type: text/html; charset=utf-8');

// Set the timezone so times are calculated correctly

Recuperamos en enlace de la base de datos

PHP:
//recuperar enlaces
$recuperar_enlaces = "SELECT * FROM table WHERE scraper=0 ORDER by id ASC LIMIT 1";
$enlaces = mysqli_query($conexion,$recuperar_enlaces);
while($enlace = mysqli_fetch_array($enlaces)):
$id_enlace = $enlace["id"];
$enlace_escrapear = $enlace["pelicula"];

echo '<a href="' . $enlace_escrapear . '" target="_blank">'. $id_enlace .' - Ir a la película</a><br>';

$curl = curl_init($enlace_escrapear);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, TRUE);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($curl, CURLOPT_TIMEOUT, 60);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
 
$page = curl_exec($curl);
 
if(curl_errno($curl)) // check for execution errors
{
    echo 'Scraper error: ' . curl_error($curl);
    exit;
}
 
curl_close($curl);

Ahora vamos a obtener el titulo e imagen.

PHP:
////////// Titulo //////////
$regex = '></span> (.*?)<a href=/s';
preg_match_all($regex, $page, $rnombre);
$titulo =  $rnombre[1][0];



////////// Imagen //////////
$regex = '<img src="(.*?)" height="250"/s';
preg_match_all($regex, $page, $rimagen);

$imagen = trim($rimagen[1][0]);

Copiamos la imagen a nuestro servidor

PHP:
$mes = date('m');
$ruta_imagen = "../uploads/2015/" . $mes. "/". $alias. ".jpg";
$ruta_img_corta = "2015/" . $mes. "/". $alias. ".jpg";
$imagen = file_get_contents($imagen);
file_put_contents($ruta_imagen, $imagen);

Declaramos los valores a guardar

PHP:
$hoy = date("Y-m-d H:i:s");
$post_author = 1;
$post_status = "publish";
$post_name = $alias;
$post_type = "portfolio";

Leemos los archivos de WordPress, este script debe alojar en la carpeta wp-content

PHP:
// Load WordPress
require_once '../../wp-load.php';
require_once ABSPATH . '/wp-admin/includes/taxonomy.php';

Vamos a crear el post, dependerá de la plantilla utilizada los meta

PHP:
// Create post
$id_post = wp_insert_post(array(
    'post_title'    => $titulo,
    'post_content'  => $contenido_es,
    'post_date'     => $hoy,
    'post_author'   => 1,
    'post_type'     => 'portfolio',
    'post_status'   => 'publish',
));

if ($id_post) {

			// $filename should be the path to a file in the upload directory.
		$filename = $ruta_imagen;
		
		// The ID of the post this attachment is for.
		$parent_post_id = $id_post;
		
		// Check the type of file. We'll use this as the 'post_mime_type'.
		$filetype = wp_check_filetype( basename( $filename ), null );
		
		// Get the path to the upload directory.
		$wp_upload_dir = wp_upload_dir();
		
		// Prepare an array of post data for the attachment.
		$attachment = array(
			'guid'           => $wp_upload_dir['url'] . '/' . basename( $filename ), 
			'post_mime_type' => $filetype['type'],
			'post_title'     => preg_replace( '/\.[^.]+$/', '', basename( $filename ) ),
			'post_content'   => '',
			'post_status'    => 'inherit'
		);
		
		// Insert the attachment.
		$attach_id = wp_insert_attachment( $attachment, $filename, $parent_post_id );
		
		 $filename = $ruta_imagen;
		
		// Make sure that this file is included, as wp_generate_attachment_metadata() depends on it.
		require_once( '../../wp-admin/includes/image.php' );
		
		// Generate the metadata for the attachment, and update the database record.
		 $attach_data = wp_generate_attachment_metadata( $attach_id, $filename );
		 wp_update_attachment_metadata( $attach_id, $attach_data );
	
	
	
	// Set category - create if it doesn't exist yet
    wp_set_post_terms($id_post,'5', 'portfolio_categories');

    // Add meta data, if required
    add_post_meta($id_post, 'rttheme_project_info', $project_info);
	add_post_meta($id_post, 'rttheme_project_info_title', 'Detalles');
	add_post_meta($id_post, 'rttheme_portfolio_desc', $descripcion);
	add_post_meta($id_post, 'rttheme_featured_image_usage', 'slider');
	add_post_meta($id_post, 'rttheme_portfolio_post_format', 'image');
	add_post_meta($id_post, 'rtthemeportfolio_max_image_height', 400);
	add_post_meta($id_post, '_thumbnail_id',$attach_id);
	
	echo "pelicula Importada con éxito " . $enlace_escrapear;
	
	$actualizar_scraper_enlace = "UPDATE table SET scraper=1 WHERE id='{$id_enlace}'";
	mysqli_query($conexion,$actualizar_scraper_enlace);

} else {
    echo "WARNING: Failed to insert post into WordPress\n";
}

endwhile;

?>

Este script necesita que se adapte a cada plantilla pero ya he indicado lo esencial.

Los datos que cambian son el sitio a scrapear y el contenido que se obtiene como imágenes, descripción, enlaces, etc

Y también la estructura de la plantilla.

Por último sólo se tiene que programar el script con un cron para que vaya publicando cada x tiempo.

Cualquier duda por favor comentar.
 
Mensajes
192
Puntuación de reacción
0
Esta bueno el tutorial para personas con conocimientos de programación para alguien que no tenga ningún tipo de conocimientos solo vera códigos en ingles jajaja

Seria bueno que seas un poco mas explicativo con algunos detalles :D
 

websgp

Moderador
Miembro del equipo
Usuario de Bronce
Mensajes
3,724
Puntuación de reacción
13
Interesante, pero tienes que detallarlo mejor para usuarios que no saben programar
 
Mensajes
42
Puntuación de reacción
0
Sin ánimo de ofender a nadie, creo que está explicado correctamente para quien lo puede aplicar. ¿Qué quiero decir con esto? Que si no tienes los conocimientos básicos, por mucho que te expliquen, esto no es para ti, ya que tendrás que adaptarlo sí o sí a tu código y para eso, hace falta tener nociones intermedias :p

Para los que quieran probar a automatizar / crear autoblogs, les recomiendo que le echen un ojo a https://ifttt.com que es bastante intuitivo. Crear una receta del tipo: Si se actualiza X blog, crea un post en MI BLOG. Vaya, el copiar y pegar de toda la vida :D
 

ErickGS

Piedra
Usuario de Piedra
Mensajes
49
Puntuación de reacción
0
Justo ayer estaba intentado ver cómo es que se hacían amigo! Lo guardaré para probar en mi tiempo libre, gracias por compartir.

¿Sabes si hay algún método para evitar que las webs bloqueen el script? A veces sitios con Cloudflare no dejan XD
 

pegui

Cobre
Usuario de Bronce
Mensajes
422
Puntuación de reacción
0
Una pregunta amigo ese script crea automáticamente post sin necesidad de estar creando post por post, cuanto me cobrarias por ayudarme a colocar eso en mi sitio web y decirme como hacer para que quede solo creando los post
 

ErickGS

Piedra
Usuario de Piedra
Mensajes
49
Puntuación de reacción
0
Una pregunta amigo ese script crea automáticamente post sin necesidad de estar creando post por post, cuanto me cobrarias por ayudarme a colocar eso en mi sitio web y decirme como hacer para que quede solo creando los post

Sólo necesitarias hacer un Cron Job desde tu cPanel para que se ejecute el script cada X tiempo :D

Por cierto, encontré otro ejemplo que sirve para lo que decía que Cloudflare bloqueaba algunos servidores:

PHP:
<?PHP
function get_content_url($url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); 
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
    curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8');

    $data = curl_exec($ch); 
    curl_close($ch);

    return $data;
}

$html = get_content_url('http://foroblackhat.com/');
preg_match('/<title>(.*)<\/title>/i', $html, $title);
$title_out = $title[1];

Este ejemplo fue del usuario Sauron en el foro Black Hat :D
 
Mensajes
234
Puntuación de reacción
0
he le hechare un ojeada
gracias , preguntare mis dudas si no es molestia .
 
Mensajes
94
Puntuación de reacción
0
habra que echarle una lectura con mucha paciencia , y hacer algunas pruebas, gracias por el aporte
 
Mensajes
115
Puntuación de reacción
0
Justo ayer estaba intentado ver cómo es que se hacían amigo! Lo guardaré para probar en mi tiempo libre, gracias por compartir.

¿Sabes si hay algún método para evitar que las webs bloqueen el script? A veces sitios con Cloudflare no dejan XD

Aveces tienes que activar el HTTPS cuando haces el Curl y yo he hecho travesuras con sitios populares y no me han baneado la IP, sino tendrás que cambiar de proveedor de hosting o pedir una nueva
 
Mensajes
14
Puntuación de reacción
0
para sitios con cache proxy gnix server es mas complicado obtener las imagenes si estas se encuentran alojadas en el mismo sitio web
 

CPA

Hierro
Mensajes
107
Puntuación de reacción
1
@diaz Gracias por el tuto, miro que es de junio, por lo que preguntaba si aun funciona?
 

mendezni

Estafador
Mensajes
40
Puntuación de reacción
0
se mira bueno el tuto aun que te fata hacerlo un poco mas descriptivo para aquellos que no saben programación pero quieren también automatizar su web
 
Mensajes
3
Puntuación de reacción
0
lo eh puesto pero sigo sin entender algunas cosas como donde se debe de poner el enlace a scrapear o como es que se debe colocar el script
yo lo e echo asi /wp-content/plugins/scraper/index.php :confused:
 
Arriba