доступ к файлам Dropbox с пробелами в имени пути с помощью API

Этот вопрос связан с моим предыдущим вопросом чтение необработанных данных в R для сохранения в виде файла .RData с использованием API Dropbox

Я сталкиваюсь с проблемами, когда мой путь включает стандартные символы, отличные от URL

db.file.name в предыдущем вопросе — это просто путь к соответствующему файлу в раскрывающемся списке.

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

поэтому, используя и продолжая мой предыдущий пример...

require(httr)
require(RCurl)
db.file.name <- "!! TEST FOLDER/test.RData"
db.app <- oauth_app("db",key="xxxxx", secret="xxxxxxx")
db.sig <- sign_oauth1.0(db.app, token="xxxxxxx", token_secret="xxxxxx")

response <- GET(url=paste0("https://api-content.dropbox.com/1/files/dropbox/",curlEscape(db.file.name)),config=c(db.sig,add_headers(Accept="x-dropbox-metadata")))

Ответ — ошибка, и файл не загружается... со страницы документации https://www.dropbox.com/developers/reference/api он предлагает поместить URL-адрес в кодировку UTF-8... что я не уверен, как это сделать/не уверен, что это работает.

Любая помощь будет принята с благодарностью.


person h.l.m    schedule 31.01.2013    source источник


Ответы (2)


Раньше я был близок... Мне просто нужно было повторно вставить косую черту, используя gsub, чтобы запрос GET работал... так что результат был

response <- GET(url=paste0("https://api-content.dropbox.com/1/files/dropbox/",gsub("%2F","/",curlEscape(db.file.name))),config=c(db.sig,add_headers(Accept="x-dropbox-metadata")))
person h.l.m    schedule 31.01.2013
comment
Спасибо! даже я не использовал этот ответ, но curlEscape это то, что мне нужно. - person agstudy; 22.04.2016

быстрый копипаст от ?iconv,

x <- "fa\xE7ile"
Encoding(x) <- "latin1"
charToRaw(xx <- iconv(x, "latin1", "UTF-8"))
[1] 68 74 74 70 3a 2f 2f 73 74 61 63 6b 6f 76 65 72 66 6c 6f 77 2e 63 6f 6d
Encoding(x)
[1] "latin1"
Encoding(xx)
[1] "UTF-8"

Отвечает ли это на ваш вопрос?

person Eric Fail    schedule 31.01.2013
comment
К сожалению, это не помогает. Спасибо за попытку. Я понял, что это связано с кодировкой восклицательного знака, так как пробелы в пути к файлу преобразуются в %20 с помощью функции URLencode, т.е. я пробовал без восклицательных знаков, и это работает, но один раз добавляя восклицательные знаки.. .это больше не... - person h.l.m; 31.01.2013