SmartEmailing data v Numerics
Reading Time: 4 minutesV článku kapesní BI jsem psal o mém snažení dostat data ze SmartEmailingu do mobilní dashboard aplikace. Do databoxu se mi je dostat nepodařilo, ale podařilo se mi dostat je do skvělé appky Numerics, která je dost obdobná. Jak se to povedlo i takovému lepiči kódu, jako jsem já?
Napřed proč
Když jsem se zabýval myšlenkou, jaká čísla v dashboardu sledovat, uvědomil jsem si, že většinu těch nejdůležitějších čísel můžu evidovat jako počet emailů v nějakém seznamu. Mohou to být dodané leady, vlastní zákazníci, zájemci o zatím nespuštěný produkt (jako můj bankonaut), aktivní uživatelé (třeba aktivní affiláci), zkrátka lidé, kteří splnili libovolně definovanou akci.
Cílem marketéra je oslovit a vzbudit zájem u kolemjdoucího (reklama), udělat z něj zájemce (lead), ze zájemce zákazníka (sale), ze zákazníka věrného zákazníka a z věrného zákazníka doporučujícího zákazníka. Všechny fáze obchodu mohou mít vlastní seznam emailů ve SmartEmailingu, takže čísla z něj vytažená mohou zobrazovat celý byznys.
A teď jak
SmartEmailing nabízí vzorové příklady napojení na jejich API ke stažení. Ty si určitě stáhněte.
Vzorové příklady v PHP pro verzi 2.0 ke stažení ZDE
Jde o několik složek pojmenovaných podle typu informace, kterou si chcete vytáhnout. V každé složce je pak malý odstavec, který definuje ten typ dat.
Mimo složky je pak soubor Base.php, kam zadáváte svůj API klíč a uživatelské jméno (email), vázané ke SmartEmailingu. API klíč najdete v administraci v sekci můj účet / obecné nastavení / API klíč.
Když do toho nahlédnete, uvidíte xml výstup.
Teď to na chvíli nechte být a pojďte prozkoumat Numerics. Ten má jedinou možnost, jak zobrazit vlastní data – přes json widget. Jakmile si ho přidáte, bude po vás chtít adresu .json souboru, název a pár dalších jednoduchých nastavení jako barva a jestli chcete číslo vidět i na today obrazovce. Potřebujeme tedy naše XML dostat do JSON.
U numerics si taky stáhněte příklady. Leží volně dostupné tady na Dropboxu. Ukazují opět v jednotlivých složkách, jak má ten JSON vypadat podle toho, jestli chcete vidět jen číslo, koláčový graf, nebo rovnou funnel a další typy. Já testoval zatím jen číslo a koláčový graf.
XML > PHP > JSON
Vyrobte si někde na vaší doméně složku třeba /cinkatko a v ní 3 soubory. Jeden se bude jmenovat emaily.php, druhý emaily-celkem.json a třetí emaily-seznam.json. Ty soubory s koncovkou .json budou představovat dva příklady, které můžete vložit do widgetů v appce Numerics jako zdroj dat. Soubor emaily-celkem.json bude zobrazovat celkový počet emailů, které máte a druhý soubor emaily-seznam.json bude zobrazovat počet emailů z konkrétního seznamu, který vás zajímá.
A teď čím ty 3 soubory naplníme?
Naplníme kódem jen jediný soubor emaily.php. Protože ten bude sám plnit ty zbývající dva .json soubory.
Takže emaily.php je takový kombo kód, kde jsem zbastlil dohromady prapůvodní base soubor z příkladů SmartEmailingu a příklady z podsložek. Stáhli jste si je jen z důvodu, abyste si tenhle soubor mohli obohatit o další z příkladů, pokud byste chtěli zobrazit něco jiného.
Teď se normálně bojím sem ten kód dát, protože se stydím postavit před programátory, kteří mu rozumí. Jako omluvu berte v potaz, že jsem jen copy paste lepič vygooglených řešení. Vím, že se to dá udělat určitě elegantněji, vím, že určitě jde převést xml na json přímo a ne s mezičástí, kde jsem chtěl data zkušebně zobrazit a taky vím, že je tam určitě nějaký pozůstatek zbytečně, ale vůbec – nechte mě bejt, funguje to a plní účel 😀
[sourcecode language=“plain“]
<?php
$token = ’00‘;
$username = ‚michal@majgot.cz‘;
function v($result) {
echo $result;
die();
}
function sendRequest($xml,$widget) {
$ch = curl_init(‚https://app.smartemailing.cz/api/v2‘);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
$result = curl_exec($ch);
if ($result === false) {
echo „Chyba v zasilani XML requestu!“;
}
else {
$xml_doc = @simplexml_load_string($result);
if (!$xml_doc) {
echo „ERR in request“ . PHP_EOL;
v($result);
}
if ($xml_doc->status == ‚SUCCESS‘) {
$sum = 0;
$cislo=0;
if ($widget==1) { // první widget
foreach($xml_doc->data->item as $data){
$cislo++;
//echo
$cislo.“. email: „.htmlspecialchars($data->emailaddress).“
“ . PHP_EOL;
}
$sum = $cislo;
$pocetemailu = array(„postfix“ => „emailů“, data => array(value => $sum));
echo json_encode($pocetemailu), „\n“;
$fp = fopen(‚emaily-seznam.json‘, ‚w‘);
fwrite($fp, json_encode($pocetemailu));
fclose($fp);
} elseif ($widget==2) { // druhý widget
foreach($xml_doc->data->item as $data){
$cislo++;
//echo
$cislo.“. email: „.htmlspecialchars($data->emailaddress).“
“ . PHP_EOL;
}
$sum = $cislo;
$pocetemailu = array(„postfix“ => „emailů“, data => array(value => $sum));
echo json_encode($pocetemailu), „\n“;
$fp = fopen(‚emaily-celkem.json‘, ‚w‘);
fwrite($fp, json_encode($pocetemailu));
fclose($fp);
} else {
// další případné widgety
}
}
else {
echo $xml_doc->errormessage . PHP_EOL;
}
}
}
$xml1 = ‚
<xmlrequest>
<username>‘.$username.'</username>
<usertoken>‘.$token.'</usertoken>
<requesttype>ContactLists</requesttype>
<requestmethod>getContacts</requestmethod>
<details>
<id>22</id>
</details>
</xmlrequest>
‚;
$widget = 1;
$xml = $xml1;
sendRequest($xml,$widget);
$xml2 = ‚
<xmlrequest>
<username>‘.$username.'</username>
<usertoken>‘.$token.'</usertoken>
<requesttype>Contacts</requesttype>
<requestmethod>getAll</requestmethod>
<details>
</details>
</xmlrequest>
‚;
$widget = 2;
$xml = $xml2;
sendRequest($xml,$widget);
?>
[/sourcecode]
Co si upravíte:
- Na řádku 2 vložítu svůj TOKEN z administrace SmartEmailingu
- Na řádku 3 vložítu svůj email, kterým se přihlašujete do SmartEmailingu
- Na řádku 93 napíšete namísto čísla 22 své vlastní ID seznamu emailů
Teď už zbývají jen 2 věci. Vložit adresy vedoucí k vašim json souborům do widgetů Numerics a do prohlížeče zadat adresu vašeho souboru emaily.php a zmáčknout enter.
Jak vám asi teď došlo, json soubory budou aktuální jen ve chvíli, kdy někdo aktualizuje v prohlížeči stránku s emaily.php a protože to se vám nechce dělat, zapneme na to cron.
Nevím, jak se to dělá u jiných hostingů, ale na Wedosu jsem to měl na pár kliknutí v administraci podle tohoto návodu. Minimální frekvence je jednou za hodinu, snad vám to stačí.
Wedos nabízí jen pár běžíčích cronů zároveň, proto mám všechny widgety v jednom php souboru, který aktualizuje všechny widgety najednou. Jinak bych to měl pro pořádek oddělené.
Pokud byste chtěli jiný widget, než jen číslo, třeba koláčový graf, musíte nastudovat z příkladů, jak má json vypadat a podle toho ho zapsat.
Koláčový graf by měl třeba místo řádku 44 něco jako tohle:
[sourcecode]
$pocetemailu = array(„data“ => [array(name => $nadpis1, value => $sum1), array(name => $nadpis2, value => $sum2)]);
[/sourcecode]
Nadpisy a hodnoty se nad tím ještě musí nějak definovat.
Pokud by hodnota $sum1 byla třeba 100 emailů a $sum2 400 emailů, pak by výsledkem byl koláč se dvěma barvama, kde by $nadpis1 zabíral pětinu.
Michal Kolář
Super, funguje ;) Díky