Ошибка в open.connection (con, "rb"): ошибка HTTP 400 с R Studio - PullRequest
0 голосов
/ 11 марта 2020

Я хочу получить все статьи по редактированию генома из API-интерфейса Guardian с помощью R STudio. Я попробовал некоторый код и получил несколько ошибок.

data <- fromJSON("https://content.guardianapis.com/search?q=genome%20editing&show- 
blocks=body&&api-key=myapikey&page-size=200")

number_calls <- data$response$pages
api_calls <- paste("https://content.guardianapis.com/search?q=genome%20editing&show- 
blocks=body&api-key=myapikey&page- 
size=200page=", as.character(c(1:number_calls)), sep = "")

DatafromCall <- function(x) {
    data <- fromJSON(x)  
    body <- data$response$results$blocks$body
    textContent <- vector()
    for (i in seq_along(body)) {
    textContent[i] <- ifelse(is.null(body[[i]]$bodyTextSummary), NA, 
    body[[i]]$bodyTextSummary)
 }  
} 

for (i in 1:number_calls) {
all.data <- rbind(DataframeFromCall(api_calls[i]))

}

, и я получил сообщение об ошибке в open.connection (con, "rb"): ошибка HTTP 400

library(guardianapi)
Genomeediting <- gu_content(query= "genome%20editing")

и я получил ошибку в open.connection (con, "rb"): ошибка HTTP 403

Есть предложения?

1 Ответ

0 голосов
/ 11 марта 2020

Я получил решение со следующим кодом:

library(jsonlite)
library(tidyverse)
library(httr)
library(stringr)

# APIs 
url1 <- paste("https://content.guardianapis.com/search?api- 
key=c3c4b8ff-bf4b-473f-832f-0440850a95be", sep = "", collapse="") 
query1 <- "&q=genome%20editing&show-blocks=body&page-size=1&page=1"
query2 <- "&q=genome%20editing&show-blocks=body&page- 
size=100&page="

### How many API calls
firstCall <- GET(paste(url1, query1, sep = "")) %>% content()
number_calls <- ceiling(firstCall$response$pages / 100)
api_calls <- paste(url1, query2, as.character(c(1:number_calls)), 
sep = "")

DataFrameFromCall <- function(x) {
  data <- fromJSON(x)  
  body <- data$response$results$blocks$body
  textContent <- vector()
  for (i in seq_along(body)) {
    textContent[i] <- ifelse(is.null(body[[i]]$bodyTextSummary), 
    NA, body[[i]]$bodyTextSummary)
  }
  TestData <- data.frame(textContent)
  return(TestData)
} 

all.data <- data.frame(textContent=character(),
                   stringsAsFactors=FALSE)

for (i in 1:number_calls) {
  all.data <- rbind(all.data, DatafromCall(api_calls[i]))
}

tibbleData <- as_tibble(all.data)

write.table(tibbleData, "GuardianGenomeEditing.txt", append = 
FALSE, sep = " ", dec = ".", row.names = TRUE, col.names = TRUE)
...