Conversation
…r/14_EUFactForce into 22-fetch-metadata-from-apis
cgoudet
left a comment
There was a problem hiding this comment.
Merci pour ce travail!
Il faudrait tout mettre en "prod" plutot qu'en exploration.
There was a problem hiding this comment.
Puisque l'on va les utiliser en prod, ces parsers doivent être dans la section prod et pas exploration du projet.
| return [article.pdf_url] if article else [] | ||
|
|
||
|
|
||
| if __name__ == "__main__": |
There was a problem hiding this comment.
A plutot mettre comme un test d'intégration mais mettre un skip pour qu'ils ne soit jamais lancé dans la CI.
| ARXIV_DOI_PREFIX = "10.48550/arXiv." | ||
|
|
||
|
|
||
| class ArxivMetadataParser(MetadataParser): |
There was a problem hiding this comment.
Je ne me souviens plus des discussions. PAs de téléchargement possible sur pdf sur arxiv?
There was a problem hiding this comment.
Téléchargement possible sur Arxiv mais pas sur Pubmed à première vue
There was a problem hiding this comment.
Du coup ici arxiv utilise le téléchargement par défaut du MetadataParser?
| return False | ||
| try: | ||
| for pdf_url in pdf_urls: | ||
| response = requests.get(pdf_url, timeout=30) |
There was a problem hiding this comment.
Pour un poil plus de clarté, peut être créer une fonction dédié pour télécharger 1 fichier.
There was a problem hiding this comment.
Quand tu dis une fonction dédiée, tu parles d'une sous-fonction de cette fonction qui s'occupe uniquement du téléchargement en tant que tel (pour que la fonction soit moins complexe), ou de faire une fonction spécifique pour chaque classe fille ?
| if not response.content.startswith(b"%PDF"): | ||
| print(f"Content at {pdf_url} is not a valid PDF (possibly a paywall page).") | ||
| continue | ||
| with open(output_path, "wb") as f: |
There was a problem hiding this comment.
Si tu as plusieurs fichiers, ils vont tous s'écraser mutuellement et seul le dernier sera disponible.
There was a problem hiding this comment.
Dans la fonction, on télécharge uniquement le pdf de la première url qui n'est pas une interface de paiement. Ca peut cependant s'écraser entre les différentes API, mais dans l'idée on ne veut qu'un seul pdf par DOI non ?
| return [] | ||
|
|
||
|
|
||
| if __name__ == "__main__": |
There was a problem hiding this comment.
Pareil, mettre ca dans un TU
| ## Usage | ||
|
|
||
| ```bash | ||
| python3 main.py --doi 10.1128/mbio.01735-25 |
There was a problem hiding this comment.
C'est une méthode d'exploration pour l'exploration, pas pour la prod qui doit utiliser l'API
cgoudet
left a comment
There was a problem hiding this comment.
Les tests unitaires ne passent pas. Il faut corriger ca avant de pouvoir passer en prod.
| ARXIV_DOI_PREFIX = "10.48550/arXiv." | ||
|
|
||
|
|
||
| class ArxivMetadataParser(MetadataParser): |
There was a problem hiding this comment.
Du coup ici arxiv utilise le téléchargement par défaut du MetadataParser?
|
|
||
| from .base import MetadataParser | ||
|
|
||
| ARXIV_DOI_PREFIX = "10.48550/arXiv." |
There was a problem hiding this comment.
Je ne suis pas sur de comprendre le role de ce prefix.
There was a problem hiding this comment.
Oui on récupère l'url du pdf, et ensuite ça utilise le téléchargement par défaut de la classe mère.
Pour le prefix, c'est que l'API utilise l'ID interne d'Arxiv. Le DOI d'un article arxiv c'est le prefixe + l'ID. Donc si c'est sous cette forme là, on va utiliser directement l'ID. Mais parfois un journal publie via arXiv et le DOI ne respecte pas la convention, donc on va faire une recherche par champ DOI (mais ça marche moins bien)
Script that retrieves metadata for a specific article using various APIs based on its DOI and downloads its PDF if it is open access.