2014-12-09 5 views
5

Отказ от ответственности: пока мне удалось захватить данные из другого источника с помощью функции POST httr, пусть будет известно, что я полный n00b в отношении httr и HTML-форм в целом.httr: получение данных с POST()

Я хотел бы привести некоторые данные непосредственно в R с веб-сайта, используя httr. Моя первая попытка заключалась в передаче именованного списка в тело arg (как показано в this vignette). Тем не менее, я заметил квадратные скобки в форме ввода имен (по крайней мере I думаю они являются входными аргументами формы). Поэтому вместо того, я попытался переходящим в теле в виде строки, как я думаю, он должен появиться в теле запроса:

url <- 'http://research.stlouisfed.org/fred2/series/TOTALSA/downloaddata' 
query <- paste('form[native_frequency]=Monthly', 'form[units]=lin', 
       'form[frequency]=Monthly', 'form[obs_start_date]="1976-01-01"', 
       'form[obs_end_date]="2014-11-01"', 'form[file_format]=txt' 
       sep = '&') 
response <- POST(url, body = query) 

В любом случае, приведенный выше код просто возвращает исходный веб-страницы код, и я не могу понять, как правильно отправить форму, чтобы она возвращала те же данные, что и вручную, нажав кнопку «Загрузить данные» формы.

В Инструментах разработчика/Сеть в Chrome он указывает в заголовке ответа на Content-Disposition, что есть вложение текстового файла, содержащее данные, когда я вручную нажимаю кнопку «Загрузить данные» в форме. Кажется, что это ни в одном из заголовков, связанных с объектом ответа в коде выше. Почему этот файл не возвращается по запросу POST - где находится файл с данными?

Чувствуется, что у меня что-то не хватает. Кто-нибудь хочет помочь мне подключить точки?

ответ

6

Как правило, если вы собираетесь использовать httr, вы позволяете ему создавать и кодировать данные для вас, вы просто передаете информацию через список значений формы. Попробуйте

url<-"http://research.stlouisfed.org/fred2/series/TOTALSA/downloaddata" 
query <- list('form[native_frequency]'="Monthly", 
    'form[units]'="lin", 
    'form[frequency]'="Monthly", 
    'form[obs_start_date]'="1996-01-01", 
    'form[obs_end_date]'="2014-11-01", 
    'form[file_format]'="txt") 
response <- POST(url, body = query) 
content(response, "text") 

и возвращение выглядит как

[1] "Title:    Total Vehicle Sales\r\nSeries ID:   TOTALSA\r\nSource: 
US. Bureau of Economic Analysis\r\nRelease:    Supplemental Estimates, Motor 
Vehicles\r\nSeasonal Adjustment: Seasonally Adjusted Annual Rate\r\nFrequency:   Monthly\r\nUnits:    
Millions of Units\r\nDate Range:   1996-01-01 to 2014-11- 
01\r\nLast Updated:  2014-12-05 7:16 AM CST\r\nNotes:    \r\n\r\nDATE  
VALUE\r\n1996-01-01 14.8\r\n1996-02-01 15.6\r\n1996-03-01 16.0\r\n1996-04-01 15.5\r\n1996-05-01 
16.0\r\n1996-06-01 15.3\r\n1996-07-01 15.1\r\n1996-08-01 15.5\r\n1996-09-01 15.5\r\n1996-10-01 15.3\r 
+0

Спасибо за ваш ответ - я совершенно забыл, что вы можете создать именованные списки с строками как для ключа и значения. К сожалению, это все еще не возвращает данные с разделителями табуляции в текстовом формате, которые вы могли бы получить, нажав кнопку отправки. Я отредактирую свой первоначальный вопрос, чтобы уточнить. – circld

+0

@circld Что вы получаете как ответ? Я вижу данные с разделителями табуляции, возвращаемые как содержимое. Я обновил свой пост, чтобы показать, что я получаю. Как эта другая форма, что вы хотите? – MrFlick

+0

Нет, ты совершенно прав. Имела опечатка в названном списке. Спасибо за вашу помощь! – circld

Смежные вопросы