R httr положить запросы

Я пытаюсь вставить несколько запросов PUT в какой-то устаревший код R, который у меня есть, который ежедневно выполняет ETL в небольшой базе данных. Эти запросы будут добавлять пользователей в список рассылки электронной почты в MailChimp.

Мне удалось отформатировать мои запросы GET в синтаксисе, который принимает R (в частности, пакет httr):

GET("https://us10.api.mailchimp.com/3.0/lists/list_id_XXXXX/members/MEMBER_HASH_#######", query = list(apikey = 'XXXXXXXXXXXXXXXX'))

Однако, когда я пытаюсь сделать что-то подобное для запросов PUT, этот простой синтаксис не работает - вы не можете просто передать КЛЮЧ API и/или запрошенные параметры напрямую через URL-адрес. Я получаю ошибку 401, если использую тот же синтаксис, что и для GET.

Я считаю, что мне нужно использовать параметр CONFIG для передачи ключа API (используя AUTHENTICATE или ADD_HEADERS) и запрошенные параметры в BODY, чтобы запрос PUT работал, но я не могу заставить синтаксис работать - это дает 400 ошибка:

auth ‹- authentication("anystring", "XXXXXXXXXXXXXX", type = "basic") parms ‹- '[{"email_address" : "[email protected]", "status_if_new" : "подписан"}]' PUT(" https://us10.api.mailchimp.com/3.0/lists/list_id_XXXXX/members/MEMBER_HASH_#######", config=auth,body=parms,encode="json")

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

Спасибо.


person user3381203    schedule 30.05.2016    source источник


Ответы (1)


Получил некоторую помощь от списка рассылки группы пользователей R... приведенный ниже код теперь работает и отправляет запрос PUT в API.

auth         <- authenticate("<USER_NAME>", "<API KEY>", type = "basic")
params       <- list(email_address = email_to_add, status_if_new ="subscribed")
path         <- "https://us10.api.mailchimp.com/3.0/lists/xxxxxxxx/members/hash_email_to_add"
path         <- gsub('hash_email_to_add',digest(email_to_add,algo="md5",serialize=F),path)

PUT(url=path,
config = auth,
body = params,
encode = "json"

)

person user3381203    schedule 13.06.2016