source: spip-zone/_plugins_/askwiki/trunk/askwiki_fonctions.php @ 119770

Last change on this file since 119770 was 119770, checked in by toutati@…, 11 months ago

Attention, DEV en cours

Pour le moment :

  • ne fonctionne qu'avec CURL
  • Ne fonctionne que sur un objet, soit contact du plugin Contacts & Organisations

Il faut ajouter les champs sur la table spip_contacts, avec par exmple le plugin cextras

  • date_naissance
  • date_deces
  • page_wikipedia
  • phrase_wikipedia

Todo -> installer une librairie WP

File size: 3.6 KB
Line 
1<?php
2/**
3 * Fonctions utiles au plugin Askwiki
4 *
5 * @plugin     Askwiki
6 * @copyright  2020
7 * @author     Anne-lise Martenot
8 * @licence    GNU/GPL
9 * @package    SPIP\Askwiki\Fonctions
10 */
11
12if (!defined('_ECRIRE_INC_VERSION')) {
13        return;
14}
15
16include_spip('inc','askwiki');
17
18/**
19 * distinguer 2 types d'url pour wikipedia
20 * l'une qui cherche, l'autre enregistrée
21 * à partir de la config
22 * config defaut https://fr.wikipedia.org/
23 * URL API = https://fr.wikipedia.org/w/api.php
24 * URL Consultation = https://fr.wikipedia.org/wiki/
25 *
26**/
27function which_wikipedia($type = ''){
28                include_spip('inc/config');
29                $url_wikipedia = lire_config('askwiki/url_wikipedia', 'https://fr.wikipedia.org/');
30                $url_parse_wikipedia = parse_url($url_wikipedia);
31                $url_wikipedia_clean = 'https://'.$url_parse_wikipedia["host"].'/';
32                if($type == 'api'){
33                        $ajout = 'w/api.php';
34                } else {
35                        $ajout = 'wiki/';
36                }
37        return  $url_wikipedia_clean.''.$ajout;
38}
39
40/*
41 * extraire des dates de naissance ou de décès depuis une page wikipedia existante
42 * param string $titre_page
43 * param numeric bool $life
44 * exemple [Date de naissance: (#GET{titre_page}|askwiki_datelife{0})]
45 *
46 */
47function askwiki_datelife($titre_page,$life){
48        $datas = askwiki($titre_page);
49        $first_line = first_line($datas);
50        if($first_line){
51                $array_dates = extraire_balises($first_line,'time');
52                if((count($array_dates) > 1 AND $life == 1) 
53                        OR (count($array_dates) > 0 AND $life == 0) ){
54                        $datetime = extraire_attribut($array_dates[$life],'datetime');
55                        $date = new DateTime($datetime);
56                        return $date->format('Y-m-d H:i:s');
57                }
58        } return;
59}
60
61function quel_age($date_deces,$date_naissance){
62       
63                $date_deces = new DateTime($date_deces);
64                $date_naissance = new DateTime($date_naissance);
65               
66        if($date_deces > $date_naissance){
67                return $date_naissance->diff($date_deces)->y;
68        }
69}
70
71function askwiki_first_line($titre_page){
72        $datas = askwiki($titre_page);
73        $first_line = first_line($datas);
74        return $first_line;
75}
76
77function first_line($text){
78        $p = extraire_balise($text,'p');
79        if(is_string($p) AND strlen($p) > 0){
80                return $p;
81        } 
82        return false;
83}
84
85/*
86 * extraire des données depuis une page wikipedia existante
87 * param $titre_page
88 * exchars : nombre de caractères à extraire
89 *
90 */
91function askwiki($titre_page){
92       
93        $endPoint = which_wikipedia('api');
94
95        $params = [
96                "action" => "query",
97                "format" => "json",
98                "prop" => "extracts",
99                "titles" => $titre_page,
100                "exchars" => "3000",
101                "exlimit" => "1",
102                "formatversion" => "2"
103        ];
104       
105        $url = $endPoint . "?" . http_build_query( $params );
106        spip_log("acces demande pour $url",'test_wiki');
107               
108        $ch = curl_init( $url );
109        curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
110        $output = curl_exec( $ch );
111        curl_close( $ch );
112       
113        $result = json_decode( $output, true );
114       
115        $retour = '';
116         foreach( $result["query"]["pages"] as $k => $v ) {
117                                @$retour .= $v["extract"];
118         }
119               
120        return $retour;
121
122}
123
124//function generique pour trouver la bonne page wikipedia sur presque n'importe quel objet
125function titre_page_wiki($id_objet,$objet){
126        $titre_page = FALSE;
127        $id_table_objet = id_table_objet($objet); //date_naissance
128        $table = table_objet_sql($objet); //spip_contacts
129        $prenom = sql_getfetsel('prenom', $table, "$id_table_objet = ".sql_quote($id_objet));
130        $nom = sql_getfetsel('nom', $table, "$id_table_objet = ".sql_quote($id_objet));
131        if($prenom AND $nom){
132                $titre_page = trim($prenom).'_'.trim($nom); //essayer aussi sans accents ?
133        } else if(!$prenom AND $nom){
134                        $titre_page = trim($nom);
135        } else {
136                $titre = sql_getfetsel('titre', $table, "$id_table_objet = ".sql_quote($id_objet));
137                $titre_page = $titre;
138        }
139        return $titre_page;
140}
Note: See TracBrowser for help on using the repository browser.