2014-11-20 93 views
1

我想訪問美國人口普查地理編碼批次地址的API,在這裏找到:http://geocoding.geo.census.gov/geocoder/發佈並R中使用HTTR從API接收數據

我也通過這裏的API文檔了:http://geocoding.geo.census.gov/geocoder/Geocoding_Services_API.pdf

我試圖在R中使用httr包來發布使用以下格式的格式化地址的批量csv文件:唯一ID,街道地址,城市,州,郵編 我試過使用單個地址請求版本來自RCurl的getURL並且工作正常,但postForm似乎沒有以正確的方式提交文件。我現在使用的代碼似乎正確發佈請求,但我沒有收到任何地理編碼數據。

curlhandle <- handle("http://geocoding.geo.census.gov/geocoder/geographies/addressbatch", 
    cookies = TRUE) 

# using fileUpload from RCurl instead of upload_file from httr 
upload3 <- fileUpload(contents = address100, contentType = "file") 

test <- POST(url="http://geocoding.geo.census.gov/geocoder/geographies/addressbatch", 
    body = list(addressFile = upload3, 
     benchmark = "Public_AR_Census2010", 
     vintage="Census2010_Census2010"), 
    encode = "multipart", 
    handle = curlhandle, 
    followLocation = TRUE, 
    verbose = TRUE) 

我的要求丟失了什麼嗎?我不確定在這種情況下是否應該使用寫入功能& writedata。任何幫助,將不勝感激!

+0

你得到什麼錯誤?什麼是「address100」?你爲什麼使用'httr'而不是'upload_file'?嘗試發佈到http://httpbin.org/post來查看您的請求是否正確。 – Jeroen 2014-11-20 20:28:43

+0

謝謝!我得到的內容(測試)將是一個單獨的字符串,表示「可能不是空」,表示請求已經通過,但以某種方式很糟糕,因此顯示爲空響應。我使用RCurl的fileUpload,因爲upload_file似乎只接受文件的路徑,而我試圖上傳一個R數據對象。 – Sandy 2014-11-22 03:59:20

回答

0

你似乎有一個奇怪的混合RCurl和HTTR。以下是我會寫請求:

req <- POST(
    "http://geocoding.geo.census.gov/geocoder/geographies/addressbatch", 
    body = list(
    addressFile = upload_file(address100), 
    benchmark = "Public_AR_Census2010", 
    vintage = "Census2010_Census2010" 
), 
    encode = "multipart", 
    verbose()) 
stop_for_status(req) 
content(req) 

(也稱「文件」是不是有效的MIME類型)

+0

非常感謝!這似乎工作,除了我不得不用一個路徑替換地址100保存的csv文件。我試圖用R中的對象使用upload_file,它會返回這個錯誤:錯誤:is.character(path)不是TRUE。 upload_file僅適用於文件路徑嗎? RCurl版本fileUpload是我以前使用的,我認爲它會給出相同的輸出,但接受R數據對象,但實際上當我嘗試使用它時,它不起作用。兩者有什麼區別?據我瞭解,upload_file是fileUpload的包裝。 – Sandy 2014-11-22 03:56:43

+0

'upload_file'的重點是_upload_存在於磁盤上的_file_。如果它不存在,它將不起作用。 – hadley 2014-11-22 20:49:52