Google: Analytics2KML

Hittade ett inlägg om hur man kan göra om Google Analytics-data till en Google Earth-KML… http://bogomip.net/blog/google-analytics-and-google-earth/

Men… vad ska man med C-kod till när man har PHP :-)

Eftersom inlägget är på engelska och ganska så väl-digg’at så skriver jag vidare på engelska…

Sorry for the Swedish note
Since I’m track-backing the blogentry… I might need to explain this in english.
Well… I wrote a small hack to go from Google Analytics to Google Earth with a little help of PHP.

To use this… go to Google Analytics / Marketing Optimization / Visitor Segment Performance / Geo Map Overlay
Then export to XML. Save the XML-file as analytics2kml.xml and upload it next to the php-files below.

Use the 2 files below to create a nice way to link it from any webpage. You need to create the link to analytics2kml-starter.php

analytics2kml.php

<?
// — Open file
$filename = "analytics2kml.xml";

if (!($fp = fopen($filename, "r"))) {
   die("could not open XML input");
}

$xml_parser = xml_parser_create();
$data = fread($fp, filesize($filename));
fclose($fp);
xml_parse_into_struct($xml_parser, $data, $vals, $index);
xml_parser_free($xml_parser);

// — Populate array
$xmlArr = array();
$level = array();
foreach ($vals as $xml_elem) {
  if ($xml_elem[‘type’] == ‘open’) {
   if (array_key_exists(‘attributes’,$xml_elem)) {
     list($level[$xml_elem[‘level’]],$extra) = array_values($xml_elem[‘attributes’]);
   } else {
     $level[$xml_elem[‘level’]] = $xml_elem[‘tag’];
   }
  }
  if ($xml_elem[‘type’] == ‘complete’) {
   $start_level = 1;
   $php_stmt = ‘$xmlArr’;
   while($start_level < $xml_elem[‘level’]) {
     $php_stmt .= ‘[$level['.$start_level.']]’;
     $start_level++;
   }
   $php_stmt .= ‘[$xml_elem[\'tag\']] = $xml_elem[\'value\'];’;
   eval($php_stmt);
  }
}

// — Write page headers
header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header("content-type:application/vnd.google-earth.kml+xml"); // Google Earth

// — Create top of KML
$kml_output =‘<?xml version="1.0" encoding="UTF-8"?>’;
$kml_output.=‘<kml xmlns="http://earth.google.com/kml/2.0">’;
$kml_output.="
<NetworkLinkControl>
        <linkName>Analytics 2 kml</linkName>
</NetworkLinkControl>
<Document>
        <name>Analytics 2 kml</name>
        <Style id=’googelicon’>
                <IconStyle>
                        <Icon>
                                <href>http://www.snowland.se/a2k/google.png</href>
                        </Icon>
                </IconStyle>
        </Style>"
;
echo $kml_output;

// — Loop thru array
$initRows = 8;
$totalRows = count($xmlArr["URCHINDATA"]["0"]) - $initRows;

for ($i = 0; $i <= $totalRows; $i++) {
        $pointStr  = $xmlArr["URCHINDATA"]["0"][$i]["NAME"];
        $pointStr .= "|" . $xmlArr["URCHINDATA"]["0"][$i]["VALUE1"];
        $pointStr .= "|" . $xmlArr["URCHINDATA"]["0"][$i]["VALUE2"];

        $pointArr = explode("|", $pointStr);

        $nameArr = explode("-", $pointArr["0"]);

        $pointname = $nameArr["1"];
        $longitude = $pointArr["2"] / 10000;
        $latitude = $pointArr["1"] / 10000;

        $kml_description = "Visits: " . $pointArr["3"] . "<br/>Pages/Visit: " . $pointArr["4"] . "<br/>" . $nameArr["0"] . " / " . $nameArr["1"];
        $kml_description = "<![CDATA[".$kml_description."]]>";

        // — Create kml placemark
        $kml_output ="
                        <Placemark>
                                <name>$pointname</name>
                                <description>$kml_description</description>
                                <styleUrl>#googelicon</styleUrl>
                                <Point>
                                        <coordinates>$longitude,$latitude,0</coordinates>
                                </Point>
                        </Placemark>"
;
        echo $kml_output;
}
// — Finnish off the kml
echo "</Document></kml>";

?>
 

analytics2kml-starter.php

<?PHP
        header("content-type:application/vnd.google-earth.kml+xml");

        $kml_output=‘<?xml version="1.0" encoding="UTF-8"?>’;
        $kml_output.=‘<kml xmlns="http://earth.google.com/kml/2.0">’;

        $kml_output.=
                <NetworkLink>
                        <name>Analytics 2 kml</name>
                        <Url>
                                <href>http://www.snowland.se/a2k/analytics2kml.php</href>
                                <viewRefreshMode>never</viewRefreshMode>
                        </Url>
                </NetworkLink>’
;
        $kml_output.=‘</kml>’;

        echo $kml_output;
?>