Récupération des articles du site statique et migration des pages-articles dans Spip

/",$dochtml,$matches); $key = key($matches[1]); $val = current($matches[1]); while(list ($key, $val) = each ($matches[1])) { echo ('
traitement de '.$val.'
'); recup_infos($val); echo("
"); }; echo ("fini !"); break; // c'est fini ! //récupère les infos de la page web, et traite son contenu //après l'avoir téléchargée function recup_infos($adresse) { //Quelques variables qu'il faut changer en fonction des cas: //***À modifier par les utilisateurs*** $auteur=20; //id_auteur de tous les articles récupérés dans Spip $id_rub=15; //id_rubrique de ces articles $id_mot=236; //id_mot à affecter à chaque article. //On récupère la page à traiter $page_a_traiter=recup_page($adresse); //on nettoie le HTML //DESACTIVE (fonctionne pas chez moi !)$page_a_traiter=nettoiehtml($page_a_traiter); //On extrait les éléments de la page: //le titre $titre=cherchertitre($page_a_traiter); $titre=html_entity_decode($titre); //un titre intelligible ! $titre=html_to_spip($titre); //un titre intelligible ! if (!$titre) {$titre=$adresse;} //pas de titre ? -> le titre sera l'URL if ($titre=="Untitled Document") {$titre=$adresse;} //pas de titre ? -> le titre sera l'URL if ($titre=="Document sans-titret") {$titre=$adresse;} //pas de titre ? -> le titre sera l'URL if ($titre=="Page normale sans titre") {$titre=$adresse;} //pas de titre ? -> le titre sera l'URL if ($titre=="") {$titre=$adresse;} //pas de titre ? -> le titre sera l'URL echo ("titre :".$titre."
"); //le body $body=chercherbody($page_a_traiter); //on modifie le body pour le spipifer (raccourcis & co) $body=modifie_texte($body,$adresse); //intégration de l'article dans Spip. cree_article($titre,$body,$adresse,$id_rub,$auteur,$id_mot); } function recup_page ($adresse) //met une page web dans une chaîne { $page_a_traiter = file_get_contents($adresse); return $page_a_traiter; } function cherchertitre($ascruter) //met le contenu de dans une chaîne { preg_match("/()(.*?)(<\/title>)/i",$ascruter, $recherche); $titre = $recherche [2]; return $titre; } function chercherbody ($ascruter) //met le contenu de <body></body> dans une chaîne { preg_match('/(<body.*>)(.*)(<\/body>)/iUs',$ascruter, $recherche); $contenu = $recherche [2]; return $contenu; } function cree_article($titre,$texte,$adresse,$id_rub,$auteur,$id_mot) //Insère un nouvel article dans Spip. { $url_site = $adresse; $nom_site = $titre; //article $sql = "INSERT INTO spip_articles (titre, texte, id_rubrique , nom_site, url_site, statut, date, chapo) VALUES ('".addslashes($titre)."','".addslashes($texte)."','$id_rub','".addslashes($nom_site)."','".addslashes($url_site)."', 'prepa',NOW())"; $result = spip_query($sql); $id_article=spip_insert_id(); // auteur $sql = "INSERT INTO spip_auteurs_articles (id_auteur, id_article) VALUES (" . $auteur . ", " . $id_article . ")"; $result = spip_query($sql); // mot-clé $sql = "INSERT INTO spip_mots_articles (id_mot, id_article) VALUES (" . $id_mot . ", " . $id_article . ")"; $result = spip_query($sql); echo("<p><em>L'article n°".$id_article." (titre : ".$titre." ) est dans la base de Spip !</em></p>"); return true; } function modifie_texte ($texte,$url) //modifie le texte de l'article afin qu'il soit mieux lisible //en remplaçant du HTML par des raccourcis Spip, et en remplaçant les //url relatives en url absolues (permet aux liens de fonctionner et aux //images de s'afficher { $texte=preg_replace('/src=\"(.*?)\"/ie',"url_absolues('\$1','".$url."', 'src=\"')",$texte); $texte=preg_replace('/href=\"(.*?)\"/ie',"url_absolues('\$1','".$url."','href=\"')",$texte); $texte=preg_replace('/href=\".*\" onClick=\".*\(\'(http:\/\/.*)\'.*\"/iUs',"href=\"\$1\"",$texte); //pour les pages pénibles dans lesquelles il y a du jscript pour ouvrir des liens (en plus c'est idiot...) $texte=html_entity_decode($texte); //plus lisble avec les caractères accentués et ligaturés normaux, non ? $texte=html_to_spip($texte); $texte=preg_replace('/<a.*href=\"(.*)\".*>(.*)<\/a>/iUs',"[\$2->\$1]",$texte); return $texte; } function url_absolues($rel,$url,$rajout) //transforme des URL relatives en absolues //trouvée ici: http://www.web-max.ca/PHP/misc_24.php // et nulle part ailleurs, licence ??? { $com = InternetCombineURL($url,$rel); $com= $rajout.$com.'"'; return $com; } function InternetCombineURL($absolute,$relative) { $p = parse_url($relative); if($p["scheme"])return $relative; extract(parse_url($absolute)); $path = dirname($path); if($relative{0} == '/') { $cparts = array_filter(explode("/", $relative)); } else { $aparts = array_filter(explode("/", $path)); $rparts = array_filter(explode("/", $relative)); $cparts = array_merge($aparts, $rparts); foreach($cparts as $i => $part) { if($part == '.') { $cparts[$i] = null; } if($part == '..') { $cparts[$i - 1] = null; $cparts[$i] = null; } } $cparts = array_filter($cparts); } $path = implode("/", $cparts); $url = ""; if($scheme) { $url = "$scheme://"; } if($user) { $url .= "$user"; if($pass) { $url .= ":$pass"; } $url .= "@"; } if($host) { $url .= "$host/"; } $url .= $path; return $url; } function html_to_spip ($pagehtml) //remplace du HTML par des raccourcis Spip { //définition des correspondances entre HTML et raccourcis typo de Spip $balisetypo = array ( "b\b" => "{{", "/b" => "}}", "i\b" => "{", "/i" => "}", "strong" => "{{", "/strong" => "}}", "em" => "{", "/em" => "}", "h\d" => "\n{{{", "/h\d" => "}}}\n", "p" => " ", "/p" => "\n\n", ); // // sélectionne les couplets balise-raccourci typo pour la fonction remplacebalise // puis les envoie à la fonction // $texte=$pagehtml; $texte = preg_replace ('/<br>/i', "\n_ ", $texte); $texte = preg_replace ('/ /i', " ", $texte); do { $nombalise=key($balisetypo); $raccourcitypoouvert=current($balisetypo); next ($balisetypo); $raccourcitypoferme=current($balisetypo); $texte=remplacebalise ($nombalise, $raccourcitypoouvert, $raccourcitypoferme, $texte); } while (next ($balisetypo)); return $texte; } function remplacebalise ($nombalise, $raccourcitypoouvert, $raccourcitypoferme, $ascruter) { $pattern = "/<".$nombalise.".*?>(.*?)<\/".$nombalise.">/si"; $replace = $raccourcitypoouvert."\$1".$raccourcitypoferme; $textemodifie = preg_replace ($pattern, $replace, $ascruter); return $textemodifie; } function nettoiehtml ($anetoyer) //nettoie une page web avec Tidy: désactivé car non fonctionnel chez moi { $tidy = tidy_parse_string($anetoyer); tidy_clean_repair($tidy); return $tidy; } ?> </body> </html>