Autor Zpráva
maks
Profil
Ahoj,

zkouším implementovat GAPI na web, podle příkladů a ukázkových souborů jsem vše rozběhal (propojení s účtem GA, vybrání nějakých dat)...

Problém nastává, pokud si chci na web udělat komplexnější statistiky, kdy chci pracovat s více na sobě nezávislými veličinami, což je věc, na které jsem se zasekl (jde mi o výkon).

<?php

session_start();

define('GA_EMAIL','mail@mail.cz');
define('GA_PASSWORD','1234heslo');
define('GA_PROFILE_ID','12345678'); // $_SESSION['client']['ga_id']);

require 'gapi.class.php';

$ga = new gapi(GA_EMAIL, GA_PASSWORD, isset($_SESSION['ga_auth_token']) ? $_SESSION['ga_auth_token'] : NULL);
$_SESSION['ga_auth_token'] = $ga->getAuthToken();

// navstevnost podle prohlizece
$ga->requestReportData(GA_PROFILE_ID, array('browser'), array('visits'));

?>

<div id="chart_div"></div>

<script type="text/javascript" src="https://www.google.com/jsapi"></script>
<script type="text/javascript">
    google.load("visualization", "1", {packages:["corechart"]});
    google.setOnLoadCallback(drawChart);

    function drawChart() {
        var data = google.visualization.arrayToDataTable([
<?php
        foreach ($ga->getResults() as $result) {
            // nasypani dat z GA do JS, ze kterych se nasledne vytvori graf
        }
?>

        var options [
            // nastaveni grafu
        ];
        var chart = new google.visualization.AreaChart(document.getElementById('chart_div'));
        chart.draw(data, options);
</script>

Přiložený kód funguje, jak má, vykreslí se krásný graf podle dat ze statistik.

Teď ale potřebuji přidat další graf, a sice návštěvnost v čase (za poslední týden, za poslední měsíc, s volitelným začátkem a koncem intervalu). Grafů bude dohromady (s různými metrikami) kolem 30-40.

Dotaz tedy zní: Jak zpracovávat více různých a nesouvisejících dat pomocí GAPI? Musím pokaždé volat $ga->requestReportData, nebo to jde nějak úsporněji, než tuto metodu volat 40krát?

Zároveň se mi pokaždé přepisuje proměnná $ga, resp. její metoda getResults, takže ve výslekdu to vypadá tak, že mám:
<?php
$ga->requestReportData(GA_PROFILE_ID, array('browser'), array('visits'));
?>
<div id="chart_div1"></div>

<script type="text/javascript">
    // ...
</script>

<?php
$ga->requestReportData(GA_PROFILE_ID, array('..'), array('..'));
?>

<div id="chart_div2"></div>

<script type="text/javascript">
    // ...
</script>

<?php
$ga->requestReportData(GA_PROFILE_ID, array('..'), array('..'));
?>

<div id="chart_div3"></div>

<script type="text/javascript">
    // ...
</script>

Což je nesmysl.

Jak s tímto nástrojem pracovat efektivněji?
Alphard
Profil
S GAPI bohužel zkušenosti nemám, takže odpovím víc obecně.
Vytáhnout data pro desítky grafů z cizí služby bude asi pomalé vždy (pokud to neseskupíte do jednoho požadavku). Možná by ale nebyl problém cachovat aspoň některé výsledky (aktualizaci případně řešit cronem).
Jestli se vám přepisuje instance a potřebujete si zachovat předchozí stav, zálohujte ho pomocí $t =clone $ga;.
maks
Profil
Alphard:
teď jsem si všiml, že částečně ty dotazy půjdou spojit (vybrat více metrik závislých na čase a pak na základě tohoto jednoho dotazu vytvořit více grafů). Zkoušel jsem to prvně tak, že jsem tam nasekal všechny metriky dohromady, ale tak to nejde. Musí mít nějakého společného jmenovatele, aby se daly vzájemně křížit (nelze vztahovat např. návštěvy na datum a zároveň prohlížeč - ale lze sledovat návštěvy, čas na stránce a procento nových/vracejících se návštěvníků proti datu).

Tím redukujeme počet dotazů na cca 7, přičemž další, pokud bude "sledovač" statistik chtít (zobrazení ve vlastním intervalu), na načtení si chvíli počká.

To už bude asi rozumné, ale pokud by někoho napadlo nějaké jiné řešení, budu za něj samozřejmě vděčný.


Vzhledem k tomu, že takto potřebuji sledovat desítky stránek (každou zvlášť) a na statistiky se budou chodit dívat jen vyvolení znající heslo cca jednou za týden, asi to nebudu řešit cronem, ale při první návštěvě se dvě vteřinky počkají, stránka se uloží do cache (pokud by se na ní vrátili) a bude to :-)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: