web-dev-qa-db-ja.com

Javascript + MailChimpAPIサブスクライブ

このリクエストを行う場合:

// 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ドキュメントは ここ にあります。

10
barryedmund

さらに調査といじくり回した後、私はこれを解決することができました:

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"など。

19
barryedmund

Javascriptでこれを行うと、APIキーが世界に公開されます。誰かがあなたの鍵を持っている場合、その人はあなたのアカウントに変更を加えたり、アクセスしたりすることができます。

6
John Proestakes

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であることを確認する必要があります。

0
jjbskir