Utilisateur:Alinebot/Codes sources
Voici un aperçu des scripts PHP d'Alinebot. Ceux-ci sont appelés à évoluer.
Script de création de modèles de données
modifierScript fonctionnel
<?php
try
{
$bdd = new PDO('mysql:host=localhost;dbname=wiki', 'root', '');
$bdd->exec('SET NAMES utf8');
$req = $bdd->prepare('SELECT Wp_article_commune, Url_cassini FROM liste_communes_france_92');
$req->execute(array($_GET['Wp_article_commune'], $_GET['Url_cassini']));
include 'class/http.class.php';
include 'class/wikiapi.class.php';
$alinebot = new wikipediaapi('fr.wikipedia.org');
$alinebot->login ( 'Alinebot', '**' ) ;
$resume = 'Création modèle';
$resume2 = "Ajout d'une ligne au rapport";
while ($donnees = $req->fetch())
{
// ################################################################################################################
// ########################## Récupération du contenu des modèles avant mise à jour ##########################################
$url_modele_evo_pop = 'http://fr.wikipedia.org/w/index.php?title=Modèle:Données/' . $donnees['Wp_article_commune'] . '/évolution_population&action=edit';
$contexte = stream_context_create(array('http' => array('user_agent' => 'Alinebot awesome script')));
$texte_wp = file_get_contents($url_modele_evo_pop, false, $contexte);
preg_match('#<textarea tabindex="1" accesskey="," id="wpTextbox1" cols="80" rows="25" style="" lang="fr" dir="ltr" name="wpTextbox1">(?<syntaxhighlight lang="text">[^<]+)</textarea>#i', $texte_wp, $contenu);
// ################################################################################################################
// ######################Récupération des données dans la notice communale de Cassini ########################################
$url_de_cassini= $donnees['Url_cassini'];
$code_source_cassini = file_get_contents($url_de_cassini);
preg_match('#class=\'recensement\'><tr><td><strong>autre</strong> </td><td><strong>(?<an7>[^<]+)</strong> (?<pop7>[^<]+)</td><td><strong>(?<an14>[^<]+)</strong> (?<pop14>[^<]+)</td><td><strong>(?<an21>[^<]+)</strong> (?<pop21>[^<]+)</td><td><strong>(?<an28>[^<]+)</strong> (?<pop28>[^<]+)</td></tr><tr><td><strong>(?<an1>[^<]+)</strong> (?<pop1>[^<]+)</td><td><strong>(?<an8>[^<]+)</strong> (?<pop8>[^<]+)</td><td><strong>(?<an15>[^<]+)</strong> (?<pop15>[^<]+)</td><td><strong>(?<an22>[^<]+)</strong> (?<pop22>[^<]+)</td><td><strong>(?<an29>[^<]+)</strong> (?<pop29>[^<]+)</td></tr><tr><td><strong>(?<an2>[^<]+)</strong> (?<pop2>[^<]+)</td><td><strong>(?<an9>[^<]+)</strong> (?<pop9>[^<]+)</td><td><strong>(?<an16>[^<]+)</strong> (?<pop16>[^<]+)</td><td><strong>(?<an23>[^<]+)</strong> (?<pop23>[^<]+)</td><td><strong>(?<an30>[^<]+)</strong> (?<pop30>[^<]+)</td></tr><tr><td><strong>(?<an3>[^<]+)</strong> (?<pop3>[^<]+)</td><td><strong>(?<an10>[^<]+)</strong> (?<pop10>[^<]+)</td><td><strong>(?<an17>[^<]+)</strong> (?<pop17>[^<]+)</td><td><strong>(?<an24>[^<]+)</strong> (?<pop24>[^<]+)</td><td><strong>(?<an31>[^<]+)</strong> (?<pop31>[^<]+)</td></tr><tr><td><strong>(?<an4>[^<]+)</strong> (?<pop4>[^<]+)</td><td><strong>(?<an11>[^<]+)</strong> (?<pop11>[^<]+)</td><td><strong>(?<an18>[^<]+)</strong> (?<pop18>[^<]+)</td><td><strong>(?<an25>[^<]+)</strong> (?<pop25>[^<]+)</td><td><strong>(?<an32>[^<]+)</strong> (?<pop32>[^<]+)</td></tr><tr><td><strong>(?<an5>[^<]+)</strong> (?<pop5>[^<]+)</td><td><strong>(?<an12>[^<]+)</strong> (?<pop12>[^<]+)</td><td><strong>(?<an19>[^<]+)</strong> (?<pop19>[^<]+)</td><td><strong>(?<an26>[^<]+)</strong> (?<pop26>[^<]+)</td><td><strong>(?<an33>[^<]+)</strong> (?<pop33>[^<]+)</td></tr><tr><td><strong>(?<an6>[^<]+)</strong> (?<pop6>[^<]+)</td><td><strong>(?<an13>[^<]+)</strong> (?<pop13>[^<]+)</td><td><strong>(?<an20>[^<]+)</strong> (?<pop20>[^<]+)</td><td><strong>(?<an27>[^<]+)</strong> (?<pop27>[^<]+)</td>#', $code_source_cassini, $donnee);
// Création d'un tableau sans array + vérification si une donnée pop est numérique ou non + suppression espaces
for($i = 1; $i <= 33; $i++) {
if (is_numeric(str_replace(' ', '', $donnee['pop'.$i]))) {
$donnee_a[$donnee['an'.$i]] = str_replace(' ', '', $donnee['pop'.$i]);
}
}
$pop_max = max($donnee_a);
$nombre_an = count($donnee_a);
// Boucle produisant les données ans et pops
ksort($donnee_a);
$donnees_ans_pops = '';
$i = 0;
foreach ($donnee_a as $key => $val) {
$i++;
$donnees_ans_pops .= " |an$i=$key|pop$i=$val\n";
}
$etape_1 = '<includeonly>{{#switch: {{{1|}}}
|max='. $pop_max.'
|source1='. $url_de_cassini.'
|source2=http://www.statistiques-locales.insee.fr
|source3=http://www.insee.fr
|nombre='. $nombre_an.'
'. $donnees_ans_pops.'
|an=|pop=}}</includeonly><noinclude>{{Documentation Données Population de commune en France}}</noinclude>';
// Suppression du saut de ligne après la dernière ligne de recensement
$etape_2=preg_replace('#
\|an=\|pop=\}\}</includeonly><noinclude>\{\{Documentation Données Population de commune en France\}\}</noinclude>#', ' |an=|pop=}}</includeonly><noinclude>{{Documentation Données Population de commune en France}}</noinclude>', $etape_1);
// Ajouter la dernière année de recensement et la population
preg_match('# \|an(?<nombreannee1>[^<]+)=(?<dernierean>[^<]+)\|pop(?<nombreannee2>[^<]+)=(?<dernierepop>[^<]+)
\|an=\|pop=\}\}#', $etape_1, $etape_3);
$donnee_dernierean = $etape_3['dernierean'];
$donnee_dernierepop = $etape_3['dernierepop'];
$resultat=preg_replace('# \|an=\|pop=\}\}#', ' |an='. $donnee_dernierean.'|pop='. $donnee_dernierepop.'}}', $etape_2);
if ($contenu['source'] == '') {
// ################################################################################################################
// ################ Remplace la zone vide dans la page WP par le contenu de Cassini mis sous forme de modèle de données #############
$resultat1 = preg_replace('##', '' . $resultat . '', $contenu['source']);
// ################################################################################################################
$resultat_final = htmlspecialchars_decode($resultat1);
$page_modele = 'Modèle:Données/' . $donnees['Wp_article_commune'] . '/évolution_population';
$alinebot->edit ($page_modele , $resultat_final , $resume) ;
unset($donnee_a);
} else {
$rapport = 'Utilisateur:Alinebot/Rapport';
$url_rapport = 'http://fr.wikipedia.org/w/index.php?title=Utilisateur:Alinebot/Rapport&action=edit';
$contexte2 = stream_context_create(array('http' => array('user_agent' => 'Alinebot awesome script')));
$texte_wp_rapport = file_get_contents($url_rapport, false, $contexte2);
preg_match('#<textarea tabindex="1" accesskey="," id="wpTextbox1" cols="80" rows="25" style="" lang="fr" dir="ltr" name="wpTextbox1">(?<syntaxhighlight lang="text">[^<]+)</textarea>#i', $texte_wp_rapport, $contenu_rapport);
$resultat_rapport1 = preg_replace('#fin du rapport#', '* [[Modèle:Données/' . $donnees['Wp_article_commune'] . '/évolution_population]]
fin du rapport', $contenu_rapport['source']);
$resultat_rapport_final = htmlspecialchars_decode($resultat_rapport1);
$alinebot->edit ($rapport , $resultat_rapport_final , $resume2) ;
$resultat3 = $contenu['source'];
}
}
$reponse->closeCursor(); // Termine le traitement de la requête
}
catch(Exception $e)
{
// En cas d'erreur précédemment, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}
?>
Script de mise à jour
modifierScript fonctionnel
<?php
try
{
$bdd = new PDO('mysql:host=localhost;dbname=wiki', 'root', '');
$bdd->exec('SET NAMES utf8');
$req = $bdd->prepare('SELECT Wp_article_commune, Code_insee FROM liste_communes_france_92');
$req->execute(array($_GET['Wp_article_commune'], $_GET['Code_insee']));
include 'class/http.class.php';
include 'class/wikiapi.class.php';
$alinebot = new wikipediaapi('fr.wikipedia.org');
$alinebot->login ( 'Alinebot', '**' ) ;
$annee = "2006";
$resume = 'Mise à jour - Population ' . $annee . '';
$resume2 = "Ajout d'une ligne au rapport";
while ($donnees = $req->fetch())
{
// ################################################################################################################
// ########################## Récupération du contenu des modèles avant mise à jour ##########################################
$url_modele_evo_pop = 'http://fr.wikipedia.org/w/index.php?title=Modèle:Données/' . $donnees['Wp_article_commune'] . '/évolution_population&action=edit';
$contexte = stream_context_create(array('http' => array('user_agent' => 'Alinebot awesome script')));
$texte_wp = file_get_contents($url_modele_evo_pop, false, $contexte);
preg_match('#<textarea tabindex="1" accesskey="," id="wpTextbox1" cols="80" rows="25" style="" lang="fr" dir="ltr" name="wpTextbox1">(?<syntaxhighlight lang="text">[^<]+)</textarea>#i', $texte_wp, $contenu);
// ################################################################################################################
// ############################# Récupération des données sur un site externe ###############################################
$debut_url_insee = 'http://www.insee.fr/fr/ppp/bases-de-donnees/recensement/populations-legales/commune.asp?annee=' . $annee . '&depcom=';
$code_commune = $donnees['Code_insee'];
$fichier_insee = $debut_url_insee.$code_commune;
$texte_insee = file_get_contents($fichier_insee);
preg_match('#<tr>\s*<td class="tab-chiffre">(?<municipale>[^<]+)</td>#i', $texte_insee, $population);
$pop=preg_replace('/\s/', '', $population['municipale']);
if ((preg_match("#an[0-9]+=$annee#", $contenu['source']) == false)&&(preg_match('#nombre=(?<nombre>[^<]+)#', $texte_wp, $contenu2))&&(preg_match('#max=(?<max>[^<]+)#', $texte_wp, $contenu3))&&(preg_match('#an=[0-9]+\|pop=[0-9]+#', $texte_wp))) {
// ################################################################################################################
// ############################## Actualise le paramètre nombre en ajoutant 1 ###############################################
$nouveau_nombre = $contenu2['nombre'] + 1;
$resultat1 = preg_replace('#nombre=[0-9]+#', 'nombre=' . $nouveau_nombre . '', $contenu['source']);
// ################################################################################################################
// ############### Ajout nouvelle ligne de recensement et remplace ligne de recensement la plus récente ###############################
$resultat2 = preg_replace('#an=[0-9]+\|pop=[0-9]+#', 'an' . $nouveau_nombre . '=' . $annee . '|pop' . $nouveau_nombre . '=' . $pop . '
|an=' . $annee . '|pop=' . $pop . '', $resultat1);
// ################################################################################################################
// ####################### Comparaison de l'ancien nombre max avec la nouvelle population ######################################
if (intval($contenu3['max']) > intval($pop)) // Si nombre max est supérieur à la nouvelle population
{
$resultat3 = $resultat2;
}
else // SINON
{
$resultat3 = preg_replace('#max=[0-9]+#', 'max='. $pop.'', $resultat2);
}
// ################################################################################################################
$resultat_final = htmlspecialchars_decode($resultat3);
$page_modele = 'Modèle:Données/' . $donnees['Wp_article_commune'] . '/évolution_population';
$alinebot->edit ($page_modele , $resultat_final , $resume) ;
} else {
$rapport = 'Utilisateur:Alinebot/Rapport';
$url_rapport = 'http://fr.wikipedia.org/w/index.php?title=Utilisateur:Alinebot/Rapport&action=edit';
$contexte2 = stream_context_create(array('http' => array('user_agent' => 'Alinebot awesome script')));
$texte_wp_rapport = file_get_contents($url_rapport, false, $contexte2);
preg_match('#<textarea tabindex="1" accesskey="," id="wpTextbox1" cols="80" rows="25" style="" lang="fr" dir="ltr" name="wpTextbox1">(?<syntaxhighlight lang="text">[^<]+)</textarea>#i', $texte_wp_rapport, $contenu_rapport);
$resultat_rapport1 = preg_replace('#fin du rapport#', '* [[Modèle:Données/' . $donnees['Wp_article_commune'] . '/évolution_population]]
fin du rapport', $contenu_rapport['source']);
$resultat_rapport_final = htmlspecialchars_decode($resultat_rapport1);
$alinebot->edit ($rapport , $resultat_rapport_final , $resume2) ;
$resultat3 = $contenu['source'];
}
}
$reponse->closeCursor(); // Termine le traitement de la requête
}
catch(Exception $e)
{
// En cas d'erreur précédemment, on affiche un message et on arrête tout
die('Erreur : '.$e->getMessage());
}
?>