def read_person (node): rc = u"%s %s" % (find_text(node, "prenom"), find_text(node, "nom")) dates = find_text(node, "dates") if len (dates) > 0: rc += " (%s)" % dates return rc
def harvest (options): """Méthode de moissonage pour PMB utilisant la fonction d'export de l'interface admin. *options* *options* est un dictionnaire, et doit contenir au moins les attributs suivants: *host* Nom du serveur distant. *base_url* Racine de l'acces OAI. *user* Nom d'utilisateur ayant droit d'accès a l'admin *password* Mot de passe de l'utilisateur *database* Nom de la base de données que PMB utilise """ c = PmbClient () c.connect (options['host']) login_script = options['base_url'] + "main.php" export_script = options['base_url'] + "admin/convert/start_export.php" params = {'user': options['username'], 'password': options['password'], 'database': options['db']} c.login (params, login_script) params = {'export_type': '14', 'lender': 'x'} content = c.export (params, export_script) root = etree.XML (content.encode("utf-8")) article_nodes = root.findall (".//notice") nodes = [] for node in article_nodes: meta = {} for c in node.getchildren (): if c.text: c.text = c.text.strip () if c.tag == 'idNotice': meta_set (meta, IDENTIFIER, c.text) elif c.tag == 'zoneTitre': for t in c.getchildren (): if t.tag == 'titrePrincipal': meta_set (meta, TITLE, t.text) else: meta_set (meta, ALT_TITLE, t.text) elif c.tag == 'zoneAuteurPrincipal': meta_set (meta, CREATOR, read_person (c)) elif c.tag == 'zoneAuteursAutres': meta_set (meta, CONTRIBUTOR, read_person (c)) elif c.tag == 'zoneNotes': meta_set (meta, ABSTRACT, find_text (c, "noteResume")) elif c.tag == 'zoneEditeur': meta_set (meta, PUBLISHER, read_publisher (c)) meta_set (meta, DATE_ISSUED, find_text (c, "annee")) elif c.tag == 'prixISBN': meta_set (meta, ISBN, find_text (c, "ISBN")) elif c.tag == 'zoneLiens': meta_set (meta, SOURCE, find_text (c, "lien")) elif c.tag == 'zoneLangue': for t in c.getchildren (): if t.tag == 'langueDocument': meta_set (meta, LANGUAGE, t.text) elif t.tag == 'langueOriginale': meta_set (meta, ORIG_LANG, t.text) elif c.tag == 'zoneCategories': meta_set (meta, SUBJECT, find_text (c, "categorie")) meta_set (meta, URI, "http://%s%scatalog.php?id=%s" % \ (options['host'], options['base_url'], meta[IDENTIFIER])) nodes.append (meta) return nodes
def read_publisher (node): return u"%s, %s" % (find_text(node, "nom"), find_text(node, "ville"))