API 用 R 请求

API request with R

我尝试对法国地址进行地理编码。我想使用以下网站:http://adresse.data.gouv.fr/

这个网站上有一个关于 API 如何工作的例子,但我认为它是一些 Linux 代码,我想翻译成 R 代码。目的是给出一个包含地址的csv文件,结果应该是地理坐标。

Linux 代码(示例在网站上给出)

http --timeout 600 -f POST http://api-adresse.data.gouv.fr/search/csv/ data@path/to/file.csv 

我尝试使用以下代码在 R 中"translate"这个

library(httr)
library(RCurl)
queryResults=POST("http://api-adresse.data.gouv.fr/search/csv/",body=list(data=fileUpload("file.csv"))) 
result_geocodage=content(queryResults)

但不幸的是我有一个错误的请求错误。

有人知道我在 R 的翻译中遗漏了什么吗?

谢谢!

举个例子。首先,一些示例数据加上请求:

library(httr)
df <- data.frame(c("13 Boulevard Chanzy", "Gloucester St"), 
                 c("93100 Montreuil", "Jersey"))
write.csv2(df, tf <- tempfile(fileext = ".csv"))
res <- POST("http://api-adresse.data.gouv.fr/search/csv/", 
            timeout(600), 
            body = list(data = upload_file(tf)))

那么,结果:

content(res, sep = ";", row.names = 1)
# c..13.Boulevard.Chanzy....Gloucester.St.. c..93100.Montreuil....Jersey.. latitude longitude
# 1                       13 Boulevard Chanzy                93100 Montreuil 48.85825  2.434462
# 2                             Gloucester St                         Jersey 49.46712  1.145554
# result_label result_score result_type                result_id result_housenumber
# 1                13 Boulevard Chanzy 93100 Montreuil         0.88 housenumber ADRNIVX_0000000268334929                 13
# 2 2 Résidence le Jersey 76160 Saint-Martin-du-Vivier         0.24 housenumber ADRNIVX_0000000311480901                  2
# result_name result_street result_postcode            result_city                       result_context result_citycode
# 1    Boulevard Chanzy            NA           93100              Montreuil 93, Seine-Saint-Denis, Île-de-France           93048
# 2 Résidence le Jersey            NA           76160 Saint-Martin-du-Vivier  76, Seine-Maritime, Haute-Normandie           76617

或者,只是坐标:

subset(content(res, sep = ";", row.names = 1, check.names = FALSE), select = c("latitude", "longitude"))
# latitude longitude
# 1 48.85825  2.434462
# 2 49.46712  1.145554