Git Product home page Git Product logo

rorcid's Introduction

rorcid

Build Status Build status cran checks codecov.io rstudio mirror downloads cran version

rorcid is an R programmatic interface to the Orcid public API. rorcid is not a product developed or distributed by ORCID®.

Orcid API docs:

The package now works with the v2.1 ORCID API now. It's too complicated to allow users to work with different versions of the API, so it's hard-coded to v2.1.

Authentication

There are two ways to authenticate with rorcid:

  • Use a token as a result of a OAuth authentication process. The token is a alphanumeric UUID, e.g. dc0a6b6b-b4d4-4276-bc89-78c1e9ede56e. You can get this token by running orcid_auth(), then storing that key (the uuid alone, not the "Bearer " part) either as en environment variable in your .Renviron file in your home directory, or as an R option in your .Rprofile file. See ?Startup for more information. Either an environment variable or R option work. If we don't find either we do the next option.
  • Interactively login with OAuth. We use a client id and client secret key to ping ORCID.org; at which point you log in with your username/password; then we get back a token (same as the above option). We don't know your username or password, only the token that we get back. We cache that token locally in a hidden file in whatever working directory you're in. If you delete that file, or run the code from a new working directory, then we re-authorize.

We recommend the former option. That is, get a token and store it as an environment variable.

If both options above fail, we proceed without using authentication. ORCID does not require authentication at this point, but may in the future - this prepares you for when that happens :)

See https://members.orcid.org/api/orcid-scopes for more about ORCID OAuth Scopes.

Computing environments without browsers

One pitfall is when you are using rorcid on a server, and you're ssh'ed in, so that there's no way to open a browser to do the OAuth browser flow. Similarly for any other situation in which a browser can not be opened. In this case, run orcid_auth() on another machine in which you do have the ability to open a browser, then collect the info that's ouptput from orcid_auth() and store it as an environment variable (see above).

Package API

  • orcid_search
  • orcid_external_identifiers
  • orcid_auth
  • orcid
  • identifiers
  • orcid_activities
  • orcid_employments
  • orcid_bio
  • works
  • orcid_fundings
  • orcid_doi
  • orcid_researcher_urls
  • orcid_id
  • orcid_email
  • orcid_keywords
  • orcid_peer_reviews
  • orcid_ping
  • browse
  • orcid_person
  • as.orcid
  • check_dois
  • orcid_address
  • orcid_educations
  • orcid_other_names
  • orcid_works

Installation

Stable version

install.packages("rorcid")

Development version

install.packages("devtools")
devtools::install_github("ropensci/rorcid")
library('rorcid')

as.orcid

There's a function as.orcid() in this package to help coerce an Orcid ID to an object that holds details for that Orcid ID, prints a nice summary, and you can browse easily to that profile. E.g.

as.orcid(x = "0000-0002-1642-628X")
#> <ORCID> 0000-0002-1642-628X
#>   Name: Boettiger, Carl
#>   URL (first): http://www.carlboettiger.info
#>   Country: US
#>   Keywords: Ecology, Evolution, Regime Shifts, Stochastic Dynamics

Or you can pass in many IDs

as.orcid(c("0000-0003-1620-1408", "0000-0002-9341-7985"))
#> [[1]]
#> <ORCID> 0000-0003-1620-1408
#>   Name: Johnson, Thomas
#>   URL (first): 
#>   Country: US
#>   Keywords: 
#> 
#> [[2]]
#> <ORCID> 0000-0002-9341-7985
#>   Name: Binfield, Peter
#>   URL (first): 
#>   Country: US
#>   Keywords:

The browse() function lets you browser to a profile easily with a single function call

browse(as.orcid("0000-0002-1642-628X"))

profile

Get works

The works() function helps get works data from an orcid data object. The output of works() is a data.frame

(out <- works(orcid_id("0000-0002-0233-1757")))
#> # A tibble: 6 x 27
#>   `put-code` type  visibility path  `display-index` `created-date.v…
#> *      <int> <chr> <chr>      <chr> <chr>                      <dbl>
#> 1    5296064 JOUR… PUBLIC     /000… 0                  1362713629019
#> 2    5296065 JOUR… PUBLIC     /000… 0                  1362713629025
#> 3    5296066 JOUR… PUBLIC     /000… 0                  1362713629032
#> 4    9012984 JOUR… PUBLIC     /000… 0                  1369326854424
#> 5    9012985 JOUR… PUBLIC     /000… 0                  1369326854429
#> 6    9012986 JOUR… PUBLIC     /000… 0                  1369326854433
#> # ... with 21 more variables: `last-modified-date.value` <dbl>,
#> #   `source.source-client-id` <lgl>, `source.source-orcid.uri` <chr>,
#> #   `source.source-orcid.path` <chr>, `source.source-orcid.host` <chr>,
#> #   `source.source-name.value` <chr>, title.subtitle <lgl>,
#> #   `title.translated-title` <lgl>, title.title.value <chr>,
#> #   `external-ids.external-id` <list>,
#> #   `publication-date.media-type` <lgl>,
#> #   `publication-date.year.value` <chr>,
#> #   `publication-date.month.value` <chr>,
#> #   `publication-date.day.value` <chr>, `publication-date.day` <lgl>,
#> #   `external-ids` <lgl>, `publication-date` <lgl>,
#> #   `source.source-orcid` <lgl>, `source.source-client-id.uri` <chr>,
#> #   `source.source-client-id.path` <chr>,
#> #   `source.source-client-id.host` <chr>

Search Orcid

Get a list of names and Orcid IDs matching a name query

orcid(query = "carl boettiger")
#> # A tibble: 100 x 3
#>    `orcid-identifier.uri`        `orcid-identifier.p… `orcid-identifier.h…
#>  * <chr>                         <chr>                <chr>               
#>  1 https://orcid.org/0000-0002-… 0000-0002-1642-628X  orcid.org           
#>  2 https://orcid.org/0000-0002-… 0000-0002-3554-5196  orcid.org           
#>  3 https://orcid.org/0000-0002-… 0000-0002-5951-4503  orcid.org           
#>  4 https://orcid.org/0000-0002-… 0000-0002-7462-1956  orcid.org           
#>  5 https://orcid.org/0000-0003-… 0000-0003-1021-5374  orcid.org           
#>  6 https://orcid.org/0000-0002-… 0000-0002-7790-5102  orcid.org           
#>  7 https://orcid.org/0000-0002-… 0000-0002-8885-5438  orcid.org           
#>  8 https://orcid.org/0000-0002-… 0000-0002-4791-6222  orcid.org           
#>  9 https://orcid.org/0000-0003-… 0000-0003-0471-9533  orcid.org           
#> 10 https://orcid.org/0000-0003-… 0000-0003-3675-4042  orcid.org           
#> # ... with 90 more rows

You can string together many search terms

orcid(query = "johnson cardiology houston")
#> # A tibble: 100 x 3
#>    `orcid-identifier.uri`        `orcid-identifier.p… `orcid-identifier.h…
#>  * <chr>                         <chr>                <chr>               
#>  1 https://orcid.org/0000-0002-… 0000-0002-0897-2301  orcid.org           
#>  2 https://orcid.org/0000-0002-… 0000-0002-5281-4466  orcid.org           
#>  3 https://orcid.org/0000-0001-… 0000-0001-6172-5804  orcid.org           
#>  4 https://orcid.org/0000-0001-… 0000-0001-8188-0078  orcid.org           
#>  5 https://orcid.org/0000-0002-… 0000-0002-4968-6272  orcid.org           
#>  6 https://orcid.org/0000-0002-… 0000-0002-1918-5792  orcid.org           
#>  7 https://orcid.org/0000-0001-… 0000-0001-9667-1615  orcid.org           
#>  8 https://orcid.org/0000-0003-… 0000-0003-0945-6138  orcid.org           
#>  9 https://orcid.org/0000-0002-… 0000-0002-9503-6836  orcid.org           
#> 10 https://orcid.org/0000-0001-… 0000-0001-5156-0356  orcid.org           
#> # ... with 90 more rows

And use boolean operators

orcid("johnson AND(caltech OR 'California Institute of Technology')")
#> # A tibble: 100 x 3
#>    `orcid-identifier.uri`        `orcid-identifier.p… `orcid-identifier.h…
#>  * <chr>                         <chr>                <chr>               
#>  1 https://orcid.org/0000-0002-… 0000-0002-0026-2516  orcid.org           
#>  2 https://orcid.org/0000-0001-… 0000-0001-6495-9892  orcid.org           
#>  3 https://orcid.org/0000-0002-… 0000-0002-7042-5739  orcid.org           
#>  4 https://orcid.org/0000-0003-… 0000-0003-0533-6833  orcid.org           
#>  5 https://orcid.org/0000-0002-… 0000-0002-3909-2294  orcid.org           
#>  6 https://orcid.org/0000-0003-… 0000-0003-4021-2473  orcid.org           
#>  7 https://orcid.org/0000-0002-… 0000-0002-7705-5670  orcid.org           
#>  8 https://orcid.org/0000-0001-… 0000-0001-5320-7003  orcid.org           
#>  9 https://orcid.org/0000-0002-… 0000-0002-4207-6746  orcid.org           
#> 10 https://orcid.org/0000-0002-… 0000-0002-7676-5347  orcid.org           
#> # ... with 90 more rows

And you can use start and rows arguments to do pagination

orcid("johnson cardiology houston", start = 2, rows = 3)
#> # A tibble: 3 x 3
#>   `orcid-identifier.uri`         `orcid-identifier.p… `orcid-identifier.h…
#> * <chr>                          <chr>                <chr>               
#> 1 https://orcid.org/0000-0001-6… 0000-0001-6172-5804  orcid.org           
#> 2 https://orcid.org/0000-0001-8… 0000-0001-8188-0078  orcid.org           
#> 3 https://orcid.org/0000-0002-4… 0000-0002-4968-6272  orcid.org

Search by Orcid ID

out <- orcid_id(orcid = "0000-0002-9341-7985")
out$`0000-0002-9341-7985`$name
#> $`created-date`
#> $`created-date`$value
#> [1] 1.460762e+12
#> 
#> 
#> $`last-modified-date`
#> $`last-modified-date`$value
#> [1] 1.460762e+12
#> 
#> 
#> $`given-names`
#> $`given-names`$value
#> [1] "Peter"
#> 
#> 
#> $`family-name`
#> $`family-name`$value
#> [1] "Binfield"
#> 
#> 
#> $`credit-name`
#> NULL
#> 
#> $source
#> NULL
#> 
#> $visibility
#> [1] "PUBLIC"
#> 
#> $path
#> [1] "0000-0002-9341-7985"

Search by DOIs

There is a helper function check_dois() that uses a regex checker to see if your DOIs are likely good or likely bad:

All good DOIs

dois <- c("10.1371/journal.pone.0025995","10.1371/journal.pone.0053712",
       "10.1371/journal.pone.0054608","10.1371/journal.pone.0055937")
check_dois(dois)
#> $good
#> [1] "10.1371/journal.pone.0025995" "10.1371/journal.pone.0053712"
#> [3] "10.1371/journal.pone.0054608" "10.1371/journal.pone.0055937"
#> 
#> $bad
#> NULL

Some good, some bad

dois <- c("10.1016/j.medpal.2008.12.005","10.1080/00933104.2000.10505926","10.1037/a0024480",
        "10.1002/anie.196603172","2344","asdf","232","asdf","23dd")
check_dois(dois)
#> $good
#> [1] "10.1016/j.medpal.2008.12.005"   "10.1080/00933104.2000.10505926"
#> [3] "10.1037/a0024480"               "10.1002/anie.196603172"        
#> 
#> $bad
#> [1] "2344" "asdf" "232"  "asdf" "23dd"

Basic search

orcid_doi(dois = "10.1087/20120404")
#> [[1]]
#> # A tibble: 8 x 3
#>   `orcid-identifier.uri`         `orcid-identifier.p… `orcid-identifier.h…
#> * <chr>                          <chr>                <chr>               
#> 1 https://orcid.org/0000-0001-5… 0000-0001-5727-2427  orcid.org           
#> 2 https://orcid.org/0000-0001-7… 0000-0001-7343-9784  orcid.org           
#> 3 https://orcid.org/0000-0003-1… 0000-0003-1603-8743  orcid.org           
#> 4 https://orcid.org/0000-0002-2… 0000-0002-2123-6317  orcid.org           
#> 5 https://orcid.org/0000-0003-3… 0000-0003-3188-6273  orcid.org           
#> 6 https://orcid.org/0000-0002-5… 0000-0002-5993-8592  orcid.org           
#> 7 https://orcid.org/0000-0001-5… 0000-0001-5109-3700  orcid.org           
#> 8 https://orcid.org/0000-0003-1… 0000-0003-1419-2405  orcid.org           
#> 
#> attr(,"class")
#> [1] "orcid_doi"

This DOI is not a real one, but a partial DOI, then we can fuzzy search

orcid_doi(dois = "10.1087/2", fuzzy = TRUE, rows = 5)
#> [[1]]
#> # A tibble: 5 x 3
#>   `orcid-identifier.uri`         `orcid-identifier.p… `orcid-identifier.h…
#> * <chr>                          <chr>                <chr>               
#> 1 https://orcid.org/0000-0001-6… 0000-0001-6971-1351  orcid.org           
#> 2 https://orcid.org/0000-0001-5… 0000-0001-5919-8670  orcid.org           
#> 3 https://orcid.org/0000-0001-6… 0000-0001-6081-0708  orcid.org           
#> 4 https://orcid.org/0000-0001-6… 0000-0001-6555-0837  orcid.org           
#> 5 https://orcid.org/0000-0002-5… 0000-0002-5360-2529  orcid.org           
#> 
#> attr(,"class")
#> [1] "orcid_doi"

Meta

  • Please report any issues or bugs
  • License: MIT
  • Get citation information for rorcid in R doing citation(package = 'rorcid')
  • Please note that this project is released with a Contributor Code of Conduct. By participating in this project you agree to abide by its terms.

ropensci_footer

rorcid's People

Contributors

sckott avatar maelle avatar

Watchers

James Cloos avatar Mathieu Saby avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.