このリクエストを行う場合:
// Subscribe a new account holder to a MailChimp list
function subscribeSomeoneToMailChimpList()
{
var options =
{
"apikey": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"id": "xxxxxx",
"email":
{
"email": "[email protected]"
},
"send_welcome": false
};
var mcSubscribeRequest = UrlFetchApp.fetch("https://us4.api.mailchimp.com/2.0/lists/subscribe.json", options);
var mcListObject = Utilities.jsonParse(mcSubscribeRequest.getContentText());
}
この応答が返されます:
https://us4.api.mailchimp.com/2.0/lists/subscribe.json がコード500を返しました。サーバーの応答が切り捨てられました:{"status": "error"、 "code": -100、 "name": "ValidationError"、 "error": "apikey値を指定する必要があります"}(完全な応答を調べるにはmuteHttpExceptionsオプションを使用)(120行目、ファイル "v2")
120行目はUrlFetchApp.fetch
が呼び出されます。
APIキーは有効です(連想配列を含まない、より単純なAPI呼び出しでテストしました)。 APIキーをベースURLに直接追加し、それをoptions
から削除すると、リストIDが無効であるというエラーが表示されます。次に、リストIDをベースURLに直接追加し、それをoptions
から削除すると、電子メールアドレスは連想配列形式である必要があるというエラーが表示されます。
私の質問は、上記の形式を使用して、連想配列を含むリクエストをどのように送信するのですか?
関連するAPIドキュメントは ここ にあります。
さらに調査といじくり回した後、私はこれを解決することができました:
https://<dc>.api.mailchimp.com/2.0/lists/subscribe.json?apikey=<my_api_key>&id=<my_list_id>&email[email][email protected]&merge_vars[FNAME]=John&merge_vars[LNAME]=Doe&double_optin=false&send_welcome=false
どこ <dc>
は、APIキーのダッシュの後の部分に置き換える必要があります。例えば"s1"、 "s2"、 "k1"など。
Javascriptでこれを行うと、APIキーが世界に公開されます。誰かがあなたの鍵を持っている場合、その人はあなたのアカウントに変更を加えたり、アクセスしたりすることができます。
UrlFetchApp.fetch Docsを読んだ後、何が起こっているのか理解できたと思います。 https://developers.google.com/apps-script/reference/url-fetch/url-fetch-app?csw=1#fetch(String)
ペイロードやメソッドなど、リクエストを実行するためにいくつかの追加のパラメータを使用する必要があるようです。 options変数は次のようになります。
var payload = {
"apikey": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"id": "xxxxxx",
"email": {
"email": "[email protected]"
},
"send_welcome": false
};
payload = Utilities.jsonStringify(payload); // the payload needs to be sent as a string, so we need this
var options = {
method: "post",
contentType: "application/json", // contentType property was mistyped as ContentType - case matters
payload: payload
};
var result = UrlFetchApp.fetch("https://<dc>.api.mailchimp.com/2.0/lists/subscribe.json", options);
どこ <dc>
は、APIキーのダッシュの後の部分に置き換える必要があります。例えば"us1"、 "us2"、 "uk1 "など.
問題は、options変数がGETurlパラメーターとしてではなくJSONとして使用されることを想定していることです。また、mailchimpは、GETの代わりにPOSTを使用する方がよいと指定しています。したがって、全体として、メソッドを「post」に設定し、ペイロードが有効なJSONであることを確認する必要があります。