Aller au contenu

omnischolar/orcid

Omnischolar ORCID: a researcher's identity, CV (employments, education, distinctions...) and declared works, through ORCID's public API - no key.

É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/orcid:1.x-dev

ORCID's public API for omnisense/omnischolar: who a researcher says they are - names, biography, keywords, pages - their CV - employments, education, qualifications, distinctions, invited positions, memberships, services - and the works on their record, each in the version they prefer, with its contributors. The source calls the public API v3.0, without a key:

Operation Request
author($orcid) GET https://pub.orcid.org/v3.0/<orcid>/record
works($orcid) GET .../<orcid>/works (all at once), then .../<orcid>/works/<put-code>,<put-code>... for the details of one page
work($id) GET .../<orcid>/work/<put-code>
search() not supported: ORCID searches people, not works

The base address is OrcidSource::BASE_URI (https://pub.orcid.org/v3.0/); ORCID's sandbox is https://pub.sandbox.orcid.org/v3.0/ (base_uri).

Installation

composer require omnischolar/orcid

Requires PHP 8.2, 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: the public API serves what researchers made public, without a client. Calls carry the User-Agent of the user_agent option (with the mailto).

Options

Option Type Default Required
base_uri string https://pub.orcid.org/v3.0/ no the sandbox: https://pub.sandbox.orcid.org/v3.0/
throttle float 0.0 no seconds left 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

Capabilities

capabilities(): author, works, work, affiliations, abstracts.

Operation Supported Reads
author() yes an ORCID (bare, orcid: or its orcid.org address; checksum checked)
works() yes an ORCID
work() yes "<orcid>/work/<put-code>" or "<orcid>:<put-code>" (a string)
search() no (does not search)

Behaviour

An author. The credit name, else the given and family names (the ORCID when both are missing); the other names; the ORCID; the biography; the keywords; the researcher's URLs and those of their other identifiers (Scopus, ResearcherID...); the country of their first address; and every affiliation section as Affiliation lines - kind (employment, education, qualification, invited-position, distinction, membership, service), organisation, role, department, start and end dates, city, country, ROR when ORCID has it, URL.

Works. ORCID lists a record's works all at once: one summary per group, the preferred version. The query's years (inYears()) and types (WorkType::fromName() of ORCID's type) are applied here; the summaries are sorted by date, newest first (oldest reverses; other sorts are newest); one page (limit 1 to 100, the cursor an offset) is then detailed in one bulk call; Page::$total is the number of works kept. domains is refused; text, title, author and openAccess are not read.

A work. Title and subtitle, type, contributors (credit names, ORCIDs, roles: author, editor, translator), date and year, the journal title as venue with its ISSN, the short description as abstract, language, URL; identifiers: DOI, ISBN, arXiv, PMID, PMCID, HAL, Open Library - those not marked part-of (a book's ISBN on a chapter is left out). No citation counts, no metrics.

Example

<?php

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

use Omnischolar\Orcid\OrcidSourceFactory;
use Omnischolar\Source\Query;
use Symfony\Component\HttpClient\HttpClient;

$orcid = (new OrcidSourceFactory(HttpClient::create()))->create();

$a = $orcid->author('0000-0002-1825-0097');          // Josiah Carberry, ORCID's demonstration record
echo $a->name, ': ', count($a->affiliations), ' CV lines; ', implode('; ', array_map(fn ($f) => $f->kind.' '.$f->organization, array_slice($a->affiliations, 0, 2))), "\n";

$page = $orcid->works('0000-0002-1825-0097', new Query(limit: 3));
echo $page->total, " works, first 3:\n";
foreach ($page as $work) {
    printf("  %s  %-10s %s %s\n", $work->date ?? $work->year, $work->type->value, mb_substr($work->fullTitle(), 0, 80), $work->doi() ?? '');
}
Josiah Carberry: 2 CV lines; employment Wesleyan University; employment Brown University
6 works, first 3:
  2012  article    A Methodology for the Emulation of Architecture: Journal of Psychoceramics 10.5555/12345680
  2012  article    The Memory Bus Considered Harmful: Journal of Psychoceramics 10.5555/666655554444
  2011  article    The Impact of Interactive Epistemologies on Cryptography: Journal of Psychoceram 10.5555/987654321

(called live on 2026-10-26 at 14:18 UTC, from the core's harness image; the record gives these works the journal's name as their subtitle)

In Symfony:

omnischolar:
    sources:
        orcid: { factory: orcid }

Errors

Case Result
an unknown ORCID or work (404) null
anything but an ORCID; work() of an Identifier or of a string without a put-code; search(); domains NotSupportedException
another 4xx ProviderException
a 429 RateLimitedException
a 5xx, a timeout UnavailableException

Verified, and not

Tested offline: Tests/OrcidSourceTest.php (7 tests), on MockHttpClient with answers recorded on 2026-10-04 - Josiah Carberry (0000-0002-1825-0097, ORCID's demonstration record): record, works, their details in two pages, one work; Keitaro Nakatani's record, public but empty. Called live on 2026-10-04 and on 2026-10-26 (the example above). The sandbox was not called.

Limits of the service: only what the researcher made public; no search of works; many works have no contributors listed.

Responsibility

An independent, unofficial client, not affiliated with ORCID, Inc. Whoever runs it complies with ORCID's terms (Public APIs Terms of Service): see the README's Responsibility section.

Proposer une modification docs/index.md