58 lines
2.2 KiB
Markdown
58 lines
2.2 KiB
Markdown
# doi2ris
|
||
|
||
Python-Skript, das eine Liste von Literaturquellen einliest, DOIs extrahiert,
|
||
bibliographische Metadaten via Crossref (Fallback DataCite) ergänzt und eine
|
||
Zotero-kompatible **.ris**-Datei erzeugt.
|
||
|
||
## Voraussetzungen
|
||
|
||
```bash
|
||
pip install requests
|
||
```
|
||
|
||
## Verwendung
|
||
|
||
```bash
|
||
python doi2ris.py quellen.txt -o bibliothek.ris --email du@example.com --workers 8
|
||
```
|
||
|
||
### Argumente
|
||
|
||
| Argument | Beschreibung |
|
||
| --------------- | ---------------------------------------------------------------------- |
|
||
| `input` | Eingabedatei, eine Quelle pro Zeile |
|
||
| `-o/--output` | RIS-Ausgabepfad (Default `library.ris`) |
|
||
| `--email` | Mailadresse für Crossref Polite-Pool (empfohlen, beschleunigt Antworten) |
|
||
| `--workers` | Anzahl paralleler Requests (Default 8) |
|
||
| `--cache` | JSON-Cache, damit Wiederholungsläufe instantan laufen |
|
||
| `--unresolved` | Logdatei für Zeilen ohne erfolgreiche Auflösung |
|
||
| `-v/--verbose` | Debug-Logging |
|
||
|
||
### Eingabeformate
|
||
|
||
Pro Zeile beliebig — das Skript zieht via Regex die DOI heraus:
|
||
|
||
```
|
||
10.1038/s41586-020-2649-2
|
||
https://doi.org/10.1109/5.771073
|
||
Coble, R. L. (1961). Sintering crystalline solids ... doi:10.1063/1.1736107
|
||
@article{smith2020, doi = {10.1000/xyz123}, ...}
|
||
```
|
||
|
||
Zeilen **ohne** DOI werden per Crossref-Titelsuche aufgelöst (Top-Treffer ab
|
||
Score 40). Klappt das nicht, landet die Zeile in `unresolved.txt`.
|
||
|
||
## Zotero-Import
|
||
|
||
In Zotero: *Datei → Importieren … → RIS-Datei wählen*. Die Felder werden korrekt
|
||
gemappt (Autor:innen, Journal, Band/Heft, Seiten, DOI, Abstract, Schlagwörter,
|
||
ISSN/ISBN, URL).
|
||
|
||
## Hinweise
|
||
|
||
- Crossref erlaubt großzügige Anfragen, im Polite-Pool (mit `--email`) bekommt
|
||
man bevorzugte Antwortzeiten. Auch ohne Mail funktioniert es.
|
||
- 5-fach Retry mit exponentiellem Backoff für HTTP 429/5xx ist eingebaut.
|
||
- Der lokale `.doi_cache.json` macht erneute Läufe verlustfrei reproduzierbar.
|
||
- Bei 107 Einträgen läuft das Skript typischerweise in 30–60 Sekunden durch.
|