225 lines
7.2 KiB
PHP
225 lines
7.2 KiB
PHP
<?php
|
|
/*
|
|
Plugin Name: Import de mesures
|
|
Description: Ajoute automatiquement les mesures depuis le site des propositions
|
|
Author: Matt Marcha
|
|
Version: 0.1
|
|
*/
|
|
|
|
/* Script permettant de récupérer les données des proposition d'une URL donnée, et de les intérger en tant qu'articles sur le site WP pour éviter de tout copier/coller
|
|
|
|
1 / Récupérer la page html (en ligne)
|
|
2/ séparer et identifier le conteneur commun aux articles
|
|
3/ Déclencher une action pour chaque article :
|
|
a - séparer et stocker le titre, le contenu, la date, l'url du pdf
|
|
b - formater la date pour qu'elle colle avec les besoins de WP
|
|
c - créer un nouveau média à partir de l'url du pdf et le stocker en tant qu'objet
|
|
d - Créer un nouvel article avec :
|
|
auteur = les150
|
|
catégorie = par défaut
|
|
tag = récupérer le groupe de travail ou l'indiquer manuellement
|
|
titre = titre récupéré
|
|
contenu = premier paragraphe récupéré ?
|
|
date = date de l'import
|
|
meta-url du pdf = url de l'objet pdf
|
|
e - enregistrer l'article
|
|
*/
|
|
|
|
|
|
// Avant tout, on crée une page spcéifique dans l'interface d'admin avec un gros bouton pour lancer le bouzin
|
|
function ccc_register_import_page() {
|
|
|
|
add_menu_page('Import de mesures', 'Import mesures', 'import', 'ccc-import', 'ccc_import_page', 'dashicons-migrate', 85);
|
|
}
|
|
add_action('admin_menu', 'ccc_register_import_page');
|
|
|
|
function ccc_import_page() {
|
|
//Si on a validé le formulaire avec une URI, on lance la fonction d'import
|
|
if (isset($_POST['ccc-url'])) {
|
|
import_posts($_POST['ccc-url']);
|
|
}
|
|
|
|
//Affichage de la page
|
|
$out = '
|
|
<h1>Import des mesures</h1>
|
|
|
|
<form method="POST">
|
|
<label for="ccc-url">URI de la page contenant les mesures</label><br />
|
|
<input id="ccc-url" name="ccc-url" type="text" size="100"/><br />
|
|
<input type="submit" value="Lancer l\'import !"/>
|
|
</form>';
|
|
echo $out;
|
|
return true;
|
|
}
|
|
|
|
//Récupération et traitement du fichier HTML
|
|
function import_posts($url) {
|
|
|
|
//on inclut le DOM Parser
|
|
include_once('simple_html_dom.php');
|
|
//et on récupère le dOM du document
|
|
$dom = file_get_html($url);
|
|
//Structure : div globale = .panel-container
|
|
//puis pour chaque année une div
|
|
//puis div.news-wrap
|
|
// p.news-date
|
|
// h2.news-title
|
|
// p.lead-in !!exclure le a !!
|
|
// p.led-in a >> choper le href et rajouter http:://erytech.com/ au début
|
|
|
|
// Structure : en deux pages
|
|
//Page 1 : catégorie globale, sous catégorie (deux tags à stocker) et URL
|
|
// Page 2 à partir de l'URL : titre de la mesure, ID de l'ancre à ajouter à l'url, premier paragraphe
|
|
|
|
$i = 0;
|
|
$errors = "";
|
|
$nb_err = 0;
|
|
|
|
// On récupère la famille globale
|
|
$family = $dom->find("h1.elementor-heading-title", 0)->plaintext;
|
|
|
|
|
|
foreach ($dom->find("div.jet-listing-grid__item") as $main){
|
|
// On récupère le titre de la grande catégorie
|
|
$cat = $main->find("section", 0);
|
|
$cat_title = $cat->find('div.jet-listing-dynamic-field__content', 0)->plaintext;
|
|
|
|
// puis le nom et le lien de la sous-cat
|
|
$ss_cat = $main->find("section", 1);
|
|
$ss_cat_title = $ss_cat->find("a.jet-listing-dynamic-link__link", 0)->plaintext;
|
|
$link = $ss_cat->find("a.jet-listing-dynamic-link__link", 0)->href;
|
|
|
|
sleep(5);
|
|
//on va chercher les mesures maintenant
|
|
$dom2 = file_get_html($link);
|
|
|
|
|
|
foreach ($dom2->find("div.elementor-accordion div.elementor-accordion-item") as $measure) {
|
|
$measure_title = preg_replace("/^[0-99]\. /", "", $measure->find("a.elementor-accordion-title", 0)->plaintext);
|
|
$measure_link = $link . "#" . $measure->find("div.elementor-tab-title", 0)->id;
|
|
$measure_desc = $measure->find("div.elementor-tab-content p", 0)->plaintext . "...";
|
|
|
|
// On a tout, on peut créer la mesure en bdd!
|
|
$id_post = wp_insert_post([
|
|
'post_title' => $measure_title,
|
|
'post_excerpt' => $measure_desc,
|
|
'post_status' => 'publish',
|
|
'tags_input' => [$family, $cat_title, $ss_cat_title],
|
|
'post_author' => 2
|
|
], true);
|
|
|
|
if ($id_post != 0) {
|
|
update_field("proposition-url", $measure_link, $id_post);
|
|
$i++;
|
|
}
|
|
else {
|
|
$nb_err++;
|
|
$errors .= "<li> $measure_title </li>";
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
/*foreach ($dom->find('div.news-wrap') as $article) {
|
|
//On récupère les données pour chaque article
|
|
$title = $article->find('h2.news-title', 0)->plaintext;
|
|
$date = $article->first_child()->plaintext;
|
|
$content = $article->find('p.lead-in', 0) ?? $article->find('p.news-body', 0) ?? " ";
|
|
$pdf = $article->find('a.sec-01-btn', 0);
|
|
|
|
//Traitement de la date pour la mettre au bon format
|
|
$date_ok = false;
|
|
|
|
//définition deséléments à remplacer dans la date
|
|
$month = ["1", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
|
|
$mois = ["/1er/", "/Janvier/i", "/Février/i", "/Mars/i", "/Avril/i", "/Mai/i", "/Juin/i", "/Juillet/i", "/Ao[û|u]t/i", "/Septembre/i", "/Octobre/i", "/Novembre/i", "/Décembre/i"];
|
|
// C'est parti !
|
|
$date = preg_replace($mois,$month,$date);
|
|
$date = explode(" ", $date);
|
|
$date = strtotime("$date[0] $date[1] $date[2]");
|
|
if (date('Y', $date) > '2010') {
|
|
$date_ok = true;
|
|
//pis on la transforme
|
|
$date = date("Y-m-d H:i:s", $date);
|
|
}
|
|
|
|
|
|
//Nettoyage de la section content pour virer le lien et le saut de ligne
|
|
if ($content != " ") {
|
|
if ($content->find('a', 0)) {
|
|
$content->find('a', 0)->outertext = "";
|
|
}
|
|
if ($content->find('br', -1)) {
|
|
$content->find('br', -1)->outertext = "";
|
|
}
|
|
}
|
|
$content = addslashes($content);
|
|
|
|
//Récupération du fichier PDF, ajout en mediathèque et génération du lien
|
|
//on récupère le nom du fichier
|
|
if(isset($pdf->href)) {
|
|
$pdf_name = explode("/", $pdf->href);
|
|
$pdf_name = end($pdf_name);
|
|
//on récupère l'url complète du fichier
|
|
$pdf_url = "http://erytech.com/" . str_replace(["../", "./"], "", $pdf->href);
|
|
//et on copie le distant sur le serveur
|
|
$upload_dir = wp_upload_dir();
|
|
$pdf_local_path = $upload_dir['basedir'] . "/pdf/" . $pdf_name;
|
|
// on récupère le retour dans une fonction pour vérifier que tout est ok
|
|
$pdf_ok = copy($pdf_url, $pdf_local_path);
|
|
|
|
}
|
|
|
|
|
|
//Ajout de l'article !
|
|
if($pdf_ok && $date_ok ){
|
|
$id_post = wp_insert_post([
|
|
'post_date' => $date,
|
|
'post_title' => $title,
|
|
'post_content' => $content,
|
|
'meta_input' => ["_url_pdf" => substr($pdf_local_path, 39)],
|
|
'post_status' => 'publish',
|
|
// ajout de la catégorie
|
|
'post_category' => ['16'],
|
|
], true);
|
|
|
|
if ($id_post != 0) {
|
|
//définition de la langue
|
|
pll_set_post_language($id_post, 'en');
|
|
|
|
$i++;
|
|
}
|
|
else {
|
|
$nb_err++;
|
|
$errors .= "<li>
|
|
$date : $title
|
|
</li>";
|
|
}
|
|
} // Sinon on recense l'erreur
|
|
else {
|
|
$nb_err++;
|
|
$errors .= "<li>
|
|
$date : $title
|
|
</li>";
|
|
}
|
|
}*/
|
|
|
|
|
|
|
|
// Affichage du récap'
|
|
echo "$i mesure(s) importé(s)<br />
|
|
$nb_err erreurs d'import :<br /><ul>
|
|
$errors
|
|
</ul>";
|
|
|
|
}
|