Für TagCloud Darstellung eine vorhandene Statistik auswerten

Alles, was PHP betrifft, kann hier besprochen werden.

Für TagCloud Darstellung eine vorhandene Statistik auswerten

Postby mori08 » 01. April 2008 16:03

Ich möchte meine Webstatistik auswerten um Suchbegriffe später in ein sogen. TagCloud (Schlagwortwolke)
darstellen zu können. Suchbegriffe die öfters verwendet wurden sind fetter und andere werden weniger fett dargestellt.

http://de.wikipedia.org/wiki/TagCloud

Ich habe eine PHP Datei (z.B. stat.php) in der folgende Auflistung des Statistikskriptes vorhanden ist:
Code: Select all

$suchwoerter = array (
                                 "Grafik" => "659" ,
                                 "Zeichnungen" => "129" ,
                                 "Bilder" =>  "35" ,
                                 ...,
                                 
                      );


In dieser Datei sind u.a. im Array Zeile für Zeile die Suchbegriffe und die Häufigkeit der Suchanfragen vom
Statistikskript eingetragen. Unter dem Begriff Grafik ist z.B. 659 mal eine Anfrage eingegangen.


Jetzt zum Testen würde es mir erst einmal reichen wenn ich die Daten über eine Schleife ausgeben kann.
Später möchte ich diese Daten natürlich für das TagCloud Script verwenden.

Ich habe zur Zeit keine Idee wie ich dieses Array ausgeben kann, irgendwie müßte ich dem Suchwort und der
Zahl eine eigene Variable vergeben, damit ich sie später weiter verwenden kann. Außerdem endet die Zeile ja auch
immer mit einem Komma was die neuen Bereiche trennt, muß ich da mir Implode arbeiten?

Hoffe mir kann jemand einen Tip oder Hilfe geben, wie ich da vorgehen kann.

mo :?:
mori08
 
Posts: 13
Joined: 12. March 2008 21:11

Postby Wiedmann » 01. April 2008 16:42

Ich habe zur Zeit keine Idee wie ich dieses Array ausgeben kann,

http://de.php.net/manual/en/control-str ... oreach.php
Wiedmann
AF Moderator
 
Posts: 17106
Joined: 01. February 2004 12:38
Location: Stuttgart / Germany

Postby mori08 » 01. April 2008 17:58

Danke, irgendwie stand ich aufm Schlauch, die Ausgabe funktioniert
jetzt auch.


Durch:
Code: Select all

 include ( "stat.php");

foreach ($suchwoerter as $bezeichnung => $zaehler)

{
  echo $bezeichnung." => ".$zaehler."<br>";


}


Soweit so gut, jetzt muß ich mir noch überlegen, wie ich die Daten sichere (an Datenbank übergebe) und später weiterverarbeite.
Zur Übergabe an die Datenbank muß ich doch auch wieder mit foreach
arbeiten, oder?


mo
mori08
 
Posts: 13
Joined: 12. March 2008 21:11

Postby Xardas der Dunkle » 01. April 2008 20:16

Es kommt drauf an was du vorhast ...

Es gibt einige Funktionen zum Umgang mit Arrays ... http://de3.php.net/manual/en/ref.array.php

Wenn du das Array als ganzes in einen Eintrag in die DB packen willst, ist serialize das Schlagwort.
Willst du, aber das jedes Schlagwort ein eigener Eintrag ist (was bei der Suchwortwolke wohl das sinnfolste ist) musst du natürlich mit foreach arbeiten.

Zudem wieso deklarierst du Zahlenangaben als String? x_X.
Code: Select all
$suchwoerter = Array(
     'Grafik' => 659,
     'Zeichnungen' => 129,
     'Bilder' => 35,
);


Btw. sind als debug-Funktion print_r und var_dump ganz nützlich :).

mfG
User avatar
Xardas der Dunkle
 
Posts: 482
Joined: 09. March 2008 19:40
Location: /var/www

Postby mori08 » 01. April 2008 22:21

Hei,

na ich habe die inzwischen ausgelesenen Suchbegriffe in eine MySql Tabelle geschrieben.

Code: Select all

foreach ($suchwoerter as $bezeichnung => $zaehler)
           mysql_unbuffered_query('INSERT INTO tags (bezeichnung,zaehler) VALUES (\''.$bezeichnung.'\',\''.$zaehler.'\')');



Dabei habe ich etwas Probleme gehabt, weil ich nicht wußte wie
ich die foreach Schleife mit insert into kombiniere.

Zum Schluß hat es dann hin gehauen. Komischer weise gab es eine Fehlermeldung
aber trotzdem wurden alle Daten sauber in die DB geschrieben.

---------------------------
Fehlermeldung:
Der My-SQL-Server liefert folgende Fehlermeldung: Query was empty
---------------------------

Hat dann zwar geklappt aber warum die Meldung kam war mir dann
schon spanisch vor.

Wie auch immer, soweit bin ich schon einmal gekommen (grins), Daten gesichert.

Jetzt muß ich nur noch ne Idee haben, wie ich das TagCloud Script
baue. Ne Idee ob es dazu ein vernünftiges Tutorial gibt. Das was ich
bisher gefunden hatte, entwickelt TagClouds aus dem Text der Seite.
Ich möchte aber den Text über MySql ausgeben,

So in etwa (?!):
Code: Select all
 $abfrage = "  SELECT *
FROM `tags`
ORDER BY `zaehler` DESC
LIMIT 0 , 30";

mo
$result = mysql_query($abfrage);

//  etc


Edit: Sorry hab es fast vergessen


Code: Select all

$suchwoerter = array (
                                 "Grafik" => "659" ,
                                 "Zeichnungen" => "129" ,
                                 "Bilder" =>  "35" ,
                                 ...,
                                 
                      );




Wird so vom Statistikscript erstellt, das Script ist nicht von mir, also warum die es so ausgeben, keine Ahnung.



mo
mori08
 
Posts: 13
Joined: 12. March 2008 21:11

Postby iSorgenfrei » 21. April 2008 16:16

Hi,

hier mein tagcloud (auch mit db)

Code: Select all
$get="SELECT search,COUNT(search) as count FROM recherche GROUP BY search ORDER BY RAND();";
$do_get=mysql_query($get);
$rows_get=mysql_num_rows($do_get);
for($i=0;$i<$rows_get;$i++)
{
$data_get=mysql_fetch_object($do_get);
$s_matrix=($data_get->count/$rows_get);
$font_size=($data_get->count*2)+10;
$count=$i;
if($s_matrix > 0.25 &&  $s_matrix < $rows_get){$font_weight="bold";}else{$font_weight="normal";}
$style="font-size:".$font_size."px;font-weight:".$font_weight.";";
echo "\n<!-- $data_get->count;$rows_get;$s_matrix;$font_size;$font_weight --> <a href=\"index.php?page=recherche&mot=".str_replace(" ","+",$data_get->search)."&db=all\" class=\"res_a\" style=\"".$style."\" title=\"".$data_get->search." (".$data_get->count.")\">".$data_get->search."</a>";
}
if(!$rows_get)
{
echo "<i style=\"color:#095719;\">keine tags</i>";
}
iSorgenfrei
 
Posts: 3
Joined: 08. March 2008 23:14
Location: Hamburg

Postby mori08 » 25. April 2008 10:55

Hallo iSorgenfrei, vielen Danke für dein Beispielscript, hatte die ganze Zeit leider keine Zeit mich mit dem Thema zu befassen,
deswegen die verspätete Antwort. Jetzt hatte ich mehr Zeit und habe auch dein Scriptbeispiel mal ausprobiert, mich dann
aber doch für eine andere Lösung entschieden.


Da ich sehr lange im Netz nach Tipps, Hinweisen und Lösungen gesucht hatte, die ich für meine Anforderungen brauchte
aber leider nicht fand. Möchte ich, falls jemand anderes auch nach einer Lösung sucht, mein Ergebnis noch darstellen.


Zur Erinnerung:

Ich wollte Suchbegriffe (von Google Anfragen) in einer Wortwolke visualisieren.
Die Begriffe stehen in einer Datenbank (als $stichworte), die Häufigkeit der
Verwendung dieser Begriffe hat ein Feld ($val).


Jetzt sollen Sie über eine Datenbankabfrage ausgelesen werden, was für mich auch kein Problem war.

Code: Select all


// Ausgabe außerhalb der Schleife

echo "<fieldset id=\"tagcloud\"><legend>Top Suchbegriffe:</legend>";       


/***********************/
/* Datenbankverbindung */
/***********************/



$serverid = @mysql_connect("127.0.0.1", "root", "");
mysql_select_db("test")
or die("Die Datenbank ist zur Zeit nicht erreichbar!");


/*****************************/
/*       Abfrage der DB      */
/*****************************/

$abfrage = "  SELECT * FROM `tagcloud` ORDER BY id ASC LIMIT 0 , 20  ";



 $result = mysql_query($abfrage);



while($row=mysql_fetch_assoc($result)) {


 //Der Suchbegriff

$stichworte = $row['stichworte'];

 // der Wert des Suchbegriffes

$val = $row['val'];


// ausgabe des Links

$c  .= '<a target="_blank" href="http://www.google.de/search?q=site:'.$Domain.' '.urldecode($row['stichworte']).'"  class="'.$cssClass.'"    title="Suchbegriffe zur Website: '.$row['stichworte'].'" onfocus="if(this.blur)this.blur()" >'.$row['stichworte'].",</a> \n";


}

echo $c;



echo"</fieldset>";


// ... Auszug, php Script ende...





Die Gestaltung der Stichworte im TagCloud wollte ich über CSS realisieren.
Damit hatte ich Probs, hatte einfach ne Denkblockade, weiß auch nicht ob man es hätte anders Lösen
können, für Hinweise und Tipps, bin ich sehr dankbar.


In der oben beschriebenen Abfrageschleife kommt noch die CSS Abstufung:
Code: Select all

// es sollen 9 css Abstufungen geben

 $cssValue= round($val/9*100);

for ($i=0;$i<$cssValue;$i++)
{

   if($i>=5){
    $classValue=1;
   }

    if($i>=18){
    $classValue=2;
   }


    if($i>=27){
    $classValue=3;
   }

    if($i>=36){
    $classValue=4;
   }


    if($i>=45){
    $classValue=5;
   }

    if($i>=54){
    $classValue=6;
   }

    if($i>=60){
    $classValue=7;
   }


    if($i>=70){
    $classValue=8;
   }

    if($i>=90){
    $classValue=9;
   }


 }




// css string zusammengesetzt

 $cssClass='tag'.$classValue;






Das CSS ist extern:
Code: Select all


                .tag9 { font-size: 34px; color: #1B5E8D;}
      
                bis...
                                      
      .tag1 { font-size: 12px; color: #86BCE2;}




Da ich hier immer nur Auszugsweise das Script darstellen wollte, um hier nicht ein zu langes Script reinstellen zu müssen,
ermüdet die Augen (grins), hoffe ich, dass beim kopieren alles wesentliche mitkam und es so noch gut verständlich ist.

Bei der For-Schleife, habe ich mir da ganze wie eine Prozent Scala (von 100 bis 10) vorgestellt.
Es später dann doch visuell nach der Ausgabe (im HTML) überprüft und nachkorrigiert. So in etwa.

mo
mori08
 
Posts: 13
Joined: 12. March 2008 21:11


Return to PHP

Who is online

Users browsing this forum: No registered users and 1 guest