Capítulo 9 Consulta de fuentes bibliográficas

En este apartado vamos a consultar dos fuentes de datos bibliográficas que disponen de APIs que se pueden interpelar desde R: Crossref y Unpaywall.

9.1 Crossref

Crossref es una organización dedicada a enlazar metadatos de publicaciones académicas. Para interactuar con su API vamos a utilizar el paquete rcrossref. Lo primero, como siempre, es instalar el paquete y llamarlo.

library(rcrossref)

La función cr_works() permite buscar documentos por DOI. Podemos buscar directamente algunos DOIs o guardarlos previamente en un objeto para buscarlos todos conjuntamente como haremos a continuación.

dois <- c("10.1038/s41598-019-57002-9",
             "10.1155/2019/4146362",
             "10.1186/s13100-019-0197-9",
             "10.1038/s41598-019-56941-7",
             "10.1177/1087054719894378")
referencias <- cr_works(dois)

La siguiente es otra manera de hacer lo mismo con una única función.

referencias <- cr_works(dois=c("10.1002/leap.1347",
                                "10.1108/OIR-09-2019-0291",
                                "10.1353/pla.2020.0031",
                                "10.1016/j.acalib.2018.07.012"))

La información contenida en el objeto referencias está organizada en tres partes (meta, data y facets), pero la más interesante es la denominada data. Usaremos la función pluck() del paquete purrr para extraer esta información y guardarla en un nuevo objeto. Para concatenar las funciones usaremos un pipe %>%. Se trata de un operador que toma el resultado de una acción para convertirlo inmediatamente en el input de la siguiente.

library(purrr)
library(tidyverse)
referencias2 <- cr_works(dois) %>%
purrr::pluck("data")

De entre la información disponible, vamos a extraer tres campos: título, doi e issn.

referencias3 <- referencias2 %>%
dplyr::select(title, doi, issn)

Veamos algunos ejemplos de búsquedas por campos guardando los resultados en un nuevo objeto.

ecologia <- cr_works(query = "ecologia")
urbano <- cr_works(flq = c(query.author = "urbano"))

Y un par de ejemplos de consultas que nos devuelven el resultado en la consola.

cr_citation_count("10.1002/leap.1099")
##                 doi count
## 1 10.1002/leap.1099    32
cr_journals(issn = "1575-5886")
## $meta
## NULL
## 
## $data
##                                                               title
## 1 BiD textos universitaris de biblioteconomia i documentaci<U+FFFD>
##                                 publisher      issn last_status_check_time
## 1 Edicions de la Universitat de Barcelona 1575-5886             2021-11-03
##   deposits_abstracts_current deposits_orcids_current deposits
## 1                       TRUE                   FALSE     TRUE
##   deposits_affiliations_backfile deposits_update_policies_backfile
## 1                          FALSE                             FALSE
##   deposits_similarity_checking_backfile deposits_award_numbers_current
## 1                                 FALSE                          FALSE
##   deposits_resource_links_current deposits_ror_ids_current deposits_articles
## 1                           FALSE                    FALSE              TRUE
##   deposits_affiliations_current deposits_funders_current
## 1                         FALSE                    FALSE
##   deposits_references_backfile deposits_ror_ids_backfile
## 1                         TRUE                     FALSE
##   deposits_abstracts_backfile deposits_licenses_backfile
## 1                       FALSE                      FALSE
##   deposits_award_numbers_backfile deposits_open_references_backfile
## 1                           FALSE                              TRUE
##   deposits_open_references_current deposits_descriptions_current
## 1                             TRUE                         FALSE
##   deposits_references_current deposits_resource_links_backfile
## 1                        TRUE                            FALSE
##   deposits_descriptions_backfile deposits_orcids_backfile
## 1                          FALSE                    FALSE
##   deposits_funders_backfile deposits_update_policies_current
## 1                     FALSE                            FALSE
##   deposits_similarity_checking_current deposits_licenses_current
## 1                                FALSE                     FALSE
##   affiliations_current similarity_checking_current descriptions_current
## 1                    0                           0                    0
##   ror_ids_current funders_backfile licenses_backfile funders_current
## 1               0                0                 0               0
##   affiliations_backfile resource_links_backfile orcids_backfile
## 1                     0                       0               0
##   update_policies_current open_references_backfile ror_ids_backfile
## 1                       0                        1                0
##   orcids_current similarity_checking_backfile references_backfile
## 1              0                            0          0.08088235
##   descriptions_backfile award_numbers_backfile update_policies_backfile
## 1                     0                      0                        0
##   licenses_current award_numbers_current abstracts_backfile
## 1                0                     0                  0
##   resource_links_current abstracts_current open_references_current
## 1                      0            0.1875                       1
##   references_current current_dois backfile_dois total_dois
## 1          0.1666667           96           272        368
## 
## $facets
## NULL

9.2 Unpaywall

Unpaywall es una extensión de navegador para localizar versiones en acceso abierto de artículos científicos. Para consultarlo desde R utilizaremos el paquete roadoi.

library(roadoi)

Haremos una consulta sobre la disponibilidad de los artículos cuyos DOIs teníamos guardados en el objeto mis_dois. Aunque la consulta es libre, nos pide que nos identifiquemos con nuestro correo electrónico.

dois_oa <- roadoi::oadoi_fetch(dois = dois, email = "borrego@ub.edu")

Consultamos los campos en los que está organizada la información que hemos recuperado. Para conocer el significado puedes consultar la página web de Unpaywall.

names(dois_oa)
##  [1] "doi"                    "best_oa_location"       "oa_locations"          
##  [4] "oa_locations_embargoed" "data_standard"          "is_oa"                 
##  [7] "is_paratext"            "genre"                  "oa_status"             
## [10] "has_repository_copy"    "journal_is_oa"          "journal_is_in_doaj"    
## [13] "journal_issns"          "journal_issn_l"         "journal_name"          
## [16] "publisher"              "published_date"         "year"                  
## [19] "title"                  "updated_resource"       "authors"

Del objeto con la información podemos eliminar los documentos para los que no existe una versión en acceso abierto.

dois_oa2 <- dois_oa %>% dplyr::filter(is_oa == TRUE)

9.3 Ejercicio 9. Extracción de datos de Crossref y Unpaywall

Realiza una búsqueda en Scopus sobre algún tema o autor de tu interés. Descarga los DOIs de los primeros diez resultados (o escoge diez resultados que te interesen). A continuación, busca en Crossref estos 10 artículos y extrae sus títulos. Finalmente, determina, a través de Unpaywall, si están disponibles en acceso abierto.