#r #api
Вопрос:
Я пытаюсь запустить этот пример сценария, но когда я набираю эту команду, я получаю следующую ошибку
austin_tx <- city_state("AUSTIN", "TEXAS")
Error in if (this.clean.resp$page_metadata$has_next_page == FALSE) { :
argument is of length zero
есть идеи, почему это происходит?
Ответ №1:
Спереди API изменился.
Конечная точка была удалена. Пожалуйста, обратитесь к https://api.usaspending.gov/docs/endpoints для поддерживаемых в настоящее время конечных точек или https://github.com/fedspendingtransparency/usaspending-api чтобы сообщить о проблеме.
Как я нашел это:
> debug(GET_all_pages) # the error indicates code found in this function
> austin_tx <- city_state("AUSTIN", "TEXAS")
> austin_tx <- city_state("AUSTIN", "TEXAS")
debugging in: GET_all_pages(PATH = "/api/v1/transactions/", QUERY = list(place_of_performance__city_name = CITY_NAME,
place_of_performance__state_name = STATE_NAME))
debug at #1: { ...
Browse[2]> n # 'n' --> step to the next expression
debug at #3: pages <- list()
Browse[2]> n
debug at #5: url <- modify_url("https://api.usaspending.gov", path = PATH,
query = QUERY)
Browse[2]> n
debug at #10: raw.resp <- GET(url)
Browse[2]> n
debug at #11: if (http_type(raw.resp) != "application/json") {
stop("API did not return json. Check 'status code = 200'",
call. = FALSE)
}
Browse[2]> n
debug at #15: this.char.resp <- rawToChar(raw.resp$content)
Browse[2]> n
debug at #17: this.clean.resp <- fromJSON(this.char.resp, flatten = TRUE)
Browse[2]> n
Поскольку мы знаем, что это объект, вызывающий проблему, я останавливаюсь здесь и смотрю на переменную.
Browse[2]> str(this.clean.resp)
List of 1
$ detail: chr "Endpoint has been removed. Please refer to https://api.usaspending.gov/docs/endpoints for currently supported e"| __truncated__
Документ, на который вы ссылались, устарел и нуждается в обновлении в соответствии с инструкциями по адресу https://api.usaspending.gov/docs/endpoints.
Комментарии:
1. Большое спасибо. Могу ли я задать еще один вопрос, поскольку я новичок в этой области. Другой вариант-загрузить набор данных отсюда files.usaspending.gov/database_download . Я скачал небольшой файл. Есть ли какой-либо способ прочитать эту базу данных, используя команды R в качестве фрейма данных, без необходимости сначала использовать опцию postgres?
2. Поскольку в описании файла указано, что это «Архив дампа PostgreSQL» , ответ отрицательный . Я не знаю ни одного инструмента, который обеспечивал бы доступ к формату необработанного дампа postgres (или любой СУБД, я подозреваю). Однако вы можете запустить образ docker postgres , импортировать в него архив дампа и таким образом получить доступ к локальной СУБД. (Если вы никогда не использовали docker, то … это может быть не для тебя.)
3. вы имеете в виду «это может быть не для вас». на случай, если я не знаю, как использовать опцию docker?
4. Использование
docker
не является гигантским, но не всегда интуитивно понятным для всех, поэтому я склонен давать рекомендации с осторожностью. Так что на самом деле это не очень хороший сайт для учебных пособий, которые могли бы помочь в этом, и у меня нет доступной ссылки. Это все.5. Но если вам достаточно комфортно использовать (или вы хотите научиться) докер, то я думаю, что, возможно, это ваш лучший выбор: вытащите
postgres:12
(или:latest
) изображение, начните с чего-то подобногоdocker run -d -p "5432:5432" --name mypg -e POSTGRES_PASSWORD=mysecretpassword -e POSTGRES_DB=usaspending postgres:12
. Затем следуйте инструкциям usaspending в формате pdf по предлагаемому использованиюpg_restore
(из контейнера docker, вероятно, с использованием монтирования тома) для импорта в базу данных. Затем используйте RDBI
иodbc
пакеты для подключения к только что созданному приложению postgres.