Changeset 31572 in spip-zone


Ignore:
Timestamp:
Sep 14, 2009, 11:23:14 AM (10 years ago)
Author:
apachot@…
Message:

Début d'intégration des webservices pmb, pour l'instant expérimental sur une base de test

Récupération d'une notice au format unimac/xml, puis affectation des champs titres, auteur...
il manque la disponibilité des ouvrages et les liens vers les pages auteurs/editeur et collection

File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/spip-pmb/2_0_0/pmb_mes_fonctions.php

    r27709 r31572  
    233233
    234234//d�coupage d'une notice au d�part dans un div de class .parent
    235 function pmb_parser_notice ($id_notice, $localdom, &$tresultat) {
     235/*function pmb_parser_notice ($id_notice, $localdom, &$tresultat) {
    236236        $tresultat['id'] = $id_notice; 
    237237        $tresultat['logo_src'] = $localdom->find('table td img',2)->src;
     
    261261        }
    262262
    263 }
     263}*/
     264
     265    // Traitement des balises ouvrantes
     266    function fonctionBaliseOuvrante($parseur, $nomBalise, $tableauAttributs)
     267    {
     268        // En fait... nous nous conteterons de mémoriser le nom de la balise
     269        // afin d'en tenir compte dans la fonction "fonctionTexte"
     270
     271        global $derniereBaliseRencontree;
     272         global $dernierAttributRencontre;
     273       global $dernierTypeTrouve;
     274
     275        $derniereBaliseRencontree = $nomBalise;
     276 
     277        $dernierAttributRencontre = $tableauAttributs;
     278       
     279    }
     280   
     281    // Rraitement des balises fermantes
     282    function fonctionBaliseFermante($parseur, $nomBalise)
     283    {
     284        // On oublie la dernière balise rencontrée
     285        global $derniereBaliseRencontree;
     286         global $dernierAttributRencontre;
     287       global $dernierTypeTrouve;
     288
     289        $derniereBaliseRencontree = "";
     290    }
     291
     292    // Traitement du texte
     293    // qui est appelé par le "parseur"
     294    function fonctionTexte($parseur, $texte)
     295    {
     296        global $derniereBaliseRencontree;
     297         global $dernierAttributRencontre;
     298       global $dernierTypeTrouve;
     299    global $gtresultat;
     300
     301        // Selon les cas, nous affichons le texte
     302        // ou nous proposons un lien
     303        // ATTENTION: Par défaut les noms des balises sont
     304        //            mises en majuscules
     305       //echo("<br />fonctionTexte=".$derniereBaliseRencontree);
     306        switch ($derniereBaliseRencontree) {
     307            case "F":
     308                   foreach($dernierAttributRencontre as $cle=>$attr) {
     309                        if ($cle=="C") $dernierTypeTrouve = $attr;
     310                  }
     311              break;
     312
     313            case "S":
     314               foreach($dernierAttributRencontre as $cle=>$attr) {
     315                        if ($cle=="C") $dernierSousTypeTrouve = $attr;
     316                  }
     317
     318                if (($dernierTypeTrouve == "010") && ($dernierSousTypeTrouve == "a")) $gtresultat['isbn'] .= $texte;
     319                if (($dernierTypeTrouve == "010") && ($dernierSousTypeTrouve == "b")) $gtresultat['reliure'] .= $texte;
     320                if (($dernierTypeTrouve == "010") && ($dernierSousTypeTrouve == "d")) $gtresultat['prix'] .= $texte;
     321               
     322                if (($dernierTypeTrouve == "101") && ($dernierSousTypeTrouve == "a")) $gtresultat['langues'] .= $texte;
     323               
     324                if (($dernierTypeTrouve == "102") && ($dernierSousTypeTrouve == "a")) $gtresultat['pays'] .= $texte;
     325               
     326                if (($dernierTypeTrouve == "200") && ($dernierSousTypeTrouve == "a")) $gtresultat['titre'] .= $texte;
     327                if (($dernierTypeTrouve == "200") && ($dernierSousTypeTrouve == "f")) $gtresultat['auteur'] .= $texte;
     328               
     329                if (($dernierTypeTrouve == "210") && ($dernierSousTypeTrouve == "c")) $gtresultat['editeur'] .= $texte;
     330                if (($dernierTypeTrouve == "210") && ($dernierSousTypeTrouve == "a")) $gtresultat['editeur'] .= ' ('.$texte.')';
     331                if (($dernierTypeTrouve == "210") && ($dernierSousTypeTrouve == "d")) $gtresultat['annee_publication'] .= $texte;
     332               
     333                if (($dernierTypeTrouve == "215") && ($dernierSousTypeTrouve == "a")) $gtresultat['importance'] .= $texte;
     334                if (($dernierTypeTrouve == "215") && ($dernierSousTypeTrouve == "c")) $gtresultat['presentation'] .= $texte;
     335                if (($dernierTypeTrouve == "215") && ($dernierSousTypeTrouve == "d")) $gtresultat['format'] .= $texte;
     336               
     337                if (($dernierTypeTrouve == "225") && ($dernierSousTypeTrouve == "a")) $gtresultat['collection'] .= $texte;
     338               
     339                if (($dernierTypeTrouve == "330") && ($dernierSousTypeTrouve == "a")) $gtresultat['resume'] .= str_replace("\n","<br />", $texte);
     340               
     341                if (($dernierTypeTrouve == "700") && ($dernierSousTypeTrouve == "a")) $gtresultat['lesauteurs'] .= $texte;
     342                if (($dernierTypeTrouve == "700") && ($dernierSousTypeTrouve == "b")) $gtresultat['lesauteurs'] .= " ".$texte;
     343               
     344
     345                //a faire : disponibilité
     346
     347                /* sous la forme ...
     348              <table cellpadding='2' class='exemplaires' width='100%'>
     349                    <tr><th class='expl_header_expl_cb'>Code barre</th><th class='expl_header_expl_cote'>Cote</th><th class='expl_header_tdoc_libelle'>Support</th><th class='expl_header_location_libelle'>Localisation</th><th class='expl_header_section_libelle'>Section</th><th>Disponibilité</th><tr><td class='expl_cb'>4319900946</td><td class='expl_cote'>RP GUI</td><td class='tdoc_libelle'>Livre</td><td class='location_libelle'>Saint-Jeures</td><td class='section_libelle'>Romans Policiers</td><td class='expl_situation'><strong>Disponible</strong> </td></tr>
     350
     351              </table>
     352              */
     353                break;
     354        }         
     355    }
     356
     357//récuperer une notice en xml via les webservices
     358function pmb_ws_parser_notice ($id_notice, &$ws, &$tresultat) {
     359       
     360        global $gtresultat;
     361        $gtresultat = array();
     362       
     363        try {   
     364        $listenotices = array(''.$id_notice);
     365        $tresultat['id'] = '4904';
     366                  $r=$ws->pmbesNotices_fetchNoticeList($listenotices,"pmb_xml_unimarc","utf8",true,true);
     367                echo("<ul>");
     368                foreach($r as $value) {
     369                               
     370            // Création du parseur XML
     371            $parseurXML = xml_parser_create();
     372
     373            // Je précise le nom des fonctions à appeler
     374            // lorsque des balises ouvrantes ou fermantes sont rencontrées
     375            xml_set_element_handler($parseurXML, "fonctionBaliseOuvrante"
     376                                              , "fonctionBaliseFermante");
     377
     378            // Je précise le nom de la fonction à appeler
     379            // lorsque du texte est rencontré
     380            xml_set_character_data_handler($parseurXML, "fonctionTexte");
     381
     382            // Ouverture du fichier
     383            xml_parse($parseurXML, $value, true);
     384         
     385           // echo("<br/><br />version brute : <br/><br />".$value);
     386            xml_parser_free($parseurXML);
     387
     388            if ($gtresultat['lesauteurs'] == "")
     389                  $gtresultat['lesauteurs'] = $tresultat['auteur'];
     390            $gtresultat['logo_src'] = "http://tence.bibli.fr/opac/getimage.php?url_image=http%3A%2F%2Fimages-eu.amazon.com%2Fimages%2FP%2F!!isbn!!.08.MZZZZZZZ.jpg&noticecode=".str_replace("-","",$gtresultat['isbn'])."&vigurl=";
     391            $tresultat = $gtresultat ;
     392
     393           
     394            }
     395               
     396
     397        } catch (SoapFault $fault) {
     398                print("Erreur : ".$fault->faultcode." : ".$fault->faultstring);
     399        }
     400
     401       
     402
     403}
     404
     405//charger les webservices
     406function pmb_ws_charger_wsdl(&$ws) {
     407        $ws=new SoapClient("http://test3.bibli.fr/ostudio/PMBWsSOAP_1?wsdl");
     408       
     409}
     410
    264411
    265412// retourne un tableau associatif contenant tous les champs d'une notice
    266413function pmb_notice_extraire ($id_notice, $url_base, $mode='auto') {
    267414        $tableau_resultat = Array();
    268         if ($htmldom = pmb_charger_page($url_base, "index.php?lvl=notice_display&seule=1&id=".$id_notice, $mode)) {
    269                  pmb_parser_notice($id_notice, $htmldom->find('#notice',0), $tableau_resultat);
    270         }
     415       
     416        pmb_ws_charger_wsdl($ws);
     417        //if ($htmldom = pmb_charger_page($url_base, "index.php?lvl=notice_display&seule=1&id=".$id_notice, $mode)) {
     418                 //pmb_parser_notice($id_notice, $htmldom->find('#notice',0), $tableau_resultat);       
     419                 pmb_ws_parser_notice($id_notice, $ws, $tableau_resultat);
     420        //}
    271421        return $tableau_resultat;
    272422                       
Note: See TracChangeset for help on using the changeset viewer.