Antworten

GeneanetForGramps

Pour les utilisateurs du logiciel Gramps.
romjerome
male
Beiträge: 1511
Eingabeform: Grafisch
Navigation: Text
Den Stammbaum ansehen
Ah oui, je n'avais pas pensé à cela...
Après la consultation de quelques pages d'un arbre sur geneanet, on nous demande de nous identifier (ou de créer un compte). Il y a une section à renseigner dans le code de cet outil (si besoin, je peux créer deux champs à renseigner avant le lancement de l'outil). N'ayant aucune idée si cela fonctionne, j'imagine qu'avant d'utiliser 'GeneanetForGramps', on peut s'identifier via son navigateur internet et le laisser ouvert ?

Bon, j'ai corrigé les erreurs que j'avais moi-même introduites dans les premières modifications... et lors de mon dernier test, j'ai pu importer 4 générations et une quinzaine de descendants (qui n'avaient pas de données car je n'étais pas identifié...)

Je ne vois pas la possible polémique (pillage de données, etc.), cet outil fait une consultation de pages internet et une saisie dans gramps. Le risque c'est de corrompre nos données avec des enregistrements peu fiables et/ou mal interprétés...

Concernant le support d'autres environnements que linux, je ne veux pas polémiquer (un peu quand même !), il faut avouer que c'est bien agréable d'avoir des "interactions système" claires, théoriquement cela peut fonctionner (partiellement) sous Windows (et Mac OS). Si besoin, des informations supplémentaires sont disponibles via le mode "debug".

sous linux :
$ gramps -d "GeneanetForGramps"
Je crois qu'il existe un lien spécifique (lanceur gramps dans le menu), sous Windows.

Il y a tellement de configurations (arbres) que je ne vais pas tester très longtemps.
Sous ma configuration cela fonctionne bien, merci à l'auteur.
romjerome
male
Beiträge: 1511
Eingabeform: Grafisch
Navigation: Text
Den Stammbaum ansehen
patricelegoux hat geschrieben: 06 Dezember 2020, 18:14 J'avais déjà requests d'installé (j'ai meme refait un pip install requests) mais gramps me dit le contraire quand j'essaie de faire tourner GeneanetForGramps.

Y aurait pas des fois une version de python dédiée à gramps d'installée quelque part (sur windows en tout cas) sur laquelle il faudrait aussi installer requests ?
Pour info, GetMyAncestors utilise également requests. Et 'Wildkat' semble être sous Windows !

Pour ton autre question, il existe des exemples de codes avec du XSLT (ok, on retourne 20 ans en arrière...). Néanmoins, c'est toujours fonctionnel et plutôt rapide (à adapter et à utiliser). Voir le fichier 'query_html.xsl' pour un template html de base. Un fichier gramps XML vers un autre format.
Le fichier 'lxmlGramplet.py' permet, par ailleurs, de générer un fichier gramps xml; voir def WriteBackXML(). Il s'agit d'une copie d'un fichier .gramps, dont on supprime le contenu, ne gardant que la structure et en y ajoutant uniquement des données récoltées. Ici les noms de famille, les lieux et les sources. Des données vers un fichier gramps XML.
patricelegoux
patricelegoux
Beiträge: 1786
Eingabeform: Grafisch
Navigation: Text
Den Stammbaum ansehen
romjerome hat geschrieben: 05 Dezember 2021, 09:38 Pour info, GetMyAncestors utilise également requests. Et 'Wildkat' semble être sous Windows !
Merci Jérôme, oui j'ai vu ça sur Discourse.
Je l'ai testé hier sur mes quelques personnes publiées sur familysearch, ca fonctionne plutôt bien. J'ai récupéré un gedcom plutôt bien compris par Gramps. J'ai fait quelques modifs sur FS il faut que je refasse un essai pour voir si les citations se retrouvent dans les événements. Lors de mon premier essai ils n'étaient positionnés que sur les individus et les familles. J'ai aussi apprécié le fait de récupérer les id FS des individus en attribut permettant ainsi de relier Gramps et FS.
D'ailleurs si d'autres ici ont un arbre sur FS et qu'ils peuvent essayer et faire un retour sur cet essai ça pourrait être intéressant.

Concernant lxml/XSLT, je vais aller regarder ça. Merci.
Patrice Legoux Publications: Logiciels utilisés / Version:
  • Windows: Windows 10 Pro
  • Gramps: AIO64-5.1.3-2
  • Geneanet Upload
  • Chrome
glopglop
glopglop
Beiträge: 3467
Eingabeform: Text
Navigation: Text
Den Stammbaum ansehen

Re: GeneanetForGramps

Beitrag von glopglop »

Bonjour
je n'ai pas un arbre sur FS mais un compte alors j'ai fait un essai sur l'arbre universel FS

dea en python3.10 l installation par pip ne fonctionne pas. une sombre histoire de version de babelfish
il faut recuperer les sources et lancer le setup

apres cest pas mal mais 'ai eu le malheur de copier un bout d arbre en portuguais et cela cree un gedcom avec les dates en portuguais.
Developpeur du greffon GedcomforGeneanet pour GRAMPS
https://github.com/grocanar/glopgrampsaddons/tree/main/addons-source/GedcomforGeneanet
Telechargement https://github.com/grocanar/glopgrampsaddons/raw/main/addons/5.1/download/GedcomforGeneanet.zip
Sans aucun lien avec l'entreprise Geneanet que celui d’être un abonné premium comme les autres.
romjerome
male
Beiträge: 1511
Eingabeform: Grafisch
Navigation: Text
Den Stammbaum ansehen
patricelegoux hat geschrieben: 05 Dezember 2021, 12:32 Concernant lxml/XSLT, je vais aller regarder ça. Merci.
Si c'est du XSLT pour utiliser en local, on peut aller plus loin...

L'un des derniers scripts partagé, doit avoir une dizaine d'années.

Code: Alles auswählen

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">;
<xsl:template match="/">
  <html>
  <body>
    <h2>All Notes</h2>
    <table border="1">
      <tr bgcolor="#9acd32">
        <th>ID</th>
        <th>Text</th>
      </tr>
      <xsl:for-each select="database/notes/note">
        <tr>
          <td><xsl:value-of select="@id"/></td>
          <td><xsl:value-of select="text"/></td>
        </tr>
      </xsl:for-each>
    </table>
  </body>
  </html>
</xsl:template>
</xsl:stylesheet>
Pour ma part, j'utilisais ce type de commande :

Code: Alles auswählen

$ xsltproc xx.xsl xx.xml > new.xml
$ xsltproc --novalid xxx.xsl data.xml > map.svg
https://gramps-project.org/wiki/index.php/Xsl
romjerome
male
Beiträge: 1511
Eingabeform: Grafisch
Navigation: Text
Den Stammbaum ansehen
patricelegoux hat geschrieben: 05 Dezember 2021, 12:32 Concernant lxml/XSLT, je vais aller regarder ça. Merci.
En re-testant 'lxmlgramplet', je me suis rendu compte que les validations pointaient des changements dans la structure du fichier Gramps XML (en tout cas pour des fichiers générés avec la version 5.1.4). C'est étrange mais rien d'insurmontable à corriger.

Dans la branche master (lxml addon), il y a maintenant 3 versions alternatives des fichiers RNG, DTD, XSD du schema 1.7.1 ! Aux dernières nouvelles, ces validations XML stricts et rigides sont des "décorations", mais bon elles existent, alors autant les tester. N'ayant pas le courage de regarder toutes les versions de la branche 5.1, il vaut mieux utiliser les fichiers de la branche 'master' avec les dernières versions de gramps.

Effectivement il serait aussi possible de wrapper des pages HTML de geneanet pour générer un fichier Gramps XML, mais il est surtout probable que les nombreux modèles de page de geneanet, génèrent tellement d'erreurs, que l'on obtiendrait + un outil de "debug" pour généanet...
romjerome
male
Beiträge: 1511
Eingabeform: Grafisch
Navigation: Text
Den Stammbaum ansehen
Sinon, dans le même esprit, pour Ancestry, il y a ancestry-tools.
oliber
oliber
Beiträge: 70
Eingabeform: Grafisch
Navigation: Grafisch
Den Stammbaum ansehen
Au cas où ça intéresse quelqu'un j'ai utilisé un script python pour télécharger quelques branches d'ascendants, que j'ai intégrées à mon arbre (en citant les sources ;-)). Le code est fort brouillon. Il utilise l'api protobuf de Geneanet (et l'api json android pour la connexion) et produit un fichier gw, histoire de ne perdre aucune information... Si quelqu'un a du temps pour en faire quelque chose de plus convivial, je l'envoie volontiers.
patricelegoux
patricelegoux
Beiträge: 1786
Eingabeform: Grafisch
Navigation: Text
Den Stammbaum ansehen
Bonjour,

C'est quoi cette API protobuf ? J'en ai jamais autant entendu parler qu'aujourd'hui 😀

Ça peut effectivement être intéressant de voir ce que fait ce code.
Patrice Legoux Publications: Logiciels utilisés / Version:
  • Windows: Windows 10 Pro
  • Gramps: AIO64-5.1.3-2
  • Geneanet Upload
  • Chrome
oliber
oliber
Beiträge: 70
Eingabeform: Grafisch
Navigation: Grafisch
Den Stammbaum ansehen
patricelegoux hat geschrieben: 05 Januar 2022, 15:37 C'est quoi cette API protobuf ? J'en ai jamais autant entendu parler qu'aujourd'hui 😀
Il s'agit de l'api utilisée par l'arbre interactif : https://gw.geneanet.org/patricelegoux?lang=fr&n=legoux&oc=0&p=patrice+philippe&type=tree
Vous pouvez en voir les appels en utilisant les outils de développement de Firefox ou Chrome (touche F12) ainsi que dans le script https://static.geneanet.org/geneweb/arbre.js à la ligne 307

L'appel qui m'intéresse est celui à https://gw.geneanet.org/setup/api/?arbre=person&sourcename=patricelegoux&lang=fr&type= avec comme données POST l'index de la personne en protobuf, d'après le schéma https://gw.geneanet.org/setup/api/api_saisie_read.proto

Il récupère la totalité des données liées à une personne (uniquement celles accessibles à l'utilisateur connecté) dans un objet protobuf. À quelques détails près : les dates ne sont disponibles au format date que dans le calendrier grégorien (et en texte pour le calendrier dans lequel elles ont été encodées) et les éléments des titres nobiliaires sont rassemblés dans un seul champ.
Zuletzt geändert von oliber am 05 Januar 2022, 22:31, insgesamt 1-mal geändert.
oliber
oliber
Beiträge: 70
Eingabeform: Grafisch
Navigation: Grafisch
Den Stammbaum ansehen
Ainsi, si je prends votre fiche, j'obtiens ceci, traduit en json:

Code: Alles auswählen

{
  "baseprefix": "patricelegoux", 
  "index": 11, 
  "hasSources": false, 
  "firstname": "\"Patrice\" Philippe", 
  "lastname": "Legoux", 
  "occ": 0, 
  "father": {
    "index": 156, 
    "hasChild": true, 
    "firstname": "\"Claude\" Fran\u00e7ois Adrien", 
    "hasParent": true, 
    "lastname": "Legoux", 
    "occ": 0, 
    "sosaNb": "2", 
    "hasSpouse": true, 
    "n": "legoux", 
    "p": "claude francois adrien", 
    "sosa": "SOSA", 
    "baseprefix": "patricelegoux", 
    "sex": "MALE", 
    "visibleForVisitors": false
  }, 
  "n": "legoux", 
  "p": "patrice philippe", 
  "sosa": "SOSA_REF", 
  "mother": {
    "index": 158, 
    "hasChild": true, 
    "firstname": "\"Eliane\" Marthe", 
    "hasParent": true, 
    "lastname": "Bouttes", 
    "occ": 0, 
    "sosaNb": "3", 
    "hasSpouse": true, 
    "n": "bouttes", 
    "p": "eliane marthe", 
    "sosa": "SOSA", 
    "baseprefix": "patricelegoux", 
    "sex": "FEMALE", 
    "visibleForVisitors": false
  }, 
  "families": [
    {
      "marriageType": "NO_MENTION", 
      "index": 16, 
      "spouse": {
        "index": 12, 
        "hasChild": true, 
        "firstname": "\"Anne\" Danielle Ren\u00e9e Marie-Th\u00e9r\u00e8se", 
        "hasParent": true, 
        "lastname": "B\u00e9guin", 
        "occ": 0, 
        "hasSpouse": true, 
        "n": "beguin", 
        "p": "anne danielle renee marie therese", 
        "sosa": "NO_SOSA", 
        "baseprefix": "patricelegoux", 
        "sex": "FEMALE", 
        "visibleForVisitors": false
      }, 
      "divorceType": "NOT_DIVORCED", 
      "children": [
        {
          "index": 157, 
          "hasChild": false, 
          "firstname": "\"Valentine\" Marion", 
          "hasParent": true, 
          "lastname": "Legoux", 
          "occ": 0, 
          "hasSpouse": false, 
          "n": "legoux", 
          "p": "valentine marion", 
          "sosa": "NO_SOSA", 
          "baseprefix": "patricelegoux", 
          "sex": "FEMALE", 
          "visibleForVisitors": false
        }
      ]
    }, 
    {
      "marriageType": "NO_MENTION", 
      "index": 55, 
      "spouse": {
        "index": 67, 
        "hasChild": true, 
        "firstname": "\"Brigitte\" Catherine", 
        "hasParent": true, 
        "lastname": "Pabot", 
        "occ": 0, 
        "hasSpouse": true, 
        "n": "pabot", 
        "p": "brigitte catherine", 
        "sosa": "NO_SOSA", 
        "baseprefix": "patricelegoux", 
        "sex": "FEMALE", 
        "visibleForVisitors": false
      }, 
      "divorceType": "NOT_DIVORCED"
    }
  ], 
  "sex": "MALE", 
  "type": "SIMPLE", 
  "deathType": "DONT_KNOW_IF_DEAD"
}
Cela dit, l'API json semi-officielle (utilisée par le plugin wordpress) offre quasiment les mêmes renseignements :

Code: Alles auswählen

{
  "type": 3,
  "index": 11,
  "sex": 0,
  "lastname": "Legoux",
  "firstname": "\"Patrice\" Philippe",
  "n": "legoux",
  "p": "patrice philippe",
  "occ": 0,
  "aliases": [],
  "qualifiers": [],
  "firstname_aliases": [],
  "surname_aliases": [],
  "death_type": 4,
  "has_sources": false,
  "titles": [],
  "related": [],
  "rparents": [],
  "father": {
    "type": 3,
    "index": 156,
    "sex": 0,
    "lastname": "Legoux",
    "firstname": "\"Claude\" François Adrien",
    "n": "legoux",
    "p": "claude francois adrien",
    "occ": 0,
    "aliases": [],
    "qualifiers": [],
    "firstname_aliases": [],
    "surname_aliases": [],
    "death_type": 4,
    "has_sources": false,
    "titles": [],
    "related": [],
    "rparents": [],
    "families": [],
    "sosa": 2,
    "events": [],
    "events_witnesses": [],
    "baseprefix": "patricelegoux",
    "birth_text": " ",
    "death_text": " ",
    "burial_text": " ",
    "cremation_text": " ",
    "burial_type": 0,
    "titles_links": [],
    "sosa_nb": "2",
    "has_history": false,
    "has_possible_duplications": false,
    "linked_page_biblio": "",
    "linked_page_bnote": "",
    "linked_page_death": "",
    "linked_page_head": "",
    "linked_page_occu": "",
    "visible_for_visitors": false,
    "hasChild": ""
  },
  "mother": {
    "type": 3,
    "index": 158,
    "sex": 1,
    "lastname": "Bouttes",
    "firstname": "\"Eliane\" Marthe",
    "n": "bouttes",
    "p": "eliane marthe",
    "occ": 0,
    "aliases": [],
    "qualifiers": [],
    "firstname_aliases": [],
    "surname_aliases": [],
    "death_type": 4,
    "has_sources": false,
    "titles": [],
    "related": [],
    "rparents": [],
    "families": [],
    "sosa": 2,
    "events": [],
    "events_witnesses": [],
    "baseprefix": "patricelegoux",
    "birth_text": " ",
    "death_text": " ",
    "burial_text": " ",
    "cremation_text": " ",
    "burial_type": 0,
    "titles_links": [],
    "sosa_nb": "3",
    "has_history": false,
    "has_possible_duplications": false,
    "linked_page_biblio": "",
    "linked_page_bnote": "",
    "linked_page_death": "",
    "linked_page_head": "",
    "linked_page_occu": "",
    "visible_for_visitors": false,
    "hasChild": ""
  },
  "families": [
    {
      "index": 16,
      "spouse": {
        "type": 3,
        "index": 12,
        "sex": 1,
        "lastname": "Béguin",
        "firstname": "\"Anne\" Danielle Renée Marie-Thérèse",
        "n": "beguin",
        "p": "anne danielle renee marie therese",
        "occ": 0,
        "death_type": 4,
        "has_sources": false,
        "sosa": 2,
        "baseprefix": "patricelegoux"
      },
      "marriage_type": 4,
      "divorce_type": 0,
      "children": [
        {
          "type": 3,
          "index": 157,
          "sex": 1,
          "lastname": "Legoux",
          "firstname": "\"Valentine\" Marion",
          "n": "legoux",
          "p": "valentine marion",
          "occ": 0,
          "death_type": 4,
          "has_sources": false,
          "sosa": 2,
          "baseprefix": "patricelegoux"
        }
      ]
    },
    {
      "index": 55,
      "spouse": {
        "type": 3,
        "index": 67,
        "sex": 1,
        "lastname": "Pabot",
        "firstname": "\"Brigitte\" Catherine",
        "n": "pabot",
        "p": "brigitte catherine",
        "occ": 0,
        "death_type": 4,
        "has_sources": false,
        "sosa": 2,
        "baseprefix": "patricelegoux"
      },
      "marriage_type": 4,
      "divorce_type": 0
    }
  ],
  "sosa": 0,
  "events": [],
  "events_witnesses": [],
  "baseprefix": "patricelegoux",
  "birth_text": " ",
  "baptism_text": " ",
  "death_text": " ",
  "burial_text": " ",
  "cremation_text": " ",
  "burial_type": 0,
  "titles_links": [],
  "sosa_nb": "1",
  "has_history": false,
  "has_possible_duplications": false,
  "ref_index": 11,
  "ref_person": {
    "type": 1,
    "index": 11,
    "sex": 0,
    "lastname": "Legoux",
    "firstname": "\"Patrice\" Philippe",
    "n": "legoux",
    "p": "patrice philippe",
    "occ": 0,
    "death_type": 4,
    "has_sources": false,
    "father": {
      "index": 156,
      "sex": 0,
      "lastname": "Legoux",
      "firstname": "\"Claude\" François Adrien",
      "n": "legoux",
      "p": "claude francois adrien",
      "occ": 0,
      "sosa": 1,
      "baseprefix": "patricelegoux",
      "sosa_nb": "2",
      "visible_for_visitors": false,
      "has_parent": true,
      "has_spouse": true,
      "has_child": true
    },
    "mother": {
      "index": 158,
      "sex": 1,
      "lastname": "Bouttes",
      "firstname": "\"Eliane\" Marthe",
      "n": "bouttes",
      "p": "eliane marthe",
      "occ": 0,
      "sosa": 1,
      "baseprefix": "patricelegoux",
      "sosa_nb": "3",
      "visible_for_visitors": false,
      "has_parent": true,
      "has_spouse": true,
      "has_child": true
    },
    "families": [
      {
        "index": 16,
        "spouse": {
          "index": 12,
          "sex": 1,
          "lastname": "Béguin",
          "firstname": "\"Anne\" Danielle Renée Marie-Thérèse",
          "n": "beguin",
          "p": "anne danielle renee marie therese",
          "occ": 0,
          "sosa": 2,
          "baseprefix": "patricelegoux",
          "visible_for_visitors": false,
          "has_parent": true,
          "has_spouse": true,
          "has_child": true
        },
        "marriage_type": 4,
        "divorce_type": 0,
        "children": [
          {
            "index": 157,
            "sex": 1,
            "lastname": "Legoux",
            "firstname": "\"Valentine\" Marion",
            "n": "legoux",
            "p": "valentine marion",
            "occ": 0,
            "sosa": 2,
            "baseprefix": "patricelegoux",
            "visible_for_visitors": false,
            "has_parent": true,
            "has_spouse": false,
            "has_child": false
          }
        ]
      },
      {
        "index": 55,
        "spouse": {
          "index": 67,
          "sex": 1,
          "lastname": "Pabot",
          "firstname": "\"Brigitte\" Catherine",
          "n": "pabot",
          "p": "brigitte catherine",
          "occ": 0,
          "sosa": 2,
          "baseprefix": "patricelegoux",
          "visible_for_visitors": false,
          "has_parent": true,
          "has_spouse": true,
          "has_child": true
        },
        "marriage_type": 4,
        "divorce_type": 0
      }
    ],
    "sosa": 0,
    "baseprefix": "patricelegoux"
  },
  "linked_page_biblio": "",
  "linked_page_bnote": "",
  "linked_page_death": "",
  "linked_page_head": "",
  "linked_page_occu": "",
  "visible_for_visitors": false,
  "reference": "legoux|patrice philippe|",
  "siblings": [],
  "halfSiblings": [],
  "hasChild": ""
}
Je sais qu'à l'époque où j'avais commencé à regarder ça de plus près, j'avais opté pour l'api protobuf mais je crois que ce n'était qu'une question de détails...
llhduflot
male
Beiträge: 322
Eingabeform: Grafisch
Navigation: Grafisch
Den Stammbaum ansehen
Merci Oliber,

j'avoue qu'on atteint me limites: je ne connais pas javascript, n'ai fait que quelques script attaquant le web et n'ai qu'une connaissance théorique de protobuf. Ça m'intéresse mais je n'ai probablement pas les compétence pour faire quelque chose de propre. Avoir une "scraper" geneanet me semble utile pour éviter les re-copies "bêtes" à la main, il y aurait du travail pour intégrer le résultat dans une db gramps, ne serait-ce que la correspondance des lieux, ou des "type" de famille (marrié, etc).

Laurent
oliber
oliber
Beiträge: 70
Eingabeform: Grafisch
Navigation: Grafisch
Den Stammbaum ansehen
Mes connaissances en javascript sont extrêmement limitées et protobuf, comme json, n'est qu'un format de transfert de données. Je ne les ai tous deux utilisés qu'avec python. Pour ce qui est des correspondances, une bonne partie du travail a été déjà faite avec GeneanetForGramps et le module d'importation Geneweb.
Après, comme toujours, c'est une question de temps disponible ;-)
romjerome
male
Beiträge: 1511
Eingabeform: Grafisch
Navigation: Text
Den Stammbaum ansehen
oliber hat geschrieben: 06 Januar 2022, 11:08 le module d'importation Geneweb.
Après, comme toujours, c'est une question de temps disponible ;-)
Quelle version du format de Geneweb ?
Si je me souviens bien, quelques lignes du module étaient commentées/désactivées (transition vers le format geneweb +), essentiellement pour le support d'événements familiaux et individuels supplémentaires.
romjerome
male
Beiträge: 1511
Eingabeform: Grafisch
Navigation: Text
Den Stammbaum ansehen
romjerome hat geschrieben: 06 Januar 2022, 17:34 quelques lignes du module étaient commentées/désactivées (transition vers le format geneweb +), essentiellement pour le support d'événements familiaux et individuels supplémentaires.
lignes 255 et 258
Antworten

Zurück zu „Gramps“