Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.
Seiten: 1
#1 10. Dezember 2010 15:21
- jeff1980
- Server-Pate
- Ort: Dortmund
- Registriert: 26. November 2010
- Beiträge: 630
UDT mit anderer Datenbankverbindung
Hi,
um dieses Forum auch mal zu starten, habe ich mir ein Thema ausgesucht, dass sicher einfach zu lösen ist (wenn man weiß wie).
Auf unserer großen Gedichteseite habe ich vor, eine Tagcloud mit den häufigsten Suchbegriffen einzugeben. Da ich nicht die CMSms-interne Suche nutze, sondern eine Google-Adsense-Suche, kann ich mir die Begriffe dort schon mal nicht herholen.
Mein Gedanke war jetzt der, dass ich einfach unsere Statistik (Piwik) dazu "missbrauche", die nämlich ebenfalls diese Begriffe zur Verfügung stellt.
Dazu habe ich im Piwik-Forum folgenden Code gefunden (ist schon etwas von mir abgewandelt):
[== PHP ==]
mysql_connect("server", "user", "password")
or die("Keine Verbindung möglich: " . mysql_error());
mysql_select_db("database");
mysql_query("SET NAMES 'utf8'");
$datum = date("Y-m-d");
//--- Bezeichnungen passend zu PIWIK 1.0 ---
$sqlstring="SELECT begriff, COUNT(begriff) AS anzahl
FROM(
SELECT referer_keyword AS begriff,
visit_server_date AS datum
FROM piwik_log_visit
WHERE visit_server_date>='$datum'
AND referer_keyword<>''
)
AS temp
GROUP BY begriff ORDER BY anzahl DESC limit 15
";
$result = mysql_query($sqlstring);
$anzahl_results = mysql_num_rows($result);
//--- häufigstes Vorkommen ermitteln ---
$maxanzahl=0;
$minanzahl=1E9;
for($i=1;$i<=$anzahl_results;$i++){
$row = mysql_fetch_array($result, MYSQL_NUM);
if ($row[1] >$maxanzahl) $maxanzahl=$row[1];
if ($row[1] <$minanzahl) $minanzahl=$row[1];
$cloudtag_begriff[$i]=$row[0];
$cloudtag_anzahl[$i]=$row[1];
//--- lange Texte kürzen ---
if (strlen($cloudtag_begriff[$i]) >= 30) {
$text = substr($cloudtag_begriff[$i], 0, 30);
$pos = strripos($cloudtag_begriff[$i], ' ');
$cloudtag_begriff[$i] = substr($cloudtag_begriff[$i], 0, $pos);
}
}
//--- Ermittlung der Häufigkeitsgrenzen ---
$anzahlstufen=4; // Anzahl der verschiedenen Schriftgrößen
for ($i=1;$i<=$anzahlstufen;$i++){
$stufe[$i] =floor($minanzahl+ ($maxanzahl-$minanzahl)/$anzahlstufen*$i);
}
for($i=1;$i<=$anzahl_results;$i++){
$anzahl= $cloudtag_anzahl[$i];
if ($anzahl==$stufe[4]) $groesse=6;
elseif($anzahl>=$stufe[3]) $groesse=5;
elseif($anzahl>=$stufe[2]) $groesse=4;
else $groesse=3;
//--- weitere, zufällige Stil-Einstellungen ---
//--- Schriftfarbe
$farbe[1]="222";
$farbe[2]="444";
$farbe[3]="666";
$farbe[4]="888";
$farbcode=rand(1,4);
//--- Schriftdicke und Neigung ---
$stil[1]="font-weight:normal; font-style:normal;";
$stil[2]="font-weight:bold; font-style:normal;";
$stil[3]="font-weight:bold; font-style:italic;";
$stil[4]="font-weight:normal; font-style:italic;";
$stilcode=rand(1,4);
//--- link-String ---
$googlestring=implode("+",explode(" ",$cloudtag_begriff[$i]))."";
//--- CLOUD-Eintrag ---
echo " <a href=\"http://www.festtagsgedichte.de/suchergebnis.htm?domains=www.festtagsgedichte.de&q=".$googlestring."&sa.x=0&sa.y=0&sitesearch=&sitesearch=www.festtagsgedichte.de&client=pub-0526960723957524&forid=1&ie=UTF-8&oe=UTF-8&cof=GALT%3A%23008000%3BGL%3A1%3BDIV%3A%234a6404%3BVLC%3A663399%3BAH%3Acenter%3BBGC%3Af6f6f6%3BLBGC%3A222222%3BALC%3A4a6404%3BLC%3A4a6404%3BT%3A000000%3BGFNT%3A4a6404%3BGIMP%3A4a6404%3BFORID%3A11&hl=de\" style=\"font-size:".($groesse*3)."px; ".$stil[$stilcode]." color:#".$farbe[$farbcode]."\">".$cloudtag_begriff[$i]."</a> ";
}
Da die Statistik in einer anderen Datenbank liegt, stelle ich zu Beginn die Verbindung her. Und es funktioniert auch:
http://www.festtagsgedichte.de/tagcloud.htm
Wie man aber schon sehen kann, wird z.B. der Footer nicht mehr angezeigt. Setze ich die Tagcloud in die rechte Spalte, werden gar keine GCBs und kein Inhalt mehr angezeigt. Liegt das daran, dass ich einfach die Datenbankverbindung ändere? Wenn ja, wie kann ich dieses Problem lösen?
Oder gibt es vielleicht noch einen anderen Weg zu einer Tagcloud?
Danke....
Jan
Beitrag geändert von jeff1980 (10. Dezember 2010 15:26)
Offline
#2 10. Dezember 2010 15:55
- Andynium
- Moderator
- Ort: Dohna / SN / Deutschland
- Registriert: 13. September 2010
- Beiträge: 7.017
- Webseite
Re: UDT mit anderer Datenbankverbindung
Hmm, gibts da keine Möglichkeit, diese Informationen über die Piwik-API abzurufen, anstatt nativ auf die Datenbank zu gehen ... ?
Btw, für ADOdb gibts hier ein schönes Tutorial
Offline
#3 10. Dezember 2010 16:25
- jeff1980
- Server-Pate
- Ort: Dortmund
- Registriert: 26. November 2010
- Beiträge: 630
Re: UDT mit anderer Datenbankverbindung
Schon:
// this token is used to authenticate your API request.
// You can get the token on the API page inside your Piwik interface
$token_auth = 'geheimer_token';
// we call the REST API and request the 100 first keywords for the last month for the idsite=1
$url = "[url]http://www.festtagsgedichte.de/piwik/[/url]";
$url .= "?module=API&method=Referers.getKeywords";
$url .= "&idSite=1&period=month&date=yesterday";
$url .= "&format=PHP&filter_limit=15";
$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>");
}
Das Ergebnis habe ich auch mal auf o.g. Seite gelassen.
Aber wie bekomme ich daraus eine Tag Cloud? Ich habe schon geschaut, ob ich ein Script finde, welches mir da weiterhelfen kann - aber bisher leider nichts gefunden. Die Ausgabe kann ich ja noch steuern (Liste o.ä.). Habe da aber keinen "Konverter" gefunden, obwohl es sowas sicher gibt...
Und die Leuchte in PHP & Co. bin ich leider auch nicht.
Ich kann mir zwar prinzipiell vorstellen, dass ich "nur" beide Code-Schnippsel verbinden müsste - aber ich bekomme die Vorstellung nicht in Code umgesetzt...
Offline
#4 11. Dezember 2010 14:48
- piratos
- Gast
Re: UDT mit anderer Datenbankverbindung
Liegt das daran, dass ich einfach die Datenbankverbindung ändere?
Manual:
Für den Fall, dass ein zweiter Aufruf von mysql_connect() mit den gleichen Argumenten erfolgt, wird keine neue Verbindung aufgebaut, sondern die Verbindungs-Kennung der schon bestehenden Verbindung zurückgeliefert.
Aufruf und Abhilfe:
mysql_connect("server", "user", "password",true)
or die("Keine Verbindung möglich: " . mysql_error());
#5 11. Dezember 2010 15:51
- jeff1980
- Server-Pate
- Ort: Dortmund
- Registriert: 26. November 2010
- Beiträge: 630
Re: UDT mit anderer Datenbankverbindung
mysql_connect("server", "user", "password",true)
Jo, das funktioniert. Und für die Zukunft werde ich mir das auch notieren (nicht immer gibt es ja einen API-Zugriff).
Aber ich habe mich jetzt auch hingesetzt und mich mit der API von Piwik auseinander gesetzt und dabei mit meinem bescheidenen PHP-Halbwissen und Google folgenden Code herausbekommen:
// this token is used to authenticate your API request.
// You can get the token on the API page inside your Piwik interface
$token_auth = 'geheimer_token';
// we call the REST API and request the 100 first keywords for the last month for the idsite=1
$url = "http://www.festtagsgedichte.de/piwik/";
$url .= "?module=API&method=Referers.getKeywords";
$url .= "&idSite=1&period=day&date=today";
$url .= "&format=PHP&filter_limit=15";
$url .= "&token_auth=$token_auth";
$fetched = file_get_contents($url);
$content = unserialize($fetched);
// case error
if(!$content)
{
echo "Error, content fetched = ".$fetched;
}
shuffle($content);
foreach($content as $row)
{
$keyword = urldecode($row["label"]);
$hits = $row["nb_visits"]*4;
$googlestring=implode("+",explode(" ",$keyword))."";
if (($hits>17) && ($hits<50)) {
echo " <a href=\"http://www.festtagsgedichte.de/suchergebnis.htm?domains=www.festtagsgedichte.de&q=".$googlestring."&sa.x=0&sa.y=0&sitesearch=&sitesearch=www.festtagsgedichte.de&client=pub-0526960723957524&forid=1&ie=UTF-8&oe=UTF-8&cof=GALT%3A%23008000%3BGL%3A1%3BDIV%3A%234a6404%3BVLC%3A663399%3BAH%3Acenter%3BBGC%3Af6f6f6%3BLBGC%3A222222%3BALC%3A4a6404%3BLC%3A4a6404%3BT%3A000000%3BGFNT%3A4a6404%3BGIMP%3A4a6404%3BFORID%3A11&hl=de\" title=\"Suchbegriff anzeigen\"><span class=\"tagcloud_m\">$keyword</span></a> ";
} elseif (($hits>=50) && ($hits<100)) {
echo " <a href=\"http://www.festtagsgedichte.de/suchergebnis.htm?domains=www.festtagsgedichte.de&q=".$googlestring."&sa.x=0&sa.y=0&sitesearch=&sitesearch=www.festtagsgedichte.de&client=pub-0526960723957524&forid=1&ie=UTF-8&oe=UTF-8&cof=GALT%3A%23008000%3BGL%3A1%3BDIV%3A%234a6404%3BVLC%3A663399%3BAH%3Acenter%3BBGC%3Af6f6f6%3BLBGC%3A222222%3BALC%3A4a6404%3BLC%3A4a6404%3BT%3A000000%3BGFNT%3A4a6404%3BGIMP%3A4a6404%3BFORID%3A11&hl=de\" title=\"Suchbegriff anzeigen\"><span class=\"tagcloud_l\">$keyword</span></a> ";
} elseif ($hits>=100) {
echo " <a href=\"http://www.festtagsgedichte.de/suchergebnis.htm?domains=www.festtagsgedichte.de&q=".$googlestring."&sa.x=0&sa.y=0&sitesearch=&sitesearch=www.festtagsgedichte.de&client=pub-0526960723957524&forid=1&ie=UTF-8&oe=UTF-8&cof=GALT%3A%23008000%3BGL%3A1%3BDIV%3A%234a6404%3BVLC%3A663399%3BAH%3Acenter%3BBGC%3Af6f6f6%3BLBGC%3A222222%3BALC%3A4a6404%3BLC%3A4a6404%3BT%3A000000%3BGFNT%3A4a6404%3BGIMP%3A4a6404%3BFORID%3A11&hl=de\" title=\"Suchbegriff anzeigen\"><span class=\"tagcloud_xl\">$keyword</span></a> ";
} else {
echo " <a href=\"http://www.festtagsgedichte.de/suchergebnis.htm?domains=www.festtagsgedichte.de&q=".$googlestring."&sa.x=0&sa.y=0&sitesearch=&sitesearch=www.festtagsgedichte.de&client=pub-0526960723957524&forid=1&ie=UTF-8&oe=UTF-8&cof=GALT%3A%23008000%3BGL%3A1%3BDIV%3A%234a6404%3BVLC%3A663399%3BAH%3Acenter%3BBGC%3Af6f6f6%3BLBGC%3A222222%3BALC%3A4a6404%3BLC%3A4a6404%3BT%3A000000%3BGFNT%3A4a6404%3BGIMP%3A4a6404%3BFORID%3A11&hl=de\" title=\"Suchbegriff anzeigen\"><span class=\"tagcloud_s\">$keyword</span></a> ";
}
}
Die Google-Links sind ein bisschen wild, aber so bleiben die Besucher direkt auf unserer Seite.
Das Einzige, was mich jetzt noch ein wenig stört, sind "malformed uri references", da der googlestring Umlaute und Sonderzeichen beinhaltet. Habe schon gesucht, ob es einen Weg gibt, das mit PHP zu konvertieren, aber da kommt nix dolles bei raus.
Probiert habe ich u.a. "htmlentities($str)" und "htmlentities($str, ENT_QUOTES)" aber auch "htmlspecialchars". Meistens wird es dadurch noch schlimmer (es wird "tilde" eingefügt u.ä.).
Aber prinzipiell funktioniert es so schon sehr gut und gefühlt auch schneller als mit direktem Datenbankzugriff (ganz besonders, wenn ich den abgefragten Zeitraum auf einen Monat setze...).
Offline
#6 11. Dezember 2010 16:43
- piratos
- Gast
Re: UDT mit anderer Datenbankverbindung
Die Googleanteile sind urlencoded, deswegen sehen die so seltsam aus:
http://www.php.net/manual/de/function.urldecode.php
Das
GALT%3A%23008000%3BGL%3A1%3BDIV%3A%234a6404%3BVLC%3A663399%3BAH%3Acenter%3BBGC%3Af6f6f6%3BLBGC%3A222222%3BALC%3A4a6404%3BLC%3A4a6404%3BT%3A000000%3BGFNT%3A4a6404%3BGIMP%3A4a6404%3BFORID%3A11&hl=de
sieht danach so aus:
GALT:#008000;GL:1;DIV:#4a6404;VLC:663399;AH:center;BGC:f6f6f6;LBGC:222222;ALC:4a6404;LC:4a6404;T:000000;GFNT:4a6404;GIMP:4a6404;FORID:11&hl=de
Beitrag geändert von piratos (11. Dezember 2010 16:48)
#7 11. Dezember 2010 16:47
- piratos
- Gast
Re: UDT mit anderer Datenbankverbindung
Wenn man mit Mysql arbeitet kann man die Auswertung nach hits, ja sogar die Zuordnung des Links gleich Mysql überlassen.
Seiten: 1