[−][src]Crate crossref
This crate provides a client for interacting with the crossref-api
Crossref API docs
Crossref
- Crossref search API. The Crossref
crate provides methods matching Crossref API routes:
works
-/works
routemembers
-/members
routeprefixes
-/prefixes
routefunders
-/funders
routejournals
-/journals
routetypes
-/types
routeagency
-/works/{doi}/agency
get DOI minting agency
Usage
Create a Crossref
client:
let client = Crossref::builder().build()?;
If you have an Authorization token for Crossref's Plus service:
let client = Crossref::builder() .token("token") .build()?;
Encouraged to use the The Polite Pool:
Good manners = more reliable service
To get into Crossref's polite pool include a email address
let client = Crossref::builder() .polite("polite@example.com") .token("your token") .build()?;
Constructing Queries
Not all components support queries and there are custom available parameters for each route that supports querying.
For each resource components that supports querying there exist a Query struct: WorksQuery
, MembersQuery
, FundersQuery
. The WorksQuery
also differs from the others by supporting deep paging with cursors and field queries.
Otherwise creating queries works the same for all resource components:
let query = WorksQuery::new() .query("Machine Learning") // field queries supported for `Works` .field_query(FieldQuery::author("Some Author")) // filters are specific for each resource component .filter(WorksFilter::HasOrcid) .order(Order::Asc) .sort(Sort::Score);
Get Records
See this table for a detailed overview of the major components.
There are 3 available targets:
- standalone resource components:
/works
,/members
, etc. that return a list list of the corresponding items and can be specified with queries - Resource component with identifiers:
/works/{doi}?<query>
,/members/{member_id}?<query>
, etc. that returns a single item if found. - combined with the
works
route: The works component can be appended to other resources:/members/{member_id}/works?<query>
etc. that returns a list of matchingWork
items.
This resembles in the enums of the resource components, eg. for Members
:
pub enum Members { /// target a specific member at `/members/{id}` Identifier(String), /// target all members that match the query at `/members?query...` Query(MembersQuery), /// target a `Work` for a specific member at `/members/{id}/works?query..` Works(WorksCombined), }
All options are supported by the client:
Single Item by DOI (ID)
Analogous methods exist for all resource components
let work = client.work("10.1037/0003-066X.59.1.29")?; let agency = client.work_agency("10.1037/0003-066X.59.1.29")?; let funder = client.funder("funder_id")?; let member = client.member("member_id")?;
Query
let query = WorksQuery::new().query("Machine Learning"); // one page of the matching results let works = client.works(query)?;
Convenience method for Work Items by terms
let works = client.query_works("Machine Learning")?;
Combining Routes with the Works
route
For each resource component other than Works
there exist methods to append a WorksQuery
with the ID option /members/{member_id}/works?<query>?
let works = client.member_works_query("member_id", WorksQuery::new() .query("machine learning") .sort(Sort::Score))?;
Convenience method to append works query term:
let works = client.member_works("member id", "Machine Learning")?;
Deep paging for Works
use crossref::{Crossref, WorksQuery, WorksFilter}; let client = Crossref::builder().build()?; // request a next-cursor first let query = WorksQuery::new() .query("Machine Learning") .new_cursor(); let works = client.works(query.clone())?;
Re-exports
pub use self::query::Funders; |
pub use self::query::Journals; |
pub use self::query::Members; |
pub use self::query::Prefixes; |
pub use self::query::Type; |
pub use self::query::Types; |
pub use self::response::CrossrefType; |
pub use self::response::Funder; |
pub use self::response::FunderList; |
pub use self::response::Journal; |
pub use self::response::JournalList; |
pub use self::response::Member; |
pub use self::response::MemberList; |
pub use self::response::TypeList; |
pub use self::response::Work; |
pub use self::response::WorkAgency; |
pub use self::response::WorkList; |
Modules
cn | content negotiation |
query | provides types to construct a specific query |
response | provides the response types of the crossref api |
tdm | textual data mining |
Structs
Crossref | Struct for Crossref search API methods |
CrossrefBuilder | A |
Error | An error that can occur while interacting with a crossref index. |
FieldQuery | Field queries are available on the |
WorksCombined | Target |
WorksQuery | Used to construct a query that targets crossref |
Enums
Order | Determines how results should be sorted |
Sort | Results from a list response can be sorted by applying the sort and order parameters. |
WorkResultControl | limits from where and how many |
Works | Retrieve a publication by DOI |
WorksFilter | Filters allow you to narrow queries. All filter results are lists |
Traits
CrossrefQuery | root level trait to construct full crossref api request urls |
CrossrefRoute | represents elements that constructs parts of the crossref request url |
Type Definitions
Result | A type alias for handling errors throughout crossref. |