Word-Cloud Spaß mit dem SEO Log

Post custom hacks and enhancements for phpwcms here only. Maybe some of these things will be included in official release later.
Post Reply
thoblerone
Posts: 110
Joined: Fri 27. Jan 2006, 23:34
Location: Essen, Germany
Contact:

Word-Cloud Spaß mit dem SEO Log

Post by thoblerone »

Hallo zusammen,

ich habe bislang nie so recht etwas mit dem SEO Log Modul anfangen können. Heute habe ich mir damit einen kleinen Spaß erlaubt. Dürfte nix für High-Traffic-Seiten sein, da nicht gerade auf Performance ausgelegt.

Trotzdem kriegt man wenigstens eine schön animierte Tag-Cloud zu sehen. Diese basiert auf dem Google Chart API http://code.google.com/intl/de-DE/apis/ ... harts.html

Einfach einen CP HTML einfügen und Folgendes rein packen:

Code: Select all

<div style="clear: both;"></div>
    <script type="text/javascript" src="http://www.google.com/jsapi"></script>
    <script type="text/javascript" src="http://word-cumulus-goog-vis.googlecode.com/svn/trunk/wordcumulus.js"></script>
    <script type="text/javascript" src="http://word-cumulus-goog-vis.googlecode.com/svn/trunk/swfobject.js"></script>
    <script type="text/javascript">
      google.load("visualization", "1");

      // Set callback to run when API is loaded
      google.setOnLoadCallback(drawVisualization);

      // Called when the Visualization API is loaded.
      function drawVisualization() {

        // Create and populate a data table.
        var data = new google.visualization.DataTable();
        data.addColumn('string', 'Tag');
        data.addColumn('string', 'URL');

[PHP]
// hole die Liste der Suchabfragen aus dem SEO-Log
$sql = "SELECT count(*) anzahl, query FROM phpwcms_log_seo group by query having count(*)>1 order by 1 desc";

$result = _dbQuery($sql);

// breche jede Abfrage in Worter auf, die gezählt werden
$arrWordCounts = array();

$grenze = 0;
foreach ($result as $data)
{
	$arrWords = explode(" ",$data["query"]);
	$count = intval($data["anzahl"]);

	foreach($arrWords as $word)
	{
		// Sonder- und Satzzeichen entfernen
		$word = preg_replace("/[^a-zA-ZäüöÄÜÖß0-9-]/","",strtolower($word));  

		if (strlen($word) > 3) // ignoriere die kurzen Wörter
		{ 
			if (!isset($arrWordCounts[$word]))
			{
				$arrWordCounts[$word] = 0;
			}

			$arrWordCounts[$word] += $count;
		}
	}

	$grenze += 1;

	if ($grenze > 50) // nicht zu viele Daten sammeln, sonst gibts gar keine Cloud
		break;
}

// bereite Wörterliste für Tag-Cloud auf
echo "// Anzahl Wörter = ".count($arrWordCounts) ."\n";

echo "data.addRows(".count($arrWordCounts ).");\n";
$nWord = 0;

foreach ($arrWordCounts as $word => $count)
{
	echo "data.setCell(".$nWord.", 0, '".$word."');\n";
	echo "data.setCell(".$nWord.", 1, 'http://www.example.com/suchseitephtml?searchwords=".$word."');\n";

	echo "// Word count = ".$count."\n";
	$nWord += 1;
}		

[/PHP]

        // Instantiate our table object.
        var vis = new gviz_word_cumulus.WordCumulus(document.getElementById('mydiv'));

        // Draw our table with the data we created locally.
        vis.draw(data, {text_color: '#0000AA', speed: 50, width:200, height:250});
       }
   </script>

        <div id="mydiv"></div>
Viel Spaß damit
Thomas
Post Reply