Problem bei Ausgabe einer Tages-Ausgabe Range


(McHunter) #1

Hallo Piwiker,

Es geht um die Ausgabe einer sog. Range von Tag X bis heute oder auch von Tag X bis Tag Y

Ich habe mich an die hier:

Standard parameters

dokumentierten Parameter gehalten und breche mir mit dem “date” Parameter in rot markiert:

date
◦standard format = YYYY-MM-DD
◦magic keywords = today or yesterday. They are relative the website timezone. For example, for a website with UTC+12 timezone, “date=today” for an API request at 5PM UTC on 2010-01-01 will return the reports for 2010-01-02.
◦range of dates
■lastX for the last X periods including today (eg &date=last10&period=day would return an entry for each of the last 10 days including today). This is relative to the website timezone.
■previousX returns the last X periods before today (eg. &date=last52&period=week will return an entry for each of the 52 weeks before this week). This is relative to the website timezone.
■YYYY-MM-DD,YYYY-MM-DD for every day in the date range

inzwischen einen ab.

Die Ausgabe soll als Bsp. die Daten für folgenden Zeitraum ausgeben:

…&idSite=1&period=day&date=2009-12-09&date=today

Der 09.12.2010 ist der Tag an dem das Piwik das 1te Mal installiert wurde und seitdem Besucher-Daten aufgezeichnet wurden.

Weiß evtl. jemand wo ich in dem Parameter einen Fehler habe?

Danke und Grüße aus Hamburg

ps. Auch im Dashboard kann ich unter “Zeitspanne” keine Möglichkeit für eine Tag X bis Tag Y Range finden.


(Thomas Seifert) #2

Es gibt nur einen date Parameter. Darin musst Du einfach nur die von-bis Daten mit , trennen - wie auch die Doku sagt ;-).


(McHunter) #3

Vielen Dank für deine Antwort - nur leider funktioniert es damit nicht (bei mir).

So habe ich es u.a. getestet:

…&idSite=1&period=day&date=2009-12-09,2009-12-31


(Thomas Seifert) #4

Was kommt denn als Ergebnis? “Geht nicht” ist immer ein wenig zu wenig.

Bei mir läuft eine API-Abfrage in der Form ohne Probleme …
http :///?module=API&method=VisitsSummary.getVisits&idSite=3&period=day&date=2010-07-19,2010-08-02&format=PHP&token_auth=


(McHunter) #5

[quote=Thomas Seifert @ Aug 3 2010, 07:16 AM]Die 20 am meisten benutzten Suchwörter
( hits)
( hits)
( hits)
…[/quote]

Per Browser funktioniert es wie von dir angegeben bzw. mit meiner URL auch:

http:///piwik/index.php?module=API&method=Referers.getKeywords&idSite=1&period=day&date=2010-07-19,2010-08-02&format=PHP&filter_limit=50&token_auth==

Allerdings, das habe ich sorry allerdings vergessen zu erwähnen, nicht mit diesem Script:

<?php
// this token is used to authenticate your API request.
// You can get the token on the API page inside your Piwik interface
$token_auth = 'anonymous';
// we call the REST API and request the 100 first keywords for the last month for the idsite=1
$url = "http://demo.piwik.org/";
$url .= "?module=API&method=Referers.getKeywords";
// $url .= "&idSite=1&period=month&date=yesterday";
$url .= "&idSite=1&period=day&date=2010-07-19,2010-08-02"; // dat löppt nicht
$url .= "&format=PHP&filter_limit=20";
$url .= "&token_auth=$token_auth";
$fetched = file_get_contents($url);
$content = unserialize($fetched);
// case error
if(!$content)
{
    print("Error, content fetched = ".$fetched);
}
print("<h1>Keywords for the last month</h1>");
foreach($content as $row)
{
    $keyword = urldecode($row['label']);
    $hits = $row['nb_visits'];
    print("<b>$keyword</b> ($hits hits)<br>");
}

Quelle: dev.piwik.org/trac/wiki/API/CallingTechniques


(Thomas Seifert) #6

Dann lass Dir doch mal direkt $content ausgeben.
Sicher, dass es mit anonymous überhaupt funktioniert und Dir nicht nur Berechtigungen fehlen?
Kamen mit Deinem Skript überhaupt schon mal Daten zurück, z.B. für den Tag?


(McHunter) #7

[quote=Thomas Seifert @ Aug 3 2010, 01:17 PM]1) Dann lass Dir doch mal direkt $content ausgeben.
2) Sicher, dass es mit anonymous überhaupt funktioniert und Dir nicht nur Berechtigungen fehlen?
3) Kamen mit Deinem Skript überhaupt schon mal Daten zurück, z.B. für den Tag?[/quote]

Hallo Thomas Seifert,

vielen Dank für deine Antworten.

  1. Ok, das werde ich am Abend mal testen.

  2. Ja, &token_auth= sowohl mit anonymous als auch mit einem “auth-code”.

  3. Ja, bisher ziemlich alles - außer mit der Date-Range.

Hier einige Test-Beispiel URL-Parameterstrings:

// $url .= "&idSite=1&period=month&date=yesterday"; // dat löppt
// $url .= "&idSite=1&period=year&date=today"; // dat löppt
// $url .= "&idSite=1&period=year&date=2009-12-09&date=today"; // dat löppt
// $url .= "&idSite=1&period=day&date=2009-12-09&date=2009-12-31"; // dat löppt aber nicht richtig
// $url .= "&idSite=1&period=day&date=2009-12-09,2009-12-31"; // dat löppt nicht
// $url .= "&idSite=1&period=week&date=last3"; // dat löppt nicht
// $url .= "&idSite=1&period=week&date=last20"; // dat löppt nicht
// $url .= "&idSite=1&period=day&date=2009-12-09"; // dat löppt Ok für einen Tag
// $url .= "&idSite=1&date=last10&period=day"; // löppt nicht
// $url .= "&idSite=1&date=last52&period=week"; // löppt nicht
// $url .= "&idSite=1&period=day&date=today"; // dat löppt Ok für den akt. Tag
// $url .= "&idSite=1&period=day&date=last2"; // dat löppt nicht
$url .= "&idSite=1&period=day&date=2010-07-19,2010-08-02"; // aus dem Piwik Forum - dat löppt nicht

Genaugenommen bräuchte ich die Range wie folgt:

2009-12-09 = Tag der 1ten Piwik Installation
bis
today = jeweils akt. Tag

Danke und Grüße aus Hamburg


(Thomas Seifert) #8

Wenn ich den Zeitraum sehe, schon mal ins Error log vom Webserver geschaut, dass er hier nicht vielleicht das memory limit von PHP überschreitet und darum vielleicht einen Fehler zurückliefert?


(McHunter) #9

n´Abend Thomas Seifert

Nein, am (PHP-) Memory oder am (PHP-) Scriptausführungs Zeit Limit kann es nicht liegen, denn ansonsten würde bzw. müsste es mit deinem Beispiel URL-Parametern bzw. mit meinem bis auf die Range identischem:

$url .= "&idSite=1&period=day&date=2010-07-19,2010-08-02"; // aus dem Piwik Forum - dat löppt nicht
$url .= "&idSite=1&period=day&date=2009-12-09,2009-12-31"; // dat löppt nicht

ja einwandfrei funktionieren, was bekannterweise ja nicht der Fall ist. style_emoticons/<#EMO_DIR#>/wink.gif


(McHunter) #10

[quote=Thomas Seifert @ Aug 3 2010, 04:40 PM]Die 50 am meisten benutzten Suchwörter
( hits)
( hits)
( hits)
…[/quote]


(Thomas Seifert) #11

Bitte, was gibt ein einfaches
echo $content;
aus?
Nur dann kannst Du überhaupt sehen, was dort zurück kommt.


(McHunter) #12

[quote=Thomas Seifert @ Aug 3 2010, 07:34 PM]Die 50 am meisten benutzten Suchwörter
ArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArrayArray[/quote]


(Thomas Seifert) #13

Ok, irgend etwas kommt zurück.
Dann bitte mal ein
print_r($content);
so dass wir den realen Inhalt bekommen.


(McHunter) #14

[quote=Thomas Seifert @ Aug 3 2010, 08:01 PM) <{POST_SNAPBACK}>

Ok, irgend etwas kommt zurück.
Dann bitte mal ein
print_r($content);
so dass wir den realen Inhalt bekommen.

Danke für die Hilfe.

OK, ich habe es a ) auf 10 Suchwörter reduziert und b ]Die 10 am meisten benutzten Suchwörter

Array ( [2010-07-19] => Array ( [0] => Array ( [label] => Muster testbar [nb_uniq_visitors] => 15 [nb_visits] => 15 [nb_actions] => 49 [max_actions] => 10 [sum_visit_length] => 2901 [bounce_count] => 0 [nb_visits_converted] => 15 [goals] => Array ( [idgoal=4] => Array ( [nb_conversions] => 24 [revenue] => 96 ) [idgoal=2] => Array ( [nb_conversions] => 2 [revenue] => 0 ) [idgoal=3] => Array ( [nb_conversions] => 1 [revenue] => 0 ) ) [nb_conversions] => 27 [revenue] => 96 [idsubdatatable] => 9 ) [1] => Array ( [label] => Muster testbar hamburg [nb_uniq_visitors] => 11 [nb_visits] => 11 [nb_actions] => 36 [max_actions] => 7 [sum_visit_length] => 1646 [bounce_count] => 0 [nb_visits_converted] => 11 [goals] => Array ( [idgoal=4] => Array ( [nb_conversions] => 17 [revenue] => 68 ) [idgoal=2] => Array ( [nb_conversions] => 2 [revenue] => 0 ) ) [nb_conversions] => 19 [revenue] => 68 [idsubdatatable] => 11 ) [2] => Array ( [label] => Mustermilchbar [nb_uniq_visitors] => 2 [nb_visits] => 2 [nb_actions] => 4 [max_actions] => 2 [sum_visit_length] => 12 [bounce_count] => 0 [nb_visits_converted] => 2 [goals] => Array ( [idgoal=4] => Array ( [nb_conversions] => 1 [revenue] => 4 ) ) [nb_conversions] => 1 [revenue] => 4 [idsubdatatable] => 10 ) [3] => Array ( [label] => milchbar hamburg [nb_uniq_visitors] => 1 [nb_visits] => 1 [nb_actions] => 1 [max_actions] => 1 [sum_visit_length] => 0 [bounce_count] => 1 [nb_visits_converted] => 0 [idsubdatatable] => 14 ) [4] => Array ( [label] => hamburg restaurant veranstaltungsraum [nb_uniq_visitors] => 1 [nb_visits] => 1 [nb_actions] => 1 [max_actions] => 1 [sum_visit_length] => 0 [bounce_count] => 1 [nb_visits_converted] => 0 [idsubdatatable] => 12 ) [5] => Array ( [label] => typisches Muster getränk [nb_uniq_visitors] => 1 [nb_visits] => 1 [nb_actions] => 7 [max_actions] => 7 [sum_visit_length] => 184 [bounce_count] => 0 [nb_visits_converted] => 1 [goals] => Array ( [idgoal=4] => Array ( [nb_conversions] => 1 [revenue] => 4 ) ) [nb_conversions] => 1 [revenue] => 4 [idsubdatatable] => 13 ) [6] => Array ( [label] => Muster-test.de [goals]
…[/quote]

Einige von Piwik dokumentierten URL-Parameter funktionieren eigenartigerweise scheinbar nicht mit PHP!

Siehe als Bsp hier:

// $url .= “&idSite=1&period=day&date=last20”; // dat löppt nicht
// $url .= “&idSite=1&period=week&date=last3”; // dat löppt nicht
// $url .= “&idSite=1&period=day&date=today”; // dat löppt


(Thomas Seifert) #15

Sind doch alle Daten da. Dein oben verwendetes Skript geht halt nur von einem Tag aus - Du müsstest einfach noch einen zweiten Loop drumherum bauen, etwas in der Art:

foreach($content as $date => $day) {
Keywords for $date<br />
foreach($day as $row)
{
    $keyword = urldecode($row['label']);
    $hits = $row['nb_visits'];
    print("<b>$keyword</b> ($hits hits)<br>");
}
}

Wenn Du Tageswerte anforders (period=day) dann bekommst Du auch für jeden Tag einen Wert.
Aufsummieren müsstest Du selbst im PHP-Code.


(McHunter) #16

[quote=Thomas Seifert @ Aug 4 2010, 06:31 AM]Wenn Du Tageswerte anforders (period=day) dann bekommst Du auch für jeden Tag einen Wert.
Aufsummieren müsstest Du selbst im PHP-Code.[/quote]

Vielen Dank für die Antwort nebst Lösungsvorschlag.

Ja, dass obenstehende von Dir hatte ich nicht bedacht. Deswg. funktionieren auch keine Ausgaben mit z.B.:

date=last20 oder week=last4 oder date=2010-07-01,2010-07-31

Ich werde in Kürze deinen Löscungvorschlag mal anpassen und testen.


(McHunter) #17

[quote=Thomas Seifert @ Aug 4 2010, 06:31 AM]Sind doch alle Daten da. Dein oben verwendetes Skript geht halt nur von einem Tag aus - Du müsstest einfach noch einen zweiten Loop drumherum bauen, etwas in der Art:

foreach($content as $date => $day) {
Keywords for $date<br />
foreach($day as $row)
{
    $keyword = urldecode($row['label']);
    $hits = $row['nb_visits'];
    print("<b>$keyword</b> ($hits hits)<br>");
}
}

Wenn Du Tageswerte anforders (period=day) dann bekommst Du auch für jeden Tag einen Wert.
Aufsummieren müsstest Du selbst im PHP-Code.[/quote]

Hallo Thomas Seifert,

ich habe anhand deines Vorschlags inzwischen etliche Tests durchgeführt. Ergebnis:

Nun werden die Keywords zwar je Datum untereinander ausgegeben, aber eine Aufsummierung habe ich nicht hinbekommen. Da sind wohl meine PHP Kenntnisse zu schwach.