Resolve DOIs and search queries into formatted BibTeX entries.
Project description
fetchbib
A command-line tool to resolve DOIs and free-text search queries into formatted BibTeX entries. Powered by doi.org, arXiv, and the OpenAlex API.
Features
- Resolve DOIs to formatted BibTeX (bare DOIs or full URLs)
- Search by paper title via OpenAlex API
- Native arXiv support (arXiv DOIs route to arxiv.org)
- Batch processing from file or command line
- Write output to file (overwrite or append)
- Configurable: exclude ISSN/DOI fields, protect title capitalization
Quick Start
Fetch BibTeX by DOI (bare or full URL, including arXiv):
fbib 10.1073/pnas.2322823121
fbib https://doi.org/10.1073/pnas.2322823121
fbib 10.48550/arXiv.2410.21554
@article{DeVerna_2024,
author = {DeVerna, Matthew R. and Yan, Harry Yaojun and Yang, Kai-Cheng and Menczer, Filippo},
DOI = {10.1073/pnas.2322823121},
ISSN = {1091-6490},
journal = {Proceedings of the National Academy of Sciences},
month = dec,
number = {50},
publisher = {Proceedings of the National Academy of Sciences},
title = {Fact-checking information from large language models can decrease headline discernment},
url = {http://dx.doi.org/10.1073/pnas.2322823121},
volume = {121},
year = {2024}
}
Search by free text by including text between quotes:
fbib "Fact-checking information from large language models can decrease headline discernment"
Note: OpenAlex searches titles and abstracts. Full or partial paper titles work best. Use
-nto return multiple results if needed. See Specify number of free-text matches section below.
Installation
pip
pip install fetchbib
uv
uv tool install fetchbib
Requires Python 3.9+.
Usage
fbib [-h] [-f FILE] [-o OUTPUT] [-a] [-n MAX_RESULTS]
[--config-api-key KEY] [--config-protect-titles]
[--config-exclude-issn] [--config-exclude-doi]
[inputs ...]
Flexible input
fbib accepts DOIs in any format — bare, full URL, or free-text search queries — and you can mix them freely.
Inputs are comma-separated, so all of the following work:
# Multiple positional arguments
fbib 10.1609/icwsm.v5i1.14126 10.1093/jcmc/zmz022
# Comma-separated string
fbib "10.1609/icwsm.v5i1.14126, 10.1093/jcmc/zmz022"
# Full DOI URLs
fbib "https://doi.org/10.1609/icwsm.v5i1.14126, https://doi.org/10.1093/jcmc/zmz022"
# Mix DOIs, URLs, and search queries
fbib 10.1609/icwsm.v5i1.14126 "Fact-checking information from large language models"
From a file (--file), each line is treated the same way — one entry per line, or comma-separated on a single line:
fbib --file dois.txt
Duplicate inputs are automatically removed.
Write to a file
Overwrite (default):
fbib --output refs.bib 10.1609/icwsm.v5i1.14126
Append to an existing .bib file:
fbib --append --output refs.bib 10.1093/jcmc/zmz022
Specify number of free-text matches
Free-text searches return 1 result by default. Use -n to control the limit (1-100):
# Get 3 results (see the correct result in position #2)
fbib -n 3 "Fact-checking information from large language models can decrease"
Configuration
Settings are stored in ~/.config/fetchbib/config.json and persist across sessions.
OpenAlex API Key
OpenAlex allows unauthenticated requests but with limited daily credits. For higher limits, get a free API key at openalex.org:
fbib --config-api-key YOUR_API_KEY
You can also use the OPENALEX_API_KEY environment variable, which takes precedence over the config file:
OPENALEX_API_KEY=your_key fbib "search query"
Protect titles
BibTeX processors may change title capitalization. Enable title protection to wrap titles in double braces, preserving the original case:
fbib --config-protect-titles
This transforms the below:
title = {A {GPU} Study}becomestitle = {{A GPU Study}}andtitle = {An Important Study}becomestitle = {{An Important Study}}.
Run again to toggle off.
Exclude ISSN
Remove the ISSN field from returned BibTeX entries:
fbib --config-exclude-issn
Run again to toggle off.
Exclude DOI
Remove the DOI field from returned BibTeX entries (the DOI is typically already included in the URL field):
fbib --config-exclude-doi
Run again to toggle off.
Development
Clone the repo and sync dependencies with uv:
git clone https://github.com/mr-devs/fetchbib.git
cd fetchbib
uv tool install -e . # OR pip install -e .
The
-eflag (uv tool install -e .), it performs an editable installation. This means any changes you make to the local source code are immediately reflected when you run the command, without needing to reinstall.
Run unit tests:
uv run pytest
Run integration tests (hits live APIs):
uv run pytest -m integration
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file fetchbib-0.6.0.tar.gz.
File metadata
- Download URL: fetchbib-0.6.0.tar.gz
- Upload date:
- Size: 21.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
c8a6685699a0f928dccbce7be13b597c798758cdf4ce6444e3193f851aaafd28
|
|
| MD5 |
d57768ff998c66e84775d3473aa48573
|
|
| BLAKE2b-256 |
5788eaced935a082c9c6178195bd33c1f6fa633b0a16aa9294d8b0030177e2bb
|
File details
Details for the file fetchbib-0.6.0-py3-none-any.whl.
File metadata
- Download URL: fetchbib-0.6.0-py3-none-any.whl
- Upload date:
- Size: 13.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.9.18 {"installer":{"name":"uv","version":"0.9.18","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4cb22cbd19bb658dfb83695e31d4df5e45371cf033b049d0d47f58302dfab1c4
|
|
| MD5 |
f6b3237e09b691481f89e1099c243e33
|
|
| BLAKE2b-256 |
ef076060254c875d4c91280bd5f946c2e0fc581f58962e6c738dcefb6b2c2431
|