====== TP découverte de l'API HAL ====== Hal est une plateforme numérique pour le dépôt et le partage d'articles scientifiques. Il contient environ 2 000 000 de notice bibliographique et 1 000 000 d'articles. Cette plateforme propose une API pour la récupération des informations sur les documents dont la documentation [[https://api.archives-ouvertes.fr/docs/search|est ici]] * Regardez rapidement la documentation, en comparant au requêtes SQL, comment considérez-vous les champs suivant : * le champ ''q'' ou les filtres ''fq'' * le champ ''fl'' * le champ ''sort'', les champs ''rows'' et ''start'' * les ''facets'' * Quel paramètres de requêtes faudrait-il envoyer pour obtenir les différents mots clefs utilisés cette année dans les articles déposés ? Le plus simple pour cela est d'utiliser les ''facets'' c'est à dire de faire une requète avec les parametre suivant: q=submittedDateY_i:2022 fl=keyword_s,submittedDateY_i wt=json facet=true facet.field=keyword_s Ce qui donne l'url [[https://api.archives-ouvertes.fr/search/?q=submittedDateY_i:2022&fl=keyword_s,submittedDateY_i&wt=json&facet=true&facet.field=keyword_s|]] ===== Récupération en python ===== Vous pouvez utiliser le notebook à cette url [[https://jupyter.imst.os.univ-lyon1.fr/]] [[https://pypi.org/project/requests/|Requests]] est une bibliothèque python facilitant les requète HTTP donc sur les API basée sur le web. * En utilisant''requests'', téléchargez les informations de l'ensemble des articles du laboratoire ELICO. Affichez les titres et les auteurs. Enfin, stockez le résultat dans un fichier. Le notebook peux être trouvé ici: [[https://jupyter.imst.os.univ-lyon1.fr/hub/user-redirect/lab/tree/public/api_hall.ipynb]] Voici son code #!/usr/bin/env python # coding: utf-8 # # Utilisation de request # In[31]: import requests import json import pandas as pd # In[59]: parametres = { "q":"labStructAcronym_s:ELICO", "wt":"json", "fl":"authFullName_s,title_s", "rows": 10000 } # In[60]: r = requests.get('https://api.archives-ouvertes.fr/search/', params=parametres) # In[64]: resultat = r.json() liste_reps = resultat["response"]["docs"] # print(liste_reps) # In[71]: result = [] for rep in liste_reps: elem = {} elem["titre"] = rep["title_s"][0] elem["nbAuteur"] = len(rep["authFullName_s"]) elem["auteurs"] = rep["authFullName_s"] # print(elem) result.append(elem) df = pd.DataFrame(result) # In[72]: df # In[78]: df.to_excel("article_elico.xlsx") # In[79]: df.to_csv("article_elico.csv") * Utilisez les facettes pour obtenir * le nombre d'article par an, * le nombre d'article par auteur. ===== Visualisation de données ===== Nous allons utiliser la librairie [[https://plotly.com/python/|plotly]] pour afficher les résultats. * Affichez le nombre d'articles par an sous la forme d'un [[https://plotly.com/python/line-charts/|line-chart]] * Affichez le nombre d'articles par auteur sous la forme d'un [[https://plotly.com/python/bar-charts/|bar-chart]]