Правильные параметры для загрузки файла с помощью запросов 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