Правильные параметры для загрузки файла с помощью запросов API Amazon s3 GET

Я хотел бы иметь возможность скачать .csv файл из моей корзины Amazon S3 с использованием R.

Я начал использовать API, который описан здесь http://docs.amazonwebservices.com/AmazonS3/latest/API/RESTObjectGET.html

Я использую пакет httr создать GET запрос, мне просто нужно выяснить, какие правильные параметры должны быть в состоянии загрузить соответствующий файл.

Я установил response-content-type в text/csv как я знаю это .csv файл, который я надеюсь загрузить... но я получаю следующий ответ:

Response [https://s3-zone.amazonaws.com/bucket.name/file.name.csv?response-content-type=text%2Fcsv]
  Status: 200
  Content-type: text/csv
Date and Time,Open,High,Low,Close,Volume
2007/01/01 22:51:00,5683.00,5683.00,5673.00,5673.00,64
2007/01/01 22:52:00,5675.00,5676.00,5674.00,5674.00,17
2007/01/01 22:53:00,5674.00,5674.00,5673.00,5674.00,42
2007/01/01 22:54:00,5675.00,5676.00,5674.00,5676.00,36
2007/01/01 22:55:00,5675.00,5676.00,5675.00,5676.00,18
2007/01/01 22:56:00,5676.00,5677.00,5674.00,5677.00,64
2007/01/01 22:57:00,5678.00,5678.00,5677.00,5677.00,45
2007/01/01 22:58:00,5679.00,5680.00,5678.00,5680.00,30
 .../01/01 22:59:00,5679.00,5679.00,5677.00,5678.00,19

И никакой файл не загружается, и данные, кажется, находятся в ответе... Я могу извлечь строку символов, созданную в ответе, которая представляет данные, и я предполагаю, что с некоторым усилием она может быть преобразована в data.frame как первоначально хотелось, но есть ли лучший способ загрузки данных... прямо из GET команда, а затем с помощью read.csv читать данные? Я думаю, что это параметр проблемы... просто не уверен, какие параметры должны быть установлены для файла, который будет загружен.

Если люди предлагают преобразование строки... Это структура строки, которую я имею... какие команды мне нужно было бы сделать, чтобы преобразовать ее в data.frame?

chr "Date and Time,Open,High,Low,Close,Volume\r\n2007/01/01 22:51:00,5683.00,5683.00,5673.00,5673.00,64\r\n2007/01/01 22:52:00,5675."| __truncated__

Спасибо

СВ

2 ответа

Ответ на ваш второй вопрос:

> chr <- "Date and Time,Open,High,Low,Close,Volume\r\n2007/01/01 22:51:00,5683.00,5683.00,5673.00,5673.00,64\r\n"
> read.csv(text=chr)
        Date.and.Time Open High  Low Close Volume
1 2007/01/01 22:51:00 5683 5683 5673  5673     64

Если вам нужна дополнительная скорость для read.csv, попробуйте это:

chr <- "Date and Time,Open,High,Low,Close,Volume\r\n2007/01/01 22:51:00,5683.00,5683.00,5673.00,5673.00,64\r\n"
 read.csv(text=chr, colClasses=c("POSIXct", rep("numeric", 5) ) )

Предполагая, что URL-адрес настроен правильно (и нам пока нечего проверять), мне интересно, если вы захотите посмотреть на значение для GET( ...)$content

Может быть:

infile <- read.csv(text=GET(...)$content, colClasses=c("POSIXct", rep("numeric", 5) ) )

Редактировать:

Это было не правильно, потому что данные выглядят как "сырой" формат. Нужно конвертировать из raw, прежде чем он станет закодированным как текст. Я быстро выполнил поиск по Nabble (в конце концов, что-то должно быть хорошо), чтобы найти CSV-файл, который находился в Интернете. Вот что наконец сработало:

read.csv(text=rawToChar( 
                 GET(
                  "http://nseindia.com/content/equities/scripvol/datafiles/16-11-2012-TO-16-11-2012ACCEQN.csv"
                   )[["content"]] ) )
  Symbol Series        Date Prev.Close Open.Price High.Price Low.Price Last.Price Close.Price
1    ACC     EQ 16-Nov-2012     1404.4    1410.95    1410.95   1369.45    1374.95      1378.1
  Average.Price Total.Traded.Quantity Turnover.in.Lacs Deliverable.Qty X..Dly.Qt.to.Traded.Qty
1       1393.62                132921          1852.41           56899                   42.81

Вот один из способов:

library(taRifx) # for stack.list
test <- "Date and Time,Open,High,Low,Close,Volume\r\n2007/01/01 22:51:00,5683.00,5683.00,5673.00,5673.00,64\r\n2007/01/01 22:51:00,5683.00,5683.00,5673.00,5673.00,64\r\n"
stack( sapply( strsplit( test, "\\n" )[[1]], strsplit, split="," ) )

    [,1]                  [,2]      [,3]      [,4]      [,5]      [,6]      
ret "Date and Time"       "Open"    "High"    "Low"     "Close"   "Volume\r"
new "2007/01/01 22:51:00" "5683.00" "5683.00" "5673.00" "5673.00" "64\r"    
new "2007/01/01 22:51:00" "5683.00" "5683.00" "5673.00" "5673.00" "64\r"    

Теперь преобразуйте в data.frame:

testdat <- stack( sapply( strsplit( test, "\\n" )[[1]], strsplit, split="," ) )
rownames(testdat) <- seq(nrow(testdat)) # Because duplicate rownames aren't allowed in data.frames
colnames(testdat) <- testdat[1,]
testdat <- testdat[-1,]
as.data.frame(testdat)
        Date and Time    Open    High     Low   Close Volume\r
2 2007/01/01 22:51:00 5683.00 5683.00 5673.00 5673.00     64\r
3 2007/01/01 22:51:00 5683.00 5683.00 5673.00 5673.00     64\r
Другие вопросы по тегам