<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>meshed.de</title>
	
	<link>http://www.meshed.de</link>
	<description>Online-Marketing, Website-Optimierung und Web-Technologien.</description>
	<pubDate>Mon, 23 Aug 2010 15:11:09 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/meshed" /><feedburner:info uri="meshed" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Bestimmte Zeichen mit PHP aus einem String entfernen</title>
		<link>http://feedproxy.google.com/~r/meshed/~3/Enb41cgBAsI/</link>
		<comments>http://www.meshed.de/2010/bestimmte-zeichen-mit-php-aus-einem-string-entfernen/#comments</comments>
		<pubDate>Mon, 23 Aug 2010 15:08:31 +0000</pubDate>
		<dc:creator>Tobias Redmann</dc:creator>
		
		<category><![CDATA[PHP]]></category>

		<category><![CDATA[normalisieren]]></category>

		<category><![CDATA[zeichen entfernen]]></category>

		<guid isPermaLink="false">http://www.meshed.de/?p=314</guid>
		<description><![CDATA[So k&#246;nnen Sie mit PHP ungew&#252;nschte Zeichen aus Zeichenketten entfernen.]]></description>
			<content:encoded><![CDATA[<p><strong>So k&#246;nnen Sie mit PHP ungew&#252;nschte Zeichen aus Zeichenketten entfernen.</strong></p>
<p>Wenn man die Qualit&#228;t der darzustellenden Daten nicht selber unter Kontrolle hat, kann es schonmal vorkommen, dass man nachtr&#228;glich noch &#8220;Hand anlegen&#8221; muss. Ich habe mir eine kleine Funktion geschrieben, die einige unsch&#246;ne Zeichen entfernt.</p>
<pre name="code" class="php">

function removeUglyChars($phrase) {

  // characters to remove
  $remove = array('*', '+', '!',  ',', '#', '@', '♦', '►', '◄', '•');

  // remove to ugly chars
  $phrase = str_replace($remove, " ", $phrase);

  // remove all double white-spaces
  while (strpos($phrase, "  ") !== false) $phrase = str_replace("  ", " ", $phrase);

  return trim($phrase);

}
</pre>
<p>Im Array <code>$remove</code> werden dazu alle &#8220;h&#228;sslichen&#8221; Zeichen definiert, die entfernt werden sollen. Mit <a href="http://de.php.net/manual/de/function.str-replace.php">str_replace</a> werden diese durch ein Leerzeichen ersetzt. Anschlie&#223;end werden mit Hilfe der While-Schleife alle doppelten Leerzeichen entfernt und das Ergebnis ohne Leerzeichen am Anfang und Ende zur&#252;ckgegeben.</p>
<p>Sehr wirkungsvoll das Ganze, dann so sehen die eBay-Suchergebnisse bei <a href="http://handy-preis.net/">Handy Preis</a> nicht mehr ganz so schlimm aus - zu sehen z.B. beim <a href="http://handy-preis.net/samsung-galaxy-s-i9000/">Samsung Galaxy i9000</a>.</p>
<img src="http://feeds.feedburner.com/~r/meshed/~4/Enb41cgBAsI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.meshed.de/2010/bestimmte-zeichen-mit-php-aus-einem-string-entfernen/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.meshed.de/2010/bestimmte-zeichen-mit-php-aus-einem-string-entfernen/</feedburner:origLink></item>
		<item>
		<title>IP-basiertes Geotargeting testen</title>
		<link>http://feedproxy.google.com/~r/meshed/~3/YN1Ouw9VusY/</link>
		<comments>http://www.meshed.de/2010/ip-basiertes-geotargeting-testen/#comments</comments>
		<pubDate>Wed, 18 Aug 2010 14:36:54 +0000</pubDate>
		<dc:creator>Tobias Redmann</dc:creator>
		
		<category><![CDATA[Web-Technologien]]></category>

		<category><![CDATA[geotargeting]]></category>

		<category><![CDATA[ip-targeting]]></category>

		<category><![CDATA[iplocation]]></category>

		<category><![CDATA[testen]]></category>

		<guid isPermaLink="false">http://www.meshed.de/?p=311</guid>
		<description><![CDATA[Wie kann man eigentlich IP-basiertes Geotargeting testen?]]></description>
			<content:encoded><![CDATA[<p><strong>Wie kann man eigentlich IP-basiertes Geotargeting testen?</strong></p>
<p>Bei einem unserer Projekte setzen wir auf Geotargeting. Abh&#228;ngig davon, aus welchem Land ein Besucher kommt, werden ihm unterschiedliche Informationen angezeigt - auch die Sprache der Website &#228;ndert sich entsprechend.</p>
<p>F&#252;r einen Entwickler besteht nun in aller Regel die Herausforderung darin, die Ermittlung des korrekten Landes anhand entsprechender IP-Adressen live an der Website zu ermitteln. Ich nutze dazu freie Proxies die es in unterschiedlichen L&#228;ndern gibt. Eine Liste mit entsprechenden Servern gibt es z.B. auf <a rel="nofollow" href="http://www.xroxy.com">xroxy.com</a>. Einfach im Firefox in den Einstellungen eintragen und schon glauben die meisten IP-basierten Geotargeting-Dienste, dass man in dem entsprechenden Land sitzt.</p>
<p>Einfach und effektiv um das Targeting anhand der IP-Adressen zu testen.</p>
<img src="http://feeds.feedburner.com/~r/meshed/~4/YN1Ouw9VusY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.meshed.de/2010/ip-basiertes-geotargeting-testen/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.meshed.de/2010/ip-basiertes-geotargeting-testen/</feedburner:origLink></item>
		<item>
		<title>SEO für webEdition CMS</title>
		<link>http://feedproxy.google.com/~r/meshed/~3/kWxuXSvM5ik/</link>
		<comments>http://www.meshed.de/2010/seo-fuer-webedition-cms/#comments</comments>
		<pubDate>Sat, 07 Aug 2010 12:59:27 +0000</pubDate>
		<dc:creator>Tobias Redmann</dc:creator>
		
		<category><![CDATA[Content Management Systeme]]></category>

		<category><![CDATA[SEO]]></category>

		<category><![CDATA[webEdition]]></category>

		<guid isPermaLink="false">http://www.meshed.de/?p=309</guid>
		<description><![CDATA[Was ist bei der Suchmaschinen-Optimierung f&#252;r das webEdition CMS zu beachten?]]></description>
			<content:encoded><![CDATA[<p><strong>Was ist bei der Suchmaschinen-Optimierung f&#252;r das webEdition CMS zu beachten?</strong></p>
<p>Grunds&#228;tzlich muss man sagen, dass webEdition mehr ein Content-Management-Framework ist. Es gibt weder Themes noch fertige Layouts, d.h. der Entwickler muss sich um alles selber k&#252;mmern. Genau aus diesem Grund kann man mit webEdition sehr gut optimierte Websites umsetzen - das A und O ist dabei nat&#252;rlich das technische Verst&#228;ndnis von HTML, PHP, webEdition und Suchmaschinen-Optimierung.</p>
<p>Aus meiner langj&#228;hrigen Erfahrung mit dem Content-Management-System kann ich folgende Hinweise bei der Umsetzung geben:</p>
<ul>
<li>Nutzen Sie die Eigenschaften (Titel, Description und Keywords) bei jedem Dokument und implementieren Sie diese auch im Template. Dadurch bekommt jedes Dokument einen eindeutigen Titel, eine Description und ggf. Meta-Keywords. Sollten diese Felder nicht gesetzt sein (ifEmpty), k&#246;nnen Sie anhand des Seitentitels eine Description generieren.</li>
<li>Pflegen Sie Dokumente strukturiert in Ordnern ein, d.h. ein Artikel zum Thema Automobil sollte nicht /auto.html, sondern /auto/index.html heissen. Dadurch haben Sie die M&#246;glichkeit bei der Ausgabe, dass unn&#246;tige index.html zu entfernen und die URL sch&#246;n kurz darzustellen, n&#228;mlich als /auto/.</li>
<li>Entfernen Sie in Listviews unn&#246;tige Dateinamen wie index.html (s.o.). Das k&#246;nnen Sie dadurch erreichen, dass sie sich den Pfad des aktuellen Dokuments im Listview holen und dann einfach die ungew&#252;nschte Zeichenkette entfernen. Eine weitere M&#246;glichkeit, ist das <a href="http://www.meshed.de/2009/seo-urls-webedition-listviews/">Auslesen der ParentID des Dokuments</a>.</li>
<li>Wenn Sie das Navigations-Tool von webEdition nutzen, k&#246;nnen Sie ebenfalls unn&#246;tige Dateinamen entfernen. Im Artikel <a href="http://www.meshed.de/2008/webedition-suchmaschinenfreundliche-urls-mit-der-navigation/">Suchmaschinenfreundliche URLs mit der webEdition Navigation</a> erfahren Sie, wie das geht.</li>
<li>&#196;hnlich wie mit dem Navigations-Tool k&#246;nnen Sie auch Links im Eingabefeldern bearbeiten. Einfach die Ausgabe des Angabefeldes puffern und dann von internen Links die ungew&#252;nschten Dateinamen abschneiden.</li>
<li>Die wohl gr&#246;&#223;te Herausforderung ist die Nutzung von Objekten. Je nachdem wie Ihr System aufgebaut ist, gibt es verschiedenen M&#246;glichkeiten diese URLs besser zu gestalten. Ein Weg ist z.B. mit Hilfe von URL-Rewritung die Objekte-ID zu &#252;bergeben und dann noch einen f&#252;r das System &#8220;unn&#252;tzen&#8221; String, z.B. /events/4565/webedition-schulung-august-2010/. Viele andere Muster sind dabei denkbar.<br />
Einen Weg den ich &#252;blicherweise eingeschlage, ist die Nutzung eines Textfeldes im Objekt das im System eindeutig sein sollte. Diese Textfeld nutze ich dann, um das Objekt aus dem System auszulesen, wie z.B. bei <a href="http://handy-preis.net/samsung-galaxy-s-i9000/">http://handy-preis.net/samsung-galaxy-s-i9000/</a>. Anstatt ein eigenes Textfeld zu nutzen, kann man auch den Objektnamen nehmen. Meine Erfahrung sagt jedoch, dass der Objektname und der Inhalt des Objektes manchmal recht stark variieren.</li>
</ul>
<p>Mit diesen kleinen Tricks k&#246;nnen Sie eine webEdition Seite recht gut optimieren. Sollten Sie weitere Fragen haben oder eine ausf&#252;hrliche Beratung w&#252;nschen, k&#246;nnen einen Kommentar schreiben oder mich jederzeit kontaktieren.</p>
<img src="http://feeds.feedburner.com/~r/meshed/~4/kWxuXSvM5ik" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.meshed.de/2010/seo-fuer-webedition-cms/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.meshed.de/2010/seo-fuer-webedition-cms/</feedburner:origLink></item>
		<item>
		<title>Website Performance Optimierung auf dem Webserver</title>
		<link>http://feedproxy.google.com/~r/meshed/~3/wrO-JiPDv3Y/</link>
		<comments>http://www.meshed.de/2010/website-performance-optimierung-webserver/#comments</comments>
		<pubDate>Thu, 05 Aug 2010 21:50:01 +0000</pubDate>
		<dc:creator>Tobias Redmann</dc:creator>
		
		<category><![CDATA[Web-Technologien]]></category>

		<category><![CDATA[geschwindigkeit]]></category>

		<category><![CDATA[performance]]></category>

		<category><![CDATA[performance optimierung]]></category>

		<category><![CDATA[website optimierung]]></category>

		<guid isPermaLink="false">http://www.meshed.de/?p=301</guid>
		<description><![CDATA[Wenn Ihre Webseite zu langsam ist, dann erfahren Sie hier Tipps und Tricks f&#252;r eine schnelle Website.]]></description>
			<content:encoded><![CDATA[<p><strong>Wenn Ihre Webseite zu langsam ist, dann erfahren Sie hier Tipps und Tricks f&#252;r eine schnelle Website.</strong></p>
<p>Die Optimierung Ihrer Website f&#252;r zufriedene Benutzer UND Suchmaschinen beginnt eigentlich schon bevor Sie auch nur eine Zeile Quellcode schreiben. Bei der Umsetzung von gro&#223;en Projekten beginnt die Optimierung bereits in der Auswahl und Konfiguration des Webservers. Auch wenn Sie vielleicht einen <a href="http://www.onlinekosten.de/webhosting/root-server">eigenen Root Server</a> haben, so l&#228;sst sich trotzdem noch einiges an der Performance optimieren.</p>
<p>Einige sehr interessante Tipps gibt es z.B. auf folgender Seite:</p>
<ul>
<li>Webserver Optimization and Bandwidth Saving Tips<br />
<a href="https://calomel.org/save_web_bandwidth.html">https://calomel.org/save_web_bandwidth.html</a></li>
</ul>
<p>Wenn der Webserver eingerichtet ist, gibt es bei der Umsetzung des Designs auch noch einiges zu beachten. Zwei gro&#223;e Suchmaschinen-Betreiber geben dazu wirklich sinnvolle Tipps:</p>
<ul>
<li>Yahoo Developer Network: Best Practices for speeding up your website<br />
<a href="http://developer.yahoo.com/performance/rules.html">http://developer.yahoo.com/performance/rules.html</a></li>
<li>Google Page Speed: Web Performance Best Practices<br />
<a href="http://code.google.com/intl/de-DE/speed/page-speed/docs/rules_intro.html">http://code.google.com/intl/de-DE/speed/page-speed/docs/rules_intro.html</a></li>
</ul>
<p>Technische Website Optimierung beginnt also schon bei der Planung und Umsetzung der Website. Um so besser und performanter Ihre Site ist, umso lieber kommen auch Google und Co. vorbei und &#252;bernehmen die Inhalte in den Suchmaschinen-Index.</p>
<img src="http://feeds.feedburner.com/~r/meshed/~4/wrO-JiPDv3Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.meshed.de/2010/website-performance-optimierung-webserver/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.meshed.de/2010/website-performance-optimierung-webserver/</feedburner:origLink></item>
		<item>
		<title>Probleme mit der Facebook Like-Box</title>
		<link>http://feedproxy.google.com/~r/meshed/~3/IWEL0G-uIB0/</link>
		<comments>http://www.meshed.de/2010/probleme-facebook-like-box/#comments</comments>
		<pubDate>Sun, 02 May 2010 09:55:56 +0000</pubDate>
		<dc:creator>Tobias Redmann</dc:creator>
		
		<category><![CDATA[Frameworks]]></category>

		<category><![CDATA[Facebook]]></category>

		<category><![CDATA[fehler]]></category>

		<guid isPermaLink="false">http://www.meshed.de/?p=288</guid>
		<description><![CDATA[Funktioniert die Facebook Like-Box nicht? So beheben Sie den Fehler.]]></description>
			<content:encoded><![CDATA[<p><strong>Funktioniert die Facebook Like-Box nicht? So beheben Sie den Fehler.</strong></p>
<p>Seitdem Facebook die Social Plugins eingef&#252;hrt hat, gibt es beim Wizard f&#252;r die Like-Box verschiedene Probleme. Ich habe mich sehr lange damit herumgeschlagen, dass im IFrame eine nicht funktionierende Seite eingezeigt wurde.</p>
<p>In einem Forum bei Facebook bin ich auf die L&#246;sung gesto&#223;en. Wenn man sich den Code vom Like-Box Wizard generieren l&#228;sst, erh&#228;lt man etwas, dass ungef&#252;hr so aussieht:</p>
<p><code>&lt;iframe src="http://www.facebook.com/plugins/likebox.php?<strong>profile_id=185550966885</strong>&amp;amp;width=292&amp;amp;connections=10&amp;amp;stream=true&amp;amp;header=true&#8221; scrolling=&#8221;no&#8221; frameborder=&#8221;0&#8243; allowTransparency=&#8221;true&#8221; style=&#8221;border:none; overflow:hidden; width:292px; height:px&#8221;&gt;&lt;/iframe&gt;</code></p>
<p>Ich habe in dem Snippet das Attribut profile_id hervorgehoben. Damit die Like-Box bei Ihnen richtig funktioniert, m&#252;ssen Sie das Wort profile_id durch id ersetzten. Das sieht dann ungef&#228;hr so aus:</p>
<p><code>/plugins/likebox.php?<strong>id=185550966885</strong></code></p>
<p>Nachdem ich das angepasst hatte, war die Facebook Like-Box &#252;berall problemlos zu sehen.</p>
<img src="http://feeds.feedburner.com/~r/meshed/~4/IWEL0G-uIB0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.meshed.de/2010/probleme-facebook-like-box/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.meshed.de/2010/probleme-facebook-like-box/</feedburner:origLink></item>
		<item>
		<title>Kostenloses eBook: Firefox Extension erstellen</title>
		<link>http://feedproxy.google.com/~r/meshed/~3/aTwpH-6TlTo/</link>
		<comments>http://www.meshed.de/2009/firefox-extension-erstellen/#comments</comments>
		<pubDate>Wed, 29 Jul 2009 21:13:02 +0000</pubDate>
		<dc:creator>Tobias Redmann</dc:creator>
		
		<category><![CDATA[Linktipps]]></category>

		<category><![CDATA[extension]]></category>

		<category><![CDATA[ff]]></category>

		<category><![CDATA[firefix]]></category>

		<category><![CDATA[xul]]></category>

		<guid isPermaLink="false">http://www.meshed.de/?p=284</guid>
		<description><![CDATA[Erfahren Sie im einem kostenlosen eBook "Build Your own Firefox Extension", wie Sie Ihre eigene Firefox Extension erstellen k&#246;nnen.]]></description>
			<content:encoded><![CDATA[<p><strong>Erfahren Sie im einem kostenlosen eBook &#8220;Build Your own Firefox Extension&#8221;, wie Sie Ihre eigene Firefox Extension erstellen k&#246;nnen.</strong></p>
<p>Derzeit gibt es bei Sitepoint ein gratis eBook in englischer Sprache das beschreibt, wie Sie eine eigene Firefox Extension erstellen k&#246;nnen. Es ist sehr einfach aufgebaut und erl&#228;utert Schritt f&#252;r Schritt den Entwicklungsprozess.</p>
<p>Link: <a href="http://tools.sitepoint.com/codeburner/firefox/">http://tools.sitepoint.com/codeburner/firefox/</a></p>
<img src="http://feeds.feedburner.com/~r/meshed/~4/aTwpH-6TlTo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.meshed.de/2009/firefox-extension-erstellen/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.meshed.de/2009/firefox-extension-erstellen/</feedburner:origLink></item>
		<item>
		<title>Fehler beim Update in WordPress 2.8</title>
		<link>http://feedproxy.google.com/~r/meshed/~3/1frdl5Ev4b4/</link>
		<comments>http://www.meshed.de/2009/fehler-beim-update-in-wordpress-28/#comments</comments>
		<pubDate>Wed, 15 Jul 2009 20:31:07 +0000</pubDate>
		<dc:creator>Tobias Redmann</dc:creator>
		
		<category><![CDATA[WordPress]]></category>

		<category><![CDATA[fehler]]></category>

		<category><![CDATA[Plugins]]></category>

		<category><![CDATA[update]]></category>

		<category><![CDATA[wordpress 2.8]]></category>

		<guid isPermaLink="false">http://www.meshed.de/?p=281</guid>
		<description><![CDATA[So beheben Sie den Fehler Verzeichnis "wp-content" konnte nicht gefunden werden in WordPress 2.8.]]></description>
			<content:encoded><![CDATA[<p><strong>So beheben Sie den Fehler Verzeichnis &#8220;wp-content&#8221; konnte nicht gefunden werden in WordPress 2.8.</strong></p>
<p>Als ich heute einige Plugins updaten wollte, kam leider die o.g. Fehlermeldung. Im Blog von <a href="http://www.kortyla.de/2009/06/13/wordpress-2-8-das-verzeichnis-wp-content-konnte-nicht-gefunden-werden/">Alex</a> stand ein einfacher L&#246;sungsvorschlag. Da jedoch viele nicht den absoluten Pfad zum Blog kennen, habe ich seine L&#246;sung etwas umgeschrieben. Statt dem absoluten Pfad wird nun der Document-Root des Webservers genommen. Ggf. muss man dort noch der WordPress-Installationsverzeichnis eintragen.</p>
<pre name="code" class="php">
putenv('TMPDIR='. $_SERVER['DOCUMENT_ROOT'] .'/wp-content/tmp');
define('WP_TEMP_DIR', ABSPATH . 'wp-content/tmp');
</pre>
<p>Ich hoffe, dass diese L&#246;sung auch anderen hilft die Probleme beim Update der Plugins hatte.</p>
<img src="http://feeds.feedburner.com/~r/meshed/~4/1frdl5Ev4b4" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.meshed.de/2009/fehler-beim-update-in-wordpress-28/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.meshed.de/2009/fehler-beim-update-in-wordpress-28/</feedburner:origLink></item>
		<item>
		<title>webEdition jetzt 100% Open-Source</title>
		<link>http://feedproxy.google.com/~r/meshed/~3/f2EUUYCYCi8/</link>
		<comments>http://www.meshed.de/2009/webedition-jetzt-100-open-source/#comments</comments>
		<pubDate>Tue, 02 Jun 2009 12:08:02 +0000</pubDate>
		<dc:creator>Tobias Redmann</dc:creator>
		
		<category><![CDATA[webEdition]]></category>

		<category><![CDATA[open-source]]></category>

		<guid isPermaLink="false">http://www.meshed.de/?p=278</guid>
		<description><![CDATA[Das beliebte Content-Management-System webEdition ist nun zu 100 Prozent Open-Source.]]></description>
			<content:encoded><![CDATA[<p><strong>Das beliebte Content-Management-System webEdition ist nun zu 100 Prozent Open-Source.</strong></p>
<p>Seit dem 1. Juni 2009 ist das bis Oktober 2008 kommerzielle Content-Management-System webEdition komplett frei. Es wurde eigens vom Hersteller living-e eine eigene <a href="http://community.webedition.de">Community</a> gegr&#252;ndet.</p>
<p>Mit der komplette &#220;berf&#252;hrung sind ab sofort auch alle zuvor <a href="http://documentation.webedition.de">kostenpflichtigen Support-Dokumente frei im Netz verf&#252;gbar</a>. F&#252;r mich ein weiterer Grund jederzeit wieder webEdition zu nutzen.</p>
<img src="http://feeds.feedburner.com/~r/meshed/~4/f2EUUYCYCi8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.meshed.de/2009/webedition-jetzt-100-open-source/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.meshed.de/2009/webedition-jetzt-100-open-source/</feedburner:origLink></item>
		<item>
		<title>Google Analytics API mit PHP - Teil 2: Account-Daten abrufen</title>
		<link>http://feedproxy.google.com/~r/meshed/~3/g28qfXUtCwM/</link>
		<comments>http://www.meshed.de/2009/google-analytics-api-php-account-daten-abrufen/#comments</comments>
		<pubDate>Mon, 27 Apr 2009 18:50:58 +0000</pubDate>
		<dc:creator>Tobias Redmann</dc:creator>
		
		<category><![CDATA[Frameworks]]></category>

		<category><![CDATA[data export api]]></category>

		<category><![CDATA[google analytics]]></category>

		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://www.meshed.de/?p=268</guid>
		<description><![CDATA[Erfahren Sie, wie Sie Ihre Google Analytics Account Daten mit PHP und der Data Export API abfragen k&#246;nnen.]]></description>
			<content:encoded><![CDATA[<p><strong>Erfahren Sie, wie Sie Ihre Google Analytics Account Daten mit PHP und der Data Export API abfragen k&#246;nnen.</strong></p>
<p>Bevor ich Ihnen erl&#228;utere, wie Sie Ihre Google Analytics Konto-Daten abrufen k&#246;nnen, lesen Sie bitte den ersten Teil <a href="http://www.meshed.de/2009/google-analytics-mit-php-authentifizierung/">Authentifizierung</a> dieser Serie. Im folgenden Beispiel wird das Auth-Token <code>$auth</code> aus dem ersten Artikel ben&#246;tigt.</p>
<p>Um auf Ihre Account-Daten zugreifen zu k&#246;nnen, m&#252;ssen Sie sich bei Google authentifizieren. Dies geschieht indem Sie einen angepassten HTTP-Header mit jeder Abfrage mitsenden. Auch hierzu verwenden ich wieder das <a href="http://pear.php.net/package/HTTP_Request">HTTP_Request-Package von PEAR</a>. Folgendes Beispiel zeigt, wie Sie eine Anfrage an den entsprechenden Service stellen:</p>
<pre name="code" class="php">
// URL des Account-Services
$FEED_URL = 'https://www.google.com/analytics/feeds/accounts/default';

// neues Request-Objekt erstellen
$req = new HTTP_Request($FEED_URL);

// Wichtig: Methode GET nicht POST
$req->setMethod(HTTP_REQUEST_METHOD_GET);

// Authentifizierungs-Header konstruieren
$req->addHeader('Authorization', 'GoogleLogin auth='.$auth);

// Anfrage senden
$response = $req->sendRequest();
</pre>
<p>Das erfolgreiche Ergebnis dieser Anfrage enth&#228;lt eine XML-Datei. Die Daten sehen ungef&#228;hr so aus. Ich habe IDs und Domainnamen durch Fantasie-Inhalte ersetzt.</p>
<pre name="code" class="xml">
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearchrss/1.0/" xmlns:dxp="http://schemas.google.com/analytics/2009">
  <id>http://www.google.com/analytics/feeds/accounts/YOURID</id>
  <updated>2009-03-21T07:46:38.000-07:00</updated>
  <title type="text">Profile list for YOURNAME</title>
<link rel="self" type="application/atom+xml" href="http://www.google.com/analytics/feeds/accounts/default"/>
  <author>
    <name>Google Analytics</name>
  </author>
  <generator version="1.0">Google Analytics</generator>
  <openSearch:totalResults>14</openSearch:totalResults>
  <openSearch:startIndex>1</openSearch:startIndex>
  <openSearch:itemsPerPage>14</openSearch:itemsPerPage>
  <entry>
    <id>http://www.google.com/analytics/feeds/accounts/ga:0001</id>
    <updated>2009-01-30T09:06:56.000-08:00</updated>
    <title type="text">www.yourdomain.de</title>
<link rel="alternate" type="text/html" href="http://www.google.com/analytics"/>
    <dxp:tableId>ga:0001</dxp:tableId>
    <dxp:property name="ga:accountId" value="00002" />
    <dxp:property name="ga:accountName" value="www.yourdomain.de" />
    <dxp:property name="ga:profileId" value="00002" />
    <dxp:property name="ga:webPropertyId" value="UA-00001-1" />
  </entry>
  <entry>
    ...
  </entry>
</feed>
</pre>
<p>Sie k&#246;nnen die Daten folgenderma&#223;en ermitteln. Bitte beachten Sie die Anmerkungen nach dem Code-Beispiel.</p>
<pre name="code" class="php">
if ($response) {

  // Daten extrahieren
  $content = $req->getResponseBody();

  // als XML-Datei laden
  $xml = simplexml_load_string($content);
}
</pre>
<p>Um die XML-Daten weiterzuverarbeiten, k&#246;nnen Sie z.B. die hier benutzte Funktion <code>simplexml_load_string</code> nutzen. Bitte beachten Sie aber, dass in den XML-Daten Namespaces verwendet werden. Die benutze Funktion kann diese Daten leider nicht auslesen. Ich empfehle Ihnen lieber auf die <a href="http://de.php.net/manual/de/book.dom.php">DOM-Funktionen von PHP</a> zur&#252;ckzugreifen.</p>
<p>Die hier ermittelten Google Analytics Kontodaten werden ben&#246;tigt, um die Statistiken der von Ihnen angelegten Websites abzufragen. Im n&#228;chsten Teil dieser Serie erfahren Sie, wie Sie Pageviews und Visits einer Ihrer Website abfragen k&#246;nnen.</p>
<p><a href="http://www.meshed.de/feed/">Abonnieren Sie den News-Feed</a>, um weitere Artikel in dieser Serie nicht zu verpassen.</p>
<img src="http://feeds.feedburner.com/~r/meshed/~4/g28qfXUtCwM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.meshed.de/2009/google-analytics-api-php-account-daten-abrufen/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.meshed.de/2009/google-analytics-api-php-account-daten-abrufen/</feedburner:origLink></item>
		<item>
		<title>Google Analytics API mit PHP - Teil 1: Authentifizierung</title>
		<link>http://feedproxy.google.com/~r/meshed/~3/furuKF5IfzA/</link>
		<comments>http://www.meshed.de/2009/google-analytics-mit-php-authentifizierung/#comments</comments>
		<pubDate>Sat, 25 Apr 2009 18:43:15 +0000</pubDate>
		<dc:creator>Tobias Redmann</dc:creator>
		
		<category><![CDATA[Frameworks]]></category>

		<category><![CDATA[data export api]]></category>

		<category><![CDATA[google analytics]]></category>

		<guid isPermaLink="false">http://www.meshed.de/?p=264</guid>
		<description><![CDATA[So k&#246;nnen Sie die Google Analytics Daten per PHP mit der Data Export API abfragen.]]></description>
			<content:encoded><![CDATA[<p><strong>So k&#246;nnen Sie die Google Analytics Daten per PHP mit der Data Export API abfragen.</strong></p>
<p>Vor wenigen Tagen hat Google nach langer Zeit endlich eine Schnittstelle f&#252;r den Web-Analytics-Dienst Google Analytics <a href="http://createordie.de/cod/news/Google-Analytics-API-oeffentlich-048470.html">zur Verf&#252;gung gestellt</a>. Mit der <a href="http://code.google.com/apis/analytics/">Data Export API</a> k&#246;nnen Sie die gespeicherten Daten abfragen.</p>
<p>Google stellt daf&#252;r bereits vorgefertigte Clients f&#252;r Java und JavaScript zur Verf&#252;gung. Bisher gibt es jedoch keine Bibliothek f&#252;r Abfragen mit PHP.</p>
<p>Im ersten Teil der Serie m&#246;chte ich die Authentifizierung bei Google vorstellen. Diese ist notwendig um die Account-Daten und Statistiken abzufragen.</p>
<p>F&#252;r die Authentifizierung ist es notwendig die Daten an Google per HTTP-Post zu &#252;bertragen. Es gibt unterschiedliche M&#246;glichkeiten dies umzusetzen. Ich habe mich f&#252;r das PEAR-Paket <a href="http://pear.php.net/package/HTTP_Request">HTTP_Request</a> entschieden. Sie sollten es Ihrer PEAR-Installation hinzuf&#252;gen. Im Anschluss k&#246;nnen Sie es folgenderma&#223;en in Ihrem Script nutzen.</p>
<pre name="code" class="php">
require_once('HTTP/Request.php');
</pre>
<p>Um sich nun bei Google zu authentifizieren, m&#252;ssen Sie den Nutzernamen und Ihr Google Analytics Passwort wissen. Zusammen mit einem festgelegten Service- und Account-Typ m&#252;ssen Sie alle Parameter per POST an Google senden. Folgender Code &#252;bernimmt dies:</p>
<pre name="code" class="php">
$AUTH_URL 	= 'https://www.google.com/accounts/ClientLogin';

$email 		= 'ihremail@domain.com';
$password 	= 'ihrpasswort'

// neues Request-Objekt erstellen
$req = new HTTP_Request($AUTH_URL);
$req->setMethod(HTTP_REQUEST_METHOD_POST);

// Parameter hinzuf&#252;gen
$req->addPostData('Email',        $email);
$req->addPostData('Passwd',       $password);

$req->addPostData('accountType',  'GOOGLE');
$req->addPostData('service',      'analytics');
$req->addPostData('source',       'meshed.de-test-0.1');

// Request senden
$response = $req->sendRequest();
</pre>
<p>Wenn Sie nun der Request absendet haben und Sie sich erfolgreich authentifizieren konnten, erhalten Sie als Response eine Nachricht die aus drei Zeilen besteht. Darin ist auch das sogenannte Auth-Token enthalten. Sie ben&#246;tigen dies um alle weiteren Abfragen an den Account durchzuf&#252;hren.</p>
<p>Der folgende Code zeigt, wie Sie das Auth-Token aus dem Response-Body auslesen k&#246;nnen.</p>
<pre name="code" class="php">
$authArray = array();

// Zeilen des Responses in Array speichern
$lines = explode("\n",$req->getResponseBody());

// Zeilen durchgehen
foreach ($lines as $line) {

  // Schl&#252;ssel vom Wert trennen
  $keyValue = explode("=", $line);

  $key = $keyValue[0];
  $value = $keyValue[1];

  // Daten in Array schreiben
  $authArray[$key] = $value;   

}

// Auth-Token ermitteln
$auth = $authArray['Auth'];
</pre>
<p>In der Variable <code>$auth</code> ist nun der Auth-Token gespeichert.</p>
<p>In dem n&#228;chsten Teil der Serie erkl&#228;re ich Ihnen, wie Sie Ihre <a href="http://www.meshed.de/2009/google-analytics-api-php-account-daten-abrufen/">Google-Analytics Kontodaten abfragen</a> k&#246;nnen. </p>
<p><a href="http://www.meshed.de/feed/">Abonnieren Sie meinen News-Feed</a>, um die folgenden Artikel zur Google Analytics API nicht zu verpassen.</p>
<img src="http://feeds.feedburner.com/~r/meshed/~4/furuKF5IfzA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.meshed.de/2009/google-analytics-mit-php-authentifizierung/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.meshed.de/2009/google-analytics-mit-php-authentifizierung/</feedburner:origLink></item>
	</channel>
</rss>
