我正在努力找出如何使用WWW::Mailchimp ( http://search.cpan.org/~arcanez/WWW-Mailchimp/ )将某人注册到我们的列表中,但也指定了此人的语言(即英语、法语、德语、西班牙语等)。
以下是我到目前为止所拥有的:
my $mailchimp = WWW::Mailchimp->new(apikey => 'xxxx' );
$mailchimp->listSubscribe( id => "xxx", email_address => $in->{Email}, merge_vars => [ FNAME => $name[0], LNAME => $name[1], mc_language => "fr", LANG => "fr", LANGUAGE => "fr" ] );
mc_language => "fr",LANG => "fr",LANGUAGE => "fr"似乎什么也没做(我一直在尝试我所看到的所有平躺在一起的比喻,只希望其中一个能成功!)
当它工作(并要求您确认您的订阅)时,所有语言变量都会被忽略。看看他们的文档,我有点搞不懂该用什么:
https://apidocs.mailchimp.com/api/2.0/lists/subscribe.php
代码"fr“是可以的,但我不知道要传递给它的是什么参数。
以前有人有过这方面的经验吗?除了语言之外,它还能正常工作(但我需要能够用自己的语言发送确认邮件,然后在发送邮件时也要过滤)。
更新: Ok,所以它看起来不是更新的简单例子。我一直在研究v3.0API,这是对旧API(新的函数名、发送请求的新方法等)的彻底改进。我要做的是研究一个"Curl“方法,所以我们至少可以让它继续下去。一旦我做到了这一点,我可能会考虑编写一些代码来处理LWP::UserAgent,因为这样做比处理大量的curl请求更干净。遗憾的是,对于Perl和MailChimp (使用新的API,甚至2.0版本),已经没有任何东西可供使用了!
发布于 2015-10-14 15:59:13
好吧,最后我到了!我一直在与MailChimp支持部门交谈,他们非常有帮助。原来这是个双重问题。
1)需要为所讨论的列表启用Auto-Translate。他们的回答是:
在看了这个电话之后,它似乎已经被正确地设置好了,所以你们在这方面都很好。话虽如此,我看到自动翻译选项似乎没有为您的任何列表启用。为了使确认和所有其他回复电子邮件自动翻译,这将需要为所有正在使用的列表启用。 我们有一些关于这方面的附加信息,在这里,如果您想查看一下:http://kb.mailchimp.com/lists/signup-forms/translate-signup-forms-and-emails#Auto-Translate-Forms
2)在通过API进行请求时,需要专门设置Accept-Language: xx
值。例如,en,fr,es,de等。
这是一个工作的功能,任何人谁需要它在未来。只需确保更新apikey、listId和端点URL。
do_register_email_list('foo@bar.com','Andrew Test',"en")
sub do_register_email_list {
# (email,name,lang)
use WWW::Curl::Easy;
use Digest::MD5;
use JSON;
my @name = split /\s+/, $_[1];
my $apikey = 'xxxx-us6';
my $listid = 'xxxx';
my $email = $_[0];
my $endpoint = "https://us6.api.mailchimp.com/3.0/lists";
my $lang = $_[2]||'en';
my $json = JSON::encode_json({
'email_address' => $email,
'status' => 'pending',
'language' => $lang,
'merge_fields' => {
'FNAME' => $name[0]||'',
'LNAME' => $name[1]||''
}
});
my $curl = WWW::Curl::Easy->new;
my $url = "$endpoint/$listid/members/" . Digest::MD5::md5(lc($email));
$curl->setopt(CURLOPT_HEADER,1);
$curl->setopt(CURLOPT_URL, $url);
# $curl->setopt(CURLOPT_VERBOSE, 1);
$curl->setopt(CURLOPT_USERPWD, 'user:' . $apikey);
$curl->setopt(CURLOPT_HTTPHEADER, ['Content-Type: application/json',"Accept-Language: $lang"]);
$curl->setopt(CURLOPT_TIMEOUT, 10);
$curl->setopt(CURLOPT_CUSTOMREQUEST, 'PUT');
$curl->setopt(CURLOPT_SSL_VERIFYPEER, 0);
$curl->setopt(CURLOPT_POSTFIELDS, $json);
# A filehandle, reference to a scalar or reference to a typeglob can be used here.
my $response_body;
$curl->setopt(CURLOPT_WRITEDATA,\$response_body);
# Starts the actual request
my $retcode = $curl->perform;
#print "FOO HERE";
# Looking at the results...
if ($retcode == 0) {
print "Transfer went ok\n";
my $response_code = $curl->getinfo(CURLINFO_HTTP_CODE);
print "Received response: $response_body\n";
} else {
# Error code, type of error, error message
print "An error happened: $retcode ".$curl->strerror($retcode)." ".$curl->errbuf."\n";
}
}
希望这能让其他人免受我的痛苦:) (这位MailChimp支持女士还说,她会让他们的团队在开发人员的笔记中添加这方面的一些内容,所以它变得更清晰了!)
https://stackoverflow.com/questions/32976195
复制相似问题