Записать данные во времени с лимитом API в R - PullRequest
0 голосов
/ 11 октября 2019

Я пытаюсь удалить сообщения с сайта Nordpool.

Ссылка на сообщения: https://umm.nordpoolgroup.com/#/messages?publicationDate=all&eventDate=nextweek

API: https://developers.nordpoolgroup.com/docs/umm-api-messages-search

К сожалению, API позволяет удалять только 1000 сообщений наодин раз. Тем не менее, я хочу включить все сообщения для Nuclear в SE с 01.01.2012 по сегодняшний день (определенно более 1000 сообщений).

Вот код, который я должен отбросить за последние 1000 сообщений.

url <- "https://ummapi.nordpoolgroup.com/messages?fuelTypes=14&IncludeOutdated=true&publicationStopDate=2019-10-11&areas=10Y1001A1001A46L&limit=1000"

data <- as.data.frame(fromJSON(url))

Я думал, возможно ли написать цикл, который может проходить через все даты, однако не может решитьэтот вопрос до сих пор. Может быть, у вас есть идеи?

Большое спасибо,

Катя

UPD. Благодаря @dswdsyd мне удалось изменить код и получить правильный результат. Теперь это выглядит так:

url <- "https://ummapi.nordpoolgroup.com/messages?fuelTypes=14&IncludeOutdated=true&areas=10Y1001A1001A46L&limit=1000&skip="
    skiprec <- 0
    max <- 0
    df1 <- data.frame()

repeat {
  url <- paste0("https://ummapi.nordpoolgroup.com/messages?fuelTypes=14&IncludeOutdated=true&areas=10Y1001A1001A46L&limit=1000&skip=",skiprec)
  req <- as.data.frame(fromJSON(url, flatten = TRUE))
  max <- req$total[1]
  df1 <- rbind.fill(df1,req)
  skiprec <- skiprec + 1000
  if(skiprec >= max) {
    break
  }
  else {
    rm(req)
    }
 }

1 Ответ

0 голосов
/ 13 октября 2019

Глядя на документацию по API, кажется, что есть возможность пропустить / перейти вперед по X записям, поэтому в основном вы получаете доступ к следующим 1000 записям, устанавливая значение пропуска равным 2000.

Следовательно, вы можетевероятно, напишите цикл for, чтобы пройти цикл, пока не закончится день, то есть что-то вроде этого:

library(jsonlite)

url <- "https://ummapi.nordpoolgroup.com/messages?fuelTypes=14&IncludeOutdated=true&publicationStopDate=2019-10-11&areas=10Y1001A1001A46L&limit=1000&skip="
max <- 0
skiprec <- 0
df1 <- c()

repeat {
  url <- paste0(url,skiprec)
  req <- fromJSON(url)

  max <- req$total

  article <- req$items$reasonCode
  df1 <- append(df1,article)

  if(skiprec >= max) {
    break
  }
  else {
    skiprec <- skiprec + 1000
  }

}

Надеюсь, это поможет!

...