내가 제대로 내 쿼리를 인코딩하는 방법을 알아내는 2 단계 문제
- 에게 정말로
는 컬 전화
- 이 만들기에 삽입 할 내 문제를 파악하는 방법이다 함수는 날짜 벡터를 기반으로 API 호출을 만들어 데이터 프레임에 추가했습니다.
다음은 내가 한 일입니다.
library(tidyverse)
library(jsonlite)
library(urltools)
library(httr)
# Function For Pulling by Date
get_newsriver_bydate <- function(query, date_v){
#Being Kind to the free API - Shout out to Elia at Newsriver who has been ever patient
pb$tick()$print()
Sys.sleep(sample(seq(0.5, 2.5, 0.5), 1))
#This is where is used the URL encode package as suggested by quartin
url_base <- "https://api.newsriver.io/v2/search"
create_curl_call <- url_base %>%
param_set("query",url_encode(query)) %>%
param_set("sortBy", "_score") %>%
param_set("sortOrder", "DESC") %>%
param_set("limit", "100")
#I had most of this before however I changed my output to a tibble
#more versatile to work with
get_curl <- GET(create_curl_call, add_headers(Authorization = paste(api_key, sep = "")))
curl_to_json <- content(get_curl, as = "text", encoding = "UTF-8")
news_df <- fromJSON(curl_to_json, flatten = TRUE)
news_df$discoverDate <- as.Date(news_df$discoverDate)
as.tibble(news_df)
}
# Set Configration and Set API key
set_config(config(ssl_verifypeer = 0L))
api_key <- "mykey"
#Set my vector of Dates
dates1 <- seq(as.Date("2017-09-01"), as.Date("2017-10-01"), by = "days")
#Set up my progress bar
pb <- progress_estimated(length(dates1))
#Sprintf my query into a vector of queries based on date
query <- sprintf('text:"Canada" AND text:"Rocks" AND language:EN AND discoverDate:[%s TO %s]',dates1, dates1)
#Run the query and be patient
news_df <- map_df(query, get_newsriver_bydate, .id = "query")
내 연구 방법에 대한 그래서
나는이 2 개의 문제
를 해결하기 위해 온 방법
는 Quartin 나에게 urltools 패키지 https://cran.rstudio.com/web/packages/urltools/index.html 찾아 볼 수있는 제안했다 -이 패키지는 당신이 인코딩하고 URL을 디코딩하는 데 도움을 빠르고 벡터화 된 다양한 기능. 다음으로 내 문제는 정확한 쿼리를 얻는 것입니다. API에서 가져 오려는 사람에게 API 문서를 보았습니다. 생각할 필요도없는 것처럼 들릴 수는 있지만 내가 그것을 구축 할 수 있도록 이전 답변의 번호를 사용하는 함수를 작성하면 내 질문에
를 게시하기 전에 그것을 전체 읽기를 포기하지 않았다 그러나 아래 포스트는 가장
도움
API Query for loop 이 게시물은 진행 막대와지도 기능을 사용하여 모든 것을 하나의 데이터 프레임으로 가져 오는 데 도움이되었습니다.
더 나은 대답이 될 수도 있지만 지금까지는 저에게 좋습니다.
여기에 어떤 문제가 있는지 잘 모르겠습니다. [쿼리 작성기] (https://console.newsriver.io/river/0)를 보면 텍스트, 제목, 웹 사이트 이름 및 언어로 쿼리 할 수 있으며 discoverDate (결과 정렬 만 가능)로 쿼리 할 수는 없습니다. 내가 다른 것을 제안 할 수 있다면'urltools' 패키지, 특히'param_set' 함수를 살펴보십시오. 쿼리를보다 깔끔한 방법으로 만들 수 있습니다 : 'url_base %> % param_set ("query", "...") %> % param_set ("sortBy", "_score") %> % param_set ("sortOrder" "DESC") %> % param_set ("limit", "100")' – quartin
@quartin 훌륭한 조언 URL 인코딩을 도와주는 API 작성자도 있습니다. 곧 답변을 게시하겠습니다. – mannym
@quartin updated – mannym