commit initial
This commit is contained in:
commit
68a3cf66e1
224
ccc-import-articles.php
Normal file
224
ccc-import-articles.php
Normal file
|
@ -0,0 +1,224 @@
|
|||
<?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>";
|
||||
|
||||
}
|
2353
simple_html_dom.php
Normal file
2353
simple_html_dom.php
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue