Загрузка CSV в API в R

Для звонков в api geocoder api я использую советы из документации на http://geocoding.geo.census.gov/geocoder/Geocoding_Services_API.pdf под заголовком "Пакетное геокодирование". Команда оболочки, которую они дают для вызова API для пакета:

curl --form addressFile=@address.csv --form benchmark=4 http://geocoding.geo.census.gov/geocoder/locations/addressbatch --output geocoderesult.csv

где address.csv - файл для загрузки.

Это работает отлично. Тем не менее, я хотел бы создать сценарий R, чтобы автоматизировать весь процесс.

Что было бы эквивалентным способом сделать вышеупомянутую команду в R? Может ли postForm() в пакете RCurl добиться этого?



Кстати, каждая загружаемая строка файла csv ("address.csv") должна иметь вид

Unique ID, Street address, City, State, ZIP

Так, например, он может просто содержать адреса для Apple и Facebook, такие как

1, 1 Infinite Loop, Cupertino, CA, 95014
2, 1 Hacker Way, Menlo Park, CA, 94025

Спасибо!

1 ответ

Решение

С использованием httr библиотека, прямой перевод будет

library('httr')

apiurl <- "http://geocoding.geo.census.gov/geocoder/locations/addressbatch"

addresses <- "1, 1 Infinite Loop, Cupertino, CA, 95014
2, 1 Hacker Way, Menlo Park, CA, 94025"

addresseFile <- "addresses.csv"
writeLines(addresses , addresseFile )

resp<-POST(apiurl, body=list(addressFile=upload_file(addresseFile), benchmark=4), 
     encode="multipart")
content(resp)

Если вы хотите пропустить запись файла csv на диск, вы можете сделать

resp <- POST(apiurl, body=list(
    addressFile = RCurl::fileUpload(
      filename = "data.csv", 
      contents = addresses, 
      contentType = "application/octet-stream"
    ), 
    benchmark=4
  ), 
  encode="multipart"
)
Другие вопросы по тегам