Bon le sujet n'a pas vraiment sa place ici mais je n'ai pas trouvé de meilleur endroit.
J'aimerais mettre en place un Cron pour executer un script toutes les heures et tous les jours. J'ai un mutualisé sur OVH pour tester ça mais reprenons depuis le début.
Je me suis basé sur ceci : http://forum.ovh.com/showthread.php?81008-HOW-TO-lancement-des-t%E2ches-planifi%E9es-Wordpress-(wp-cron-php)-Drupal-7-etc pour comprendre comment configurer un cron avec OVH.
Donc j'ai créer une page sur mon site WP qui est http://mldeg.com/site/update qui execute un script récupérant la derniere vidéo ajouté sur une playlist YT pour l'insérer en article bref je vous passe les détails.
En suite j'ai créer un dossier "scripts" à la racine de mon FTP (au même niveau de 'www') ou j'y ai créer un fichier "wgetcron.sh" qui contient ceci :
#!/bin/bash
ERRLOG=~/logs-scripts/wgetcron.log
TARGET=http://mldeg.com/site/update/wp-cron.php # Adapter selon étape 1 (1a ou 1b ou autre selon CMS)
UA=WgetCron-ViaPlanficateursTachesOVH # Adapter pour que ça passe à travers tout filtrage .htaccess, mais aussi pour que vous soyez sûr que la requête provient bien de votre exécution de script...
wget -nv -U $UA -O /dev/null $TARGET >/dev/null 2>>$ERRLOG
Ainsi qu'un dossier "logs-scripts" qui contient un fichier wgetcron.log qui est vide.
Problème, je n'ai pas compris quoi mettre au paramètre "UA" dans mon fichier *.sh.
Voici ma planification sur OVH
Si quelqu'un a une idée car je suis un peu paumé ^^
Bonsoir,
j'ai finalement résolu mon problème, j'ai pointé via le planificateur OVH vers le fichier wp-cron.php (situé à la racine de Wordpress) et j'ai créer ma fonction dans functions.php en suivant la doc :
http://codex.wordpress.org/Function_Reference/wp_schedule_event
add_action( 'wp', 'prefix_setup_schedule' );
/**
* On an early action hook, check if the hook is scheduled - if not, schedule it.
*/
function prefix_setup_schedule() {
if ( ! wp_next_scheduled( 'prefix_hourly_event' ) ) {
wp_schedule_event( time(), 'hourly', 'prefix_hourly_event');
}
}
add_action( 'prefix_hourly_event', 'prefix_do_this_hourly' );
/**
* On the scheduled action hook, run a function.
*/
function prefix_do_this_hourly() {
// do something every hour
}
Hello !
J'ai renseigné "http://mldeg.com/site/update/wp-cron.php" étant donné que je suis Wordpress, du coup l'url renseigné est absolue. J'ai viré le htpswd en attendant mais hélas ça ne fonctionne toujours pas malgré que le Cron s'éxecute (je reçois des mails de confirmation) mais rien ne se passe.
Bonjour,
<?php
system('/usr/bin/wget -O - -q http://mldeg.com/site/update/wp-cron.php');
Que vous retourne ce code ?
Cordialement.
Rien du tout. Même en enlevant "/wp-cron.php". Pourtant en allant sur l'url http://mldeg.com/site/update, le script fonctionne bien.
Bonjour, étrange cela, le script fonctionne donc ses juste la tâche cron qui elle ne veux pas fonctionné où l'API ?
Tenter ceci :
<?php
$ERRLOG = "~/logs-scripts/wgetcron.log";
$TARGET = "http://mldeg.com/site/update/wp-cron.php"; //Adapter selon étape 1 (1a ou 1b ou autre selon CMS)
$UA = "WgetCron-ViaPlanficateursTachesOVH"; //Adapter pour que ça passe à travers tout filtrage .htaccess, mais aussi pour que vous soyez sûr que la requête provient bien de votre exécution de script...
system('wget -nv -U '.$UA.' -O /dev/null '.$TARGET.' >/dev/null 2>>'.$ERRLOG);
Cordialement.
Ahhh je crois savoir d'ou viens le problème. Car mon script fonctionne en local mais pas en dev. En fait il récupère pas le json en dev mais il le récup bien en local avec file_get_contents().
Warning: file_get_contents(https://gdata.youtube.com/feeds/api/users/TheMLDEG/playlists?v=2&alt=json): failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden in /home/mldegcompj/www/site/wp-content/themes/mldeg/lib/functions/youtube_playlist.php on line 5
Warning: file_get_contents(https://gdata.youtube.com/feeds/api/users/TheMLDEG/uploads?v=2&alt=json): failed to open stream: HTTP request failed! HTTP/1.0 403 Forbidden in /home/mldegcompj/www/site/wp-content/themes/mldeg/lib/functions/youtube_playlist.php on line 22
Fatal error: Cannot use object of type WP_Error as array in /home/mldegcompj/www/site/wp-content/themes/mldeg/lib/functions/youtube_playlist.php on line 77
EDIT : En tout cas ça a l'air de fonctionner une fois sur dix...
Bonjour,
Pourrez-tu mètre à disposition le code source de cette unique page ?
Merci.
Cordialement.
Okay mais c'est un peu bourrin.
<?php
$user_id = 'TheMLDEG';
$url = "https://gdata.youtube.com/feeds/api/users/".$user_id."/playlists?v=2&alt=json";
$data = json_decode(file_get_contents($url), true);
$info = $data"feed"];
$playlist = $info"entry"];
$nplaylist = count($playlist);
// Create Category if there is a new playlist
for ($i=0; $i < count($playlist); $i++) {
$cat_name = $playlist$i]'title']'$t'];
$term = term_exists($cat_name, 'category');
if ($term == 0 && $term == null) {
wp_insert_term($cat_name, 'category');
}
}
$url = "https://gdata.youtube.com/feeds/api/users/". $user_id ."/uploads?v=2&alt=json";
$data = json_decode(file_get_contents($url), true);
$info = $data"feed"];
$video = $info"entry"];
$nVideo = 1; //count($video);
$title = $video[0]'title']'$t'];
$description = $video[0]'media$group']'media$description']'$t'];
$args = array(
'type' => 'post',
'hide_empty' => 0,
'orderby' => 'name',
'taxonomy' => 'category'
);
$categories = get_categories( $args );
$series = trim ( preg_replace('# \#.([0-9]{1,100})#', '', $title) );
$cat_id = 1;
for ($i=0; $i < count($categories); $i++) {
if(trim($series) == trim($categories$i]->name)) {
$cat_id = $categories$i]->term_id;
} elseif(strstr($series, "Week's Video")) { // Check si c'est un Week's Video
$cat = get_term_by('slug', 'weeks-video', 'category');
$cat_id = $cat->term_id;
}
}
// Insert Post
$post = array(
'post_content' => $description, // The full text of the post.
'post_name' => urlencode($title), // The name (slug) for your post
'post_title' => $title, // The title of your post.
'post_status' => 'publish', // Post status
'post_author' => null, // Post Author
'post_category' => array($cat_id)
);
if( wp_exist_post_by_title( $video[0]'title']'$t'] ) == false ) {
//var_dump(!wp_exist_post_by_title( $video[0]'title']'$t'] ));
$post_id = wp_insert_post( $post );
//add_post_meta($post_id, 'video_id', $videoID);
add_post_meta($post_id, 'thumb', $video[0]'media$group']'media$thumbnail'][2]'url']);
$src = $video[0]'media$group']'media$thumbnail'][2]'url'];
$filename = $video[0]'gd$etag'];
if( !class_exists( 'WP_Http' ) )
include_once( ABSPATH . WPINC. '/class-http.php' );
$photo = new WP_Http();
$photo = $photo->request( $src );
$attachment = wp_upload_bits( $filename.'.jpg', null, $photo'body'], date("Y-m") );
$filetype = wp_check_filetype( basename( $attachment'file'] ), null );
$postinfo = array(
'post_mime_type' => $filetype'type'],
'post_title' => $filename,
'post_content' => '',
'post_status' => 'inherit',
);
$filename = $attachment'file'];
$attach_id = wp_insert_attachment( $postinfo, $filename );
// ATTACH
set_post_thumbnail($post_id, $attach_id);
if( !function_exists( 'wp_generate_attachment_data' ) )
require_once(ABSPATH . "wp-admin" . '/includes/image.php');
$attach_data = wp_generate_attachment_metadata( $attach_id, $filename );
wp_update_attachment_metadata( $attach_id, $attach_data );
}
?>
Bonjour, pourriez vous tester ceci et me dire ci cela marche :
$playlist_id = "Votre_ID_De_Playlist";
$url = "https://gdata.youtube.com/feeds/api/playlists/".$playlist_id."?v=2&alt=json";
$data = json_decode(file_get_contents($url),true);
$info = $data"feed"];
$video = $info"entry"];
$nVideo = count($video);
print("Playlist Name: ".$info"title"]'$t'].'<br/>');
print("Number of Videos (".$nVideo."):<br/>");
for($i=0;$i<$nVideo;$i++){
print("Name: ".$video$i]'title']'$t'].'<br/>');
print("Link: ".$video$i]'link'][0]'href'].'<br/>');
print("Image: <img src='".$video$i]'media$group']'media$thumbnail'][1]'url']."' /><br />");
}
Cordialement.
Hello,
Oui ça fonctionne bien :) en local en tout cas, j'ai pas testé en dev (serveur distant)
EDIT : ça fonctionne aussi en dev http://mldeg.com/site/update
Bonjour, tenter donc de l'adapter en remplaçant l'ancien script pour vois ce que cela donne :D
Cordialement.
Après 3 semaines je reviens vers vous.
Donc après avoir réadapté mon code, le log du planifieur de tâche OVH me ressort ça :
-------------------------== Début ==-------------------------
++ 2014-10-02 13:55:02.953341 executing: /homez.54/mldegcompj/scripts/wgetcron.sh
command /homez.54/mldegcompj/scripts/wgetcron.sh must be executable
-- 2014-10-02 13:55:03.039229 exitcode: 255
-------------------------== Fin ==-------------------------
Mais le script n'a pas l'air de s'exécuter.
Bonsoir,
l'erreur proviens du wgetcron.sh.
Pouvez-vous y afficher le code de ce fichier ?
PS : C'est un problème d’arborescence. Il faut utiliser les chemins absolus. (Dans votre WGETCRON.SH modifier le chemins du fichier !)
Cordialement.
Voici mon code.
#!/bin/bash
ERRLOG=~/logs-scripts/wgetcron.log
TARGET=http://mldeg.com/site/update/wp-cron.php
UA=WgetCron-ViaPlanficateursTachesOVH
wget -nv -U $UA -O /dev/null $TARGET >/dev/null 2>>$ERRLOG
Ou faut-il utiliser les chemins absolus ? Sinon je continue à penser que la valeur dans UA n'est pas valide mais je ne sais pas quoi y mettre.
Bonjour,
TARGET=http://mldeg.com/site/update/wp-cron.php par un chemin absolue du fichier, exemple : /var/www/mldeg/wp-cron.php
Cordialement :)
Justement je n'en suis pas certain. Dans le tuto il précise bien de mettre l'url de la page ou s'execute le script. http://forum.ovh.com/showthread.php?81008-HOW-TO-lancement-des-t%E2ches-planifi%E9es-Wordpress-(wp-cron-php)-Drupal-7-etc
"1.a. Pour Wordpress : on prend l'URL de la racine du blog et l'on rajoute "wp-cron.php" au bout. Par exemple : "http://www.example.com/wp-cron.php" ou "http://www.example.org/chemin/de/wordpress/wp-cron.php"."
Bonjour, effectivement... Pour tout vous dire j'utilise très très rarement le CRONJOB..
regarder de ce côté car effectivement je commence à sécher, de mon côté je vais faire des test et vous en faire des retour (sauf si le sujet et déjà résolue ^^).
Cordialement.
Merci pour votre aide ^^
Je teste un nouveau truc et je vous tien au courant si ça fonctionne. Je me base sur ce tuto: http://www.iceable.com/fr/optimiser-wordpress-remplacer-wp_cron-par-un-vrai-cron-job/
Est-il possible qu'il manque l'appel de fichiers internes à Wordpress pour exécuter certaines fonctions ?