Aller au contenu

omnischolar/arxiv

Omnischolar arXiv: preprints by author name, arXiv id or search, with abstracts, categories, PDFs and the DOI of the published version - no key, three seconds between calls.

Étage
Fournisseur · Omnischolar
Version
1.x
Suite de conformité
non branchée
Vérifié en réel
Son README ne le dit pas
Licence
MIT
composer require omnischolar/arxiv:1.x-dev

arXiv for omnisense/omnischolar: preprints - an author's by name, one by its arXiv id, a search - with their abstracts, categories, PDF, and the DOI and journal reference of the published version when the authors added them. The source calls arXiv's API, which answers in Atom, without a key:

Operation Request
works($name) GET https://export.arxiv.org/api/query?search_query=au:"<name>"&start=&max_results=&sortBy=&sortOrder=
work($id) GET .../query?id_list=<id>&max_results=1
search($query) GET .../query?search_query=all:...+AND+ti:...+AND+au:...
author() not supported: arXiv has no author profiles

The base address is ArxivSource::BASE_URI (https://export.arxiv.org/api/). There is no sandbox.

Installation

composer require omnischolar/arxiv

Requires PHP 8.2, ext-dom (the answers are Atom), omnisense/omnischolar (1.x) and symfony/http-client (6.4, 7 or 8). In a Symfony application with OmnischolarBundle, the factory is registered as soon as the package is installed.

Credentials

None. arXiv asks for one call every three seconds: the default throttle leaves them. A mailto names the caller in the User-Agent.

Options

Option Type Default Required
throttle float 3.0 no seconds between two calls of the source
mailto string null no added to the User-Agent
user_agent string omnischolar/1.x (+https://github.com/glitchr-omnisense/omnischolar) no
base_uri string https://export.arxiv.org/api/ no

Capabilities

capabilities(): works, work, search, abstracts, open_access, domains.

Operation Supported Reads
author() no (NotSupportedException: does not know authors)
works() yes a name as signed: Juan Maldacena, Maldacena, Juan; an Identifier is refused
work() yes an arXiv id, old (hep-th/9711200) or new (2401.12345) style, with or without its version, or its abs/pdf address
search() yes text (all:), title (ti:), author (au:); none: all:*

Behaviour

Query. Words with a space are sent in double quotes as one term; the terms are joined by AND. domains adds (cat:hep-th OR cat:gr-qc); from/to add submittedDate:[<from>01010000 TO <to>12312359] (1991 and 2999 for an open end); types without PREPRINT gives an empty page without a call; openAccess is not read (every preprint is open). sort: relevance → sortBy=relevance, any other → submittedDate, descending unless oldest. limit 1 to 2000 (ArxivSource::MAX_RESULTS); the cursor is an offset (start); Page::$total is opensearch:totalResults.

A preprint. Title, type preprint, authors (and their affiliations when given), year and date of first submission (published), venue arXiv (a repository), abstract, openAccess true, the abstract page as url, the PDF (link[@title="pdf"]), the categories as domains (the primary one first); identifiers: the arXiv id (without version) and the DOI the authors added; the journal reference (or else the comment) as note. No citations.

Errors in the feed. arXiv answers a malformed query with 200 and an "Error" entry: a ProviderException with its summary (status 400). An answer that is not Atom is a ProviderException.

Example

<?php

require __DIR__.'/vendor/autoload.php';

use Omnischolar\Arxiv\ArxivSourceFactory;
use Omnischolar\Source\Query;
use Symfony\Component\HttpClient\HttpClient;

$arxiv = (new ArxivSourceFactory(HttpClient::create()))->create(['mailto' => getenv('OMNISCHOLAR_MAILTO') ?: null]);

$w = $arxiv->work('hep-th/9711200');
echo $w->title, "\n", implode(', ', array_map(fn ($a) => $a->name, $w->authors)), "; ", $w->date, "; DOI ", $w->doi(), "\n  note: ", $w->note, "\n  pdf: ", $w->pdfUrl, "\n";

$page = $arxiv->search(new Query(title: 'wormholes', domains: ['hep-th'], from: 2025, limit: 3));
echo $page->total, " found, next ", var_export($page->next, true), "\n";
foreach ($page as $work) {
    printf("  %s  %-10s %s - %s\n", $work->date, $work->type->value, mb_substr($work->fullTitle(), 0, 80), $work->venue->name);
}
The Large N Limit of Superconformal Field Theories and Supergravity
Juan M. Maldacena; 1997-11-27; DOI 10.1023/a:1026654312961
  note: Adv.Theor.Math.Phys.2:231-252,1998
  pdf: https://arxiv.org/pdf/hep-th/9711200v3
166 found, next '3'
  2026-10-23  preprint   Entanglement entropy of evolving wormholes - arXiv
  2026-10-16  preprint   Scalar Casimir Effect from Bilocal Correlations in a Wormhole Foam - arXiv
  2026-10-15  preprint   Dilaton-Axion Wormhole Partition Function Away from the BPS Endpoint - arXiv

(called live on 2026-10-26 at 14:18 UTC, from the core's harness image, without a mailto)

In Symfony:

omnischolar:
    sources:
        arxiv: { factory: arxiv, options: { mailto: '%env(OMNISCHOLAR_MAILTO)%' } }

Errors

Case Result
an unknown id null
author(); an Identifier given to works(); work() of anything but an arXiv id NotSupportedException
a malformed query (an "Error" entry), an answer that is not Atom, another 4xx ProviderException
a 429 RateLimitedException
a 5xx, a timeout UnavailableException

Verified, and not

Tested offline: Tests/ArxivSourceTest.php (6 tests), on MockHttpClient with answers recorded on 2026-10-04 - ten of Juan Maldacena's preprints (167), hep-th/9711200 with its DOI and journal reference, a search in hep-th and gr-qc for 2024, an error answer. Called live on 2026-10-04 and on 2026-10-26 (the example above).

Not given by arXiv: author identifiers (by name only, as signed), citations, the DOI of the published version unless the authors added it - the Merger also joins a preprint and its publication by title, in its year or the next.

Responsibility

An independent, unofficial client, not affiliated with arXiv or Cornell University. Whoever runs it complies with arXiv's terms (Terms of Use for arXiv APIs), one call every three seconds included: see the README's Responsibility section.

Proposer une modification docs/index.md