将 csv 上传到 R 中的 api
Uploading a csv to an api in R
为了调用人口普查地理编码器 api,我使用了 "Batch Geocoding" 标题下 http://geocoding.geo.census.gov/geocoder/Geocoding_Services_API.pdf 文档中的提示。他们为批量调用 api 提供的 shell 命令是
curl --form addressFile=@address.csv --form benchmark=4 http://geocoding.geo.census.gov/geocoder/locations/addressbatch --output geocoderesult.csv
其中 address.csv 是要上传的文件。
这非常有效。但是,我想创建一个 R 脚本来使整个过程自动化。
在 R 中执行上述命令的等效方法是什么? RCurl 包中的 postForm() 可以完成这个吗?
顺便说一句,上传的 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
谢谢!
使用 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"
)
为了调用人口普查地理编码器 api,我使用了 "Batch Geocoding" 标题下 http://geocoding.geo.census.gov/geocoder/Geocoding_Services_API.pdf 文档中的提示。他们为批量调用 api 提供的 shell 命令是
curl --form addressFile=@address.csv --form benchmark=4 http://geocoding.geo.census.gov/geocoder/locations/addressbatch --output geocoderesult.csv
其中 address.csv 是要上传的文件。
这非常有效。但是,我想创建一个 R 脚本来使整个过程自动化。
在 R 中执行上述命令的等效方法是什么? RCurl 包中的 postForm() 可以完成这个吗?
顺便说一句,上传的 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
谢谢!
使用 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"
)