2016-05-30 11 views
0

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

Я был в состоянии получить мои запросы GET отформатирован в синтаксис, что R (в частности HTTR пакет) принимает:

GET ("https://us10.api.mailchimp.com/3.0/lists/list_id_XXXXX/members/MEMBER_HASH_#######", запрос = список (apikey = 'XXXXXXXXXXXXXX'))

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

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

< - авт аутентифицировать ("anystring", "XXXXXXXXXXXXXX", тип = "основной") Parms < - «[{ "email_address": "[email protected]"," status_if_new»: "подписаны"}] PUT ("https://us10.api.mailchimp.com/3.0/lists/list_id_XXXXX/members/MEMBER_HASH_#######", конфиг = AUTH, тело = Parms, закодировать = "JSON")

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

Спасибо.

ответ

0

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

)