r - लूप के लिए API क्वेरी



loops (1)

इस का पहला भाग:

library(jsonlite)
library(httr)
library(lubridate)
library(tidyverse)

base_url <- "http://api.kuroganehammer.com"

res <- GET(url = base_url, path = "api/characters")
content(res, as="text", encoding="UTF-8") %>% 
  fromJSON(flatten=TRUE) %>% 
  as_tibble() -> chars

आपको वर्णों का एक डेटा फ्रेम प्रदान करता है

इस:

pb <- progress_estimated(length(chars$id))
map_df(chars$id, ~{

  pb$tick()$print()

  Sys.sleep(sample(seq(0.5, 2.5, 0.5), 1)) # be kind to the free API

  res <- GET(url = base_url, path = sprintf("api/characters/%s/detailedmoves", .x))

  content(res, as="text", encoding="UTF-8") %>% 
    fromJSON(flatten=TRUE) %>% 
    as_tibble() 

}, .id = "id") -> moves

आपको सभी "चालें" का एक डेटा फ्रेम मिलता है और चरित्र के लिए "id" जोड़ता है आप मुफ्त के लिए प्रगति बार भी प्राप्त करते हैं

तब आप या तो left_join() रूप में आवश्यक हो सकते हैं या समूह और घोंसले को एक अलग सूची-नेस्ट कॉलम में स्थानांतरित कर सकते हैं। यदि आप चाहते हैं कि आप से शुरू करें, तो map() बनाम map_df() उपयोग कर सकते हैं।

समय विराम कोड में छोड़ दें। यह एक मुफ़्त एपीआई है और आपको अपनी साइट पर डोज़ से बचने के लिए विराम के समय में वृद्धि करना चाहिए।

मैं एपीआई से कुछ डेटा खींचने की कोशिश कर रहा हूं, यह सब एक ही डाटा फ़्रेम में डालता है। मैं उस यूआरएल में एक वैरिएबल डाल रहा हूं जो मैं खींच रहा हूं और फिर उसे 54 कुंजियों से डेटा खींचने के लिए लूप करें। यहाँ है जो मेरे नोट्स के साथ अब तक है

library("jsonlite")
library("httr")
library("lubridate")
options(stringsAsFactors = FALSE)
url <- "http://api.kuroganehammer.com"

### This gets me a list of 58 observations, I want to use this list to 
### pull data for each using an API

raw.characters <- GET(url = url, path = "api/characters")
## Convert the results from unicode to a JSON
text.raw.characters <- rawToChar(raw.characters$content)
## Convert the JSON into an R object. Check the class of the object after 
## it's retrieved and reformat appropriately
characters <- fromJSON(text.raw.characters)
class(characters)

## This pulls data for an individual character. I want to get one of 
## these for all 58 characters by looping this and replacing the 1 in the
## URL path for every number through 58.
raw.bayonetta <- GET(url = url, path = "api/characters/1/detailedmoves")
text.raw.bayonetta <- rawToChar(raw.bayonetta$content)
bayonetta <- fromJSON(text.raw.bayonetta)

## This is the function I tried to create, but I get a lexical error when 
## I call it, and I have no idea how to loop it.
move.pull <- function(x) {
  char.x <- x
  raw.x <- GET(url = url, path = cat("api/characters/",char.x,"/detailedmoves", sep = ""))
  text.raw.x <- rawToChar(raw.x$content)
  char.moves.x <- fromJSON(text.raw.x)
  char.moves.x$id <- x
  return(char.moves.x)
}




loops