====== 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]]