Добавяне на езикова променлива в WWW::Mailchimp (абонамент)

Опитвам се да разбера как мога да използвам 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" е ок, но не съм сигурен какви параметри да предам към него.

Някой имал ли е опит с това преди? Освен езика, работи добре (но трябва да мога да изпращам имейлите за потвърждение на собствения им език и след това да филтрирам надолу, когато изпращам поща)

АКТУАЛИЗАЦИЯ: Добре, така че изглежда, че няма да е прост случай на актуализиране до по-новия API. Разглеждах API v3.0 и той е цялостен ремонт на по-стария (нови имена на функции, нови начини за изпращане на заявки и т.н.). Това, което ще направя, е да разгледам метода "Curl", за да можем поне да го направим с него. След като започна това, вероятно ще разгледам кодирането на нещо, което да работи с LWP::UserAgent, тъй като това би било по-чисто, отколкото да правя много curl заявки. Жалко, че вече няма нищо за Perl и MailChimp (с новия API или дори версия 2.0!)


person Andrew Newby    schedule 06.10.2015    source източник


Отговори (2)


От разглеждане на източника, по подразбиране е API 1.3:

has api_version => (
  is => 'ro',
  isa => Num,
  lazy => 1,
  default => sub { 1.3 },
);

Документацията за това показва, че трябва да използвате MC_LANGUAGE:

низ MC_LANGUAGE Задайте езиковите предпочитания на члена. Поддържаните кодове са напълно чувствителни към главни и малки букви и могат да бъдат намерени тук.

Изглежда, че модулът просто вкарва каквато и да е структура от данни, която предоставяте, в JSON и я изпраща POST в Mailchimp, така че подходящата версия на документ за API на Mailchimp за API, към който сте насочени, трябва да се посочи като основен източник.

person Oesor    schedule 06.10.2015
comment
Благодаря за отговора. Правенето на това обаче изглежда не го прави (потвърждението все още идва като английски): $mailchimp->listSubscribe( id => "75a6bfd589", email_address => $in->{Email}, merge_vars => [ FNAME => $name[0], LNAME => $name[1], MC_LANGUAGE => "fr" ] ); ... някакви идеи? - person Andrew Newby; 06.10.2015
comment
Ммм трябва да има нещо с 1.3 API. Дори FNAME и LNAME не се предават при използване на: merge_vars => [ FNAME => 'xxxx', LNAME => 'yxxx', MC_LANGUAGE => "fr" ]. Може би ще опитам отново утре, но добавете малко отстраняване на грешки във файла MailChimp.pm, за да мога да видя каква заявка всъщност се извиква (изглежда, че ще си струва да преминете към v3.0 също, като 1.3 и 2.0 все едно се амортизират :)) - person Andrew Newby; 06.10.2015
comment
Добре, така че изглежда, че е МНОГО по-сложно, отколкото се надявах! Нямам: https://us6.api.mailchimp.com/2.0/lists/subscribe.json?apikey=xxxx&id=xxxx&email[email]=xxxx&merge_vars[FNAME]=John&merge_vars[LNAME]=Doe&merge_vars[MC_LANGUAGE]=fr ... обаче все още игнорира езика :/ Ще видя дали мога да намеря конкретен форум на MailChimp, за да опитам да попитам какво става - person Andrew Newby; 07.10.2015

Добре, така че стигнах до там в крайна сметка! Говорих с поддръжката на MailChimp и те бяха много полезни. Оказа се, че това е двоен проблем.

1) Автоматичният превод трябва да бъде активиран за въпросния списък. Това беше техният отговор около това:

След като разгледахте обаждането, изглежда, че вече е настроено правилно, така че всички сте добре на този фронт. Като се има предвид това, виждам, че опцията за автоматичен превод изглежда не е активирана за нито един от вашите списъци. За да могат потвърждението и всички други имейли за отговор да се превеждат автоматично, това ще трябва да бъде активирано за всички използвани списъци.

Имаме малко допълнителна информация за това тук, ако искате да проверите това: 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('[email protected]','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 също каза, че ще накара техния екип да добави нещо за това в бележките на разработчиците, така че е малко по-ясно!)

person Andrew Newby    schedule 14.10.2015