<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	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:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>juust ~ php oddities &#187; php</title>
	<atom:link href="http://www.juust.org/index.php/category/php/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.juust.org</link>
	<description>Link theory and search engine optimization</description>
	<lastBuildDate>Thu, 19 Jan 2012 09:39:32 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>what is the forum doing there</title>
		<link>http://www.juust.org/index.php/what-is-the-forum-doing-there/2010/11/</link>
		<comments>http://www.juust.org/index.php/what-is-the-forum-doing-there/2010/11/#comments</comments>
		<pubDate>Sun, 28 Nov 2010 22:14:26 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[tool]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.juust.org/?p=1434</guid>
		<description><![CDATA[A forum out of nowhere, I noticed that no one posts on an empty forum. So I made a new plugin that gets Yahoo Answers and stuffs them in Simplepress. I grabbed a php yahoo answers class from HungryCoder&#8217;s blog &#8230; <a href="http://www.juust.org/index.php/what-is-the-forum-doing-there/2010/11/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>A forum out of nowhere, I noticed that no one posts on an empty forum. So I made a new plugin that gets Yahoo Answers and stuffs them in Simplepress. I grabbed a <a href="http://hungrycoder.xenexbd.com/scripts/php-scripts-2/searching-and-retrieving-yahoo-answers-in-php.html">php yahoo answers class</a> from HungryCoder&#8217;s blog and hacked a backend together, mapping yahoo categories with a keyword to a forum, retrieving topics and either use cron or direct publishing. It takes 2 minutes to have a forum full of <a href="http://www.juust.org/index.php/forum/search-engine-optimization/">free content</a>. I am going to debug it. Maybe in spring I&#8217;ll put it on wordpress.org.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.juust.org/index.php/what-is-the-forum-doing-there/2010/11/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>RpSequel : rfc sql crud with wordpress</title>
		<link>http://www.juust.org/index.php/rpsequel-rfc-sql-crud-with-wordpress/2009/10/</link>
		<comments>http://www.juust.org/index.php/rpsequel-rfc-sql-crud-with-wordpress/2009/10/#comments</comments>
		<pubDate>Fri, 23 Oct 2009 09:50:07 +0000</pubDate>
		<dc:creator>juust</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[xml-rpc]]></category>

		<guid isPermaLink="false">http://www.juust.org/?p=1011</guid>
		<description><![CDATA[I set out to use MsAccess with xhr/ajax to maintain tables I added to my wordpress database, from my desktop. (Because I suck at html forms backends and consider them a waste of time.) I used a similar technique ten &#8230; <a href="http://www.juust.org/index.php/rpsequel-rfc-sql-crud-with-wordpress/2009/10/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I set out to use MsAccess with xhr/ajax to maintain tables I added to my wordpress database, from my desktop. (Because I suck at html forms backends and consider them a waste of time.) </p>
<p>I used a similar technique ten years ago, setting up msaccess as reporting tool for SAP R/3 with RFC dll&#8217;s and ActiveX. That remained stable for eight years without maintenance. Hey, I might get lucky with WordPress xml-rpc and xhr/ajax.</p>
<p>I called the example RpSequel.</p>
<h3>adding sql rpc functions</h3>
<p>To sync the data sets, I will duplicate a list with sequel operations from my desktop database as rfc call to my blog&#8217;s  xmlrpc-endpoint. To handle that list, I plug a sql crud method into the xml-rpc method array in WordPress :</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1">add_filter<span class="br0">&#40;</span> <span class="st0">&#39;xmlrpc_methods&#39;</span><span class="sy0">,</span> <span class="st0">&#39;rpsequel_methods&#39;</span> <span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> rpsequel_methods<span class="br0">&#40;</span> <span class="re1">$methods</span> <span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$methods</span><span class="br0">&#91;</span><span class="st0">&#39;rpsequel.rpsequelInsert&#39;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="st0">&#39;rpsequelInsert&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">return</span> <span class="re1">$methods</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> rpsequelInsert<span class="br0">&#40;</span><span class="re1">$args</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>The basic INSERT method itself can be simple:</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">function</span> rpsequelInsert<span class="br0">&#40;</span><span class="re1">$args</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">global</span> <span class="re1">$wpdb</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//the first parameters</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$blog_id</span> <span class="sy0">=</span> <span class="br0">&#40;</span>int<span class="br0">&#41;</span> <span class="re1">$args</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$username</span> <span class="sy0">=</span> <span class="re1">$args</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$password</span> <span class="sy0">=</span> <span class="re1">$args</span><span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$tablename</span> &nbsp; &nbsp; &nbsp;<span class="sy0">=</span> <span class="re1">$args</span><span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//get the structs</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$structs</span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="sy0">=</span> <span class="re1">$args</span><span class="br0">&#91;</span><span class="nu0">4</span><span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//pick the first </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$struct</span> <span class="sy0">=</span> <span class="re1">$structs</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//compose the mysql insert statement &nbsp; &nbsp; </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re1">$struct</span> <span class="kw1">as</span> <span class="re1">$key</span> <span class="sy0">=&gt;</span> <span class="re1">$value</span><span class="br0">&#41;</span><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$SqlFields</span> <span class="sy0">.=</span> <span class="st0">&quot; `&quot;</span><span class="sy0">.</span><span class="re1">$key</span> <span class="sy0">.</span> <span class="st0">&quot;`,&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$SqlValues</span> <span class="sy0">.=</span> <span class="st0">&quot; &#39;&quot;</span><span class="sy0">.</span><span class="re1">$value</span> <span class="sy0">.</span> <span class="st0">&quot;&#39;,&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$SqlFields</span><span class="sy0">=</span><span class="kw3">substr</span><span class="br0">&#40;</span><span class="re1">$SqlFields</span><span class="sy0">,</span> <span class="nu0">0</span><span class="sy0">,</span> <span class="kw3">strlen</span><span class="br0">&#40;</span><span class="re1">$SqlFields</span><span class="br0">&#41;</span><span class="nu0">-1</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$SqlValues</span><span class="sy0">=</span><span class="kw3">substr</span><span class="br0">&#40;</span><span class="re1">$SqlValues</span><span class="sy0">,</span> <span class="nu0">0</span><span class="sy0">,</span> <span class="kw3">strlen</span><span class="br0">&#40;</span><span class="re1">$SqlValues</span><span class="br0">&#41;</span><span class="nu0">-1</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$SqlStatement</span> <span class="sy0">.=</span> <span class="st0">&quot;INSERT INTO &quot;</span><span class="sy0">.</span><span class="re1">$wpdb</span><span class="sy0">-&gt;</span><span class="me1">prefix</span><span class="sy0">.</span><span class="re1">$tablename</span><span class="sy0">.</span> <span class="st0">&quot; (&quot;</span><span class="sy0">.</span> <span class="re1">$SqlFields</span> <span class="sy0">.</span> &nbsp;<span class="st0">&quot;) VALUES (&quot;</span><span class="sy0">.</span><span class="re1">$SqlValues</span> <span class="sy0">.</span> <span class="st0">&quot;)&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//execute the query &nbsp; &nbsp; &nbsp; &nbsp;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$wpdb</span><span class="sy0">-&gt;</span><span class="me1">query</span><span class="br0">&#40;</span><span class="re1">$wpdb</span><span class="sy0">-&gt;</span><span class="me1">prepare</span><span class="br0">&#40;</span><span class="re1">$SqlStatement</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//return the record id</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> <span class="re1">$wpdb</span><span class="sy0">-&gt;</span><span class="me1">insert_id</span><span class="sy0">;</span> </div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>That in itself is not very exciting, it stuffs records in the host&#8217;s database. Which is fine, however, I want the blog to respond to individual operations. </p>
<p>I can write rpc-functions for every single function I want the blog to perform, that means truckloads of rpc-functions, on both client and server end. I am incredibly lazy, so I ain&#8217;t gonna go there.</p>
<h3>adding hooks to sql rpc functions</h3>
<p>Lucky for me, WordPress has hooks, hooks are cool. </p>
<p>Adding action hooks (before_insert and after_insert) to the crud method makes it more powerful. Two hooks are enough to separate the business logic of the desktop database from the blogs reporting logic.</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">function</span> rpsequelInsert<span class="br0">&#40;</span><span class="re1">$args</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">global</span> <span class="re1">$wpdb</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//the first parameters</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$blog_id</span> <span class="sy0">=</span> <span class="br0">&#40;</span>int<span class="br0">&#41;</span> <span class="re1">$args</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$username</span> <span class="sy0">=</span> <span class="re1">$args</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$password</span> <span class="sy0">=</span> <span class="re1">$args</span><span class="br0">&#91;</span><span class="nu0">2</span><span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$tablename</span> &nbsp; &nbsp; &nbsp;<span class="sy0">=</span> <span class="re1">$args</span><span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//get the structs</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$structs</span> &nbsp; &nbsp; &nbsp; &nbsp;<span class="sy0">=</span> <span class="re1">$args</span><span class="br0">&#91;</span><span class="nu0">4</span><span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//here is the first action hook,</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//it hands the tablename and the records over to any</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//function that &#39;listens&#39; on the action hook</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">do_action<span class="br0">&#40;</span><span class="st0">&#39;rpsequel_before_insert&#39;</span><span class="sy0">,</span> &nbsp;<span class="re1">$tablename</span><span class="sy0">,</span> <span class="re1">$structs</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//the rest of the rather dull method</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$struct</span> <span class="sy0">=</span> <span class="re1">$structs</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//&#8230;. </span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//execute the query &nbsp; &nbsp; &nbsp; &nbsp;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$wpdb</span><span class="sy0">-&gt;</span><span class="me1">query</span><span class="br0">&#40;</span><span class="re1">$wpdb</span><span class="sy0">-&gt;</span><span class="me1">prepare</span><span class="br0">&#40;</span><span class="re1">$SqlStatement</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//here is the second action hook,</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//it hands the table name with the new record id</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//to any function that &#39;listens&#39; on the action hook</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">do_action<span class="br0">&#40;</span><span class="st0">&#39;rpsequel_after_insert&#39;</span><span class="sy0">,</span> &nbsp;<span class="re1">$tablename</span><span class="sy0">,</span> <span class="re1">$wpdb</span><span class="sy0">-&gt;</span><span class="me1">insert_id</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//return the record id</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> <span class="re1">$wpdb</span><span class="sy0">-&gt;</span><span class="me1">insert_id</span><span class="sy0">;</span> </div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Now it is more exciting. </p>
<ul>
<li>I can send a list of records and a rfc insert-method to the blogs xmlrpc endpoint</li>
<li>the rfc crud-plugin can process the records one by one</li>
<li>Before and after each insert operation, the method triggers an action. </li>
<li>Before inserting, it exposes the record data.</li>
<li>After inserting, it exposes the record id.</li>
</ul>
<p>And the last two, was exactly what I wanted. </p>
<h3>adding functionality with plugins</h3>
<p>Now I can add tiny plugins, that &#8216;listen&#8217; on the action hooks in the rfc-methods. If there is an INSERT into the database, my plugins read which table it affects. They can perform actions, either before the insert, with the new record data, or after the insert, with the new record id.</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1">add_action <span class="br0">&#40;</span> <span class="st0">&#39;rpsequel_before_insert&#39;</span><span class="sy0">,</span> <span class="st0">&#39;before_insert_logic&#39;</span><span class="sy0">,</span> <span class="nu0">10</span><span class="sy0">,</span> <span class="nu0">2</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">add_action <span class="br0">&#40;</span> <span class="st0">&#39;rpsequel_after_insert&#39;</span><span class="sy0">,</span> <span class="st0">&#39;after_insert_logic&#39;</span><span class="sy0">,</span> <span class="nu0">10</span><span class="sy0">,</span> <span class="nu0">2</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> before_insert_logic<span class="br0">&#40;</span><span class="re1">$rpc_tablename</span><span class="sy0">,</span> <span class="re1">$rpc_array</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">if</span><span class="br0">&#40;</span><span class="re1">$rpc_tablename</span><span class="sy0">==</span><span class="st0">&quot;ships&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//do some stuff before inserting incoming records</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> after_insert_logic<span class="br0">&#40;</span><span class="re1">$rpc_tablename</span><span class="sy0">,</span> <span class="re1">$rpc_insert_id</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">if</span><span class="br0">&#40;</span><span class="re1">$rpc_tablename</span><span class="sy0">==</span><span class="st0">&quot;ships&quot;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//do some stuff after inserting incoming records</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>That&#8217;s basically all it takes. As technique, it has it&#8217;s limitations, but it can come in handy sometimes. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.juust.org/index.php/rpsequel-rfc-sql-crud-with-wordpress/2009/10/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>bing api with php and simplexml</title>
		<link>http://www.juust.org/index.php/bing-api-with-php-simplexml/2009/09/</link>
		<comments>http://www.juust.org/index.php/bing-api-with-php-simplexml/2009/09/#comments</comments>
		<pubDate>Thu, 17 Sep 2009 15:22:17 +0000</pubDate>
		<dc:creator>juust</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[seo]]></category>
		<category><![CDATA[bing]]></category>

		<guid isPermaLink="false">http://www.juust.org/?p=861</guid>
		<description><![CDATA[About scraping results off of Bing : Bing use a set of about eight cookies. You can grab 200 results with php curl, as 20 pages of 10, but after the first 200 the Bing server checks for the cookie &#8230; <a href="http://www.juust.org/index.php/bing-api-with-php-simplexml/2009/09/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><em>About scraping results off of Bing : Bing use a set of about eight cookies. You can grab 200 results with php curl, as 20 pages of 10, but after the first 200 the Bing server checks for the cookie and for lack of one returns a blank page. I can fidget with the curl cookiejar, but Bing also offer a straighforward API.</em></p>
<p>Using the <a href="http://www.bing.com/developers/default.aspx" rel="nofollow" title="where you can get your bing api v2 appid">Bing API</a> to list search results is easier. </p>
<h3>Bing TOS : not for seo rank checks</h3>
<p>In the last paragraph of the <a href="http://www.bing.com/developers/s/API%20Basics.pdf" rel="nofollow">api guide</a>, Bing give a quick recap of their TOS, you can do max 7 queries per second, and using the results for SEO rank checks is explicitly prohibited. </p>
<p>These following snippets (<a href="http://www.juust.org/bingapi.txt" rel="nofollow">text source</a>) are hence <strong>explicitly not</strong> to be used for bing search engine result page (&#8216;serp&#8217;) rank checks. </p>
<h3>bing api with simplexml</h3>
<p>So here is one for web results using php simplexml. The web api (which uses namespaces) allows for retrieving max 1000 results per term at max 50 results per query, you can specify the number of results and the offset, where to start grabbing results.</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="re1">$Appid</span><span class="sy0">=</span><span class="st0">&quot;A_VERY_LONG_STRING&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$Query</span> <span class="sy0">=</span> <span class="st0">&quot;seo rank check&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$Numres</span> <span class="sy0">=</span> <span class="nu0">50</span><span class="sy0">;</span> <span class="co1">//max 50</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$Offset</span> <span class="sy0">=</span> <span class="nu0">1</span><span class="sy0">;</span> &nbsp; &nbsp;<span class="co1">//up to 1000</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$url</span> <span class="sy0">=</span> <span class="st0">&#39;http://api.search.live.net/xml.aspx?</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">Appid=&#39;</span><span class="sy0">.</span><span class="re1">$Appid</span><span class="sy0">.</span><span class="st0">&#39;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&amp;query=&#39;</span><span class="sy0">.</span><span class="re1">$Query</span><span class="sy0">.</span><span class="st0">&#39;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&amp;sources=web</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&amp;web.count=&#39;</span><span class="sy0">.</span><span class="re1">$Numres</span><span class="sy0">.</span><span class="st0">&#39;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0">&amp;web.offset=&#39;</span><span class="sy0">.</span><span class="re1">$Offset</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$feed</span> <span class="sy0">=</span> simplexml_load_file<span class="br0">&#40;</span><span class="re1">$url</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//use the web: namespace</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re1">$children</span> <span class="sy0">=</span> &nbsp;<span class="re1">$feed</span><span class="sy0">-&gt;</span><span class="me1">children</span><span class="br0">&#40;</span><span class="st0">&#39;http://schemas.microsoft.com/LiveSearch/2008/04/XML/web&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="re1">$children</span><span class="sy0">-&gt;</span><span class="me1">Web</span><span class="sy0">-&gt;</span><span class="me1">Results</span><span class="sy0">-&gt;</span><span class="me1">WebResult</span> <span class="kw1">as</span> <span class="re1">$d</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="re1">$d</span><span class="sy0">-&gt;</span><span class="me1">Title</span><span class="sy0">.</span><span class="st0">&#39;&lt;br /&gt;&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="re1">$d</span><span class="sy0">-&gt;</span><span class="me1">Description</span><span class="sy0">.</span><span class="st0">&#39;&lt;br /&gt;&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="re1">$d</span><span class="sy0">-&gt;</span><span class="me1">Url</span><span class="sy0">.</span><span class="st0">&#39;&lt;br /&gt;&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="re1">$d</span><span class="sy0">-&gt;</span><span class="me1">DisplayUrl</span><span class="sy0">.</span><span class="st0">&#39;&lt;br /&gt;&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>..and one for the pictures using php simplexml :</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="re1">$Appid</span><span class="sy0">=</span><span class="st0">&quot;A_VERY_LONG_STRING&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$Query</span> <span class="sy0">=</span> <span class="st0">&quot;alkmaar&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$Numres</span> <span class="sy0">=</span> <span class="nu0">10</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$Offset</span> <span class="sy0">=</span> <span class="nu0">1</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$url</span> <span class="sy0">=</span> <span class="st0">&#39;http://api.search.live.net/xml.aspx?&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$url</span> <span class="sy0">.=</span> <span class="st0">&#39;Appid=&#39;</span><span class="sy0">.</span><span class="re1">$Appid</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$url</span> <span class="sy0">.=</span> <span class="st0">&#39;&amp;query=&#39;</span><span class="sy0">.</span><span class="re1">$Query</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$url</span> <span class="sy0">.=</span> <span class="st0">&#39;&amp;sources=image&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$url</span> <span class="sy0">.=</span> <span class="st0">&#39;&amp;image.count=&#39;</span><span class="sy0">.</span><span class="re1">$Numres</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$url</span> <span class="sy0">.=</span> <span class="st0">&#39;&amp;image.offset=&#39;</span><span class="sy0">.</span><span class="re1">$Offset</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$feed</span> <span class="sy0">=</span> simplexml_load_file<span class="br0">&#40;</span><span class="re1">$url</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//use the mms: namespace &nbsp; &nbsp; &nbsp; </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re1">$children</span> <span class="sy0">=</span> &nbsp;<span class="re1">$feed</span><span class="sy0">-&gt;</span><span class="me1">children</span><span class="br0">&#40;</span><span class="st0">&#39;http://schemas.microsoft.com/LiveSearch/2008/04/XML/multimedia&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">echo</span><span class="br0">&#40;</span><span class="st0">&#39;&lt;ul ID=&quot;resultList&quot;&gt;&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="re1">$children</span><span class="sy0">-&gt;</span><span class="me1">Image</span><span class="sy0">-&gt;</span><span class="me1">Results</span><span class="sy0">-&gt;</span><span class="me1">ImageResult</span> <span class="kw1">as</span> <span class="re1">$d</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span><span class="br0">&#40;</span><span class="st0">&#39;&lt;li class=&quot;resultlistitem&quot;&gt;&lt;a href=&quot;&#39;</span> <span class="sy0">.</span> <span class="re1">$d</span><span class="sy0">-&gt;</span><span class="me1">DisplayUrl</span> <span class="sy0">.</span> <span class="st0">&#39;&quot;&gt;&#39;</span> <span class="sy0">.</span> <span class="re1">$d</span><span class="sy0">-&gt;</span><span class="me1">Title</span> <span class="sy0">.</span> <span class="st0">&#39;&lt;/a&gt;&lt;br /&gt;&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span><span class="br0">&#40;</span><span class="st0">&#39;&lt;img src=&quot;&#39;</span> <span class="sy0">.</span> <span class="re1">$d</span><span class="sy0">-/&gt;</span>Thumbnail<span class="sy0">-&gt;</span><span class="me1">Url</span><span class="sy0">.</span> <span class="st0">&#39;&quot; /&gt;&lt;br /&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;</span><span class="sy0">.</span><span class="re1">$d</span><span class="sy0">-&gt;</span><span class="me1">Thumbnail</span><span class="sy0">-&gt;</span><span class="me1">ContentType</span><span class="sy0">.</span><span class="st0">&#39;&lt;br /&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;</span><span class="sy0">.</span><span class="re1">$d</span><span class="sy0">-&gt;</span><span class="me1">Thumbnail</span><span class="sy0">-&gt;</span><span class="me1">Height</span><span class="sy0">.</span><span class="st0">&#39;&lt;br /&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;</span><span class="sy0">.</span><span class="re1">$d</span><span class="sy0">-&gt;</span><span class="me1">Thumbnail</span><span class="sy0">-&gt;</span><span class="me1">Width</span><span class="sy0">.</span><span class="st0">&#39;&lt;br /&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &#39;</span><span class="sy0">.</span><span class="re1">$d</span><span class="sy0">-&gt;</span><span class="me1">Thumbnail</span><span class="sy0">-&gt;</span><span class="me1">FileSize</span><span class="sy0">.</span><span class="st0">&#39;&lt;br /&gt;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &lt;/li&gt;&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">echo</span><span class="br0">&#40;</span><span class="st0">&quot;&lt;/ul&gt;&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
</ol>
</div>
<p>I actually like that api, I am going to use that.</p>
<h3>bing api with json</h3>
<p>Bing seem to prefer you use json, less bandwidth usage. After their example in the api basics guide :</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$Numres</span> <span class="sy0">=</span> <span class="nu0">10</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$Offset</span> <span class="sy0">=</span> <span class="nu0">1</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$Query</span><span class="sy0">=</span><span class="st0">&#39;alkmaar&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$url</span> <span class="sy0">=</span> <span class="st0">&#39;http://api.search.live.net/json.aspx?&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$url</span> <span class="sy0">.=</span> <span class="st0">&#39;Appid=&#39;</span><span class="sy0">.</span><span class="re1">$Appid</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$url</span> <span class="sy0">.=</span> <span class="st0">&#39;&amp;query=&#39;</span><span class="sy0">.</span><span class="re1">$Query</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$url</span> <span class="sy0">.=</span> <span class="st0">&#39;&amp;sources=image&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$url</span> <span class="sy0">.=</span> <span class="st0">&#39;&amp;image.count=&#39;</span><span class="sy0">.</span><span class="re1">$Numres</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$url</span> <span class="sy0">.=</span> <span class="st0">&#39;&amp;image.offset=&#39;</span><span class="sy0">.</span><span class="re1">$Offset</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$response</span> <span class="sy0">=</span> <span class="kw3">file_get_contents</span><span class="br0">&#40;</span><span class="re1">$url</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$jsonobj</span> <span class="sy0">=</span> json_decode<span class="br0">&#40;</span><span class="re1">$response</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">echo</span><span class="br0">&#40;</span><span class="st0">&#39;&lt;ul ID=&quot;resultList&quot;&gt;&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re1">$jsonobj</span><span class="sy0">-&gt;</span><span class="me1">SearchResponse</span><span class="sy0">-&gt;</span><span class="me1">Image</span><span class="sy0">-&gt;</span><span class="me1">Results</span> <span class="kw1">as</span> <span class="re1">$value</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">echo</span><span class="br0">&#40;</span><span class="st0">&#39;&lt;li class=&quot;resultlistitem&quot;&gt;&lt;a href=&quot;&#39;</span> <span class="sy0">.</span> <span class="re1">$value</span><span class="sy0">-&gt;</span><span class="me1">Url</span> <span class="sy0">.</span> <span class="st0">&#39;&quot;&gt;&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">echo</span><span class="br0">&#40;</span><span class="st0">&#39;&lt;img src=&quot;&#39;</span> <span class="sy0">.</span> <span class="re1">$value</span><span class="sy0">-/&gt;</span>Thumbnail<span class="sy0">-&gt;</span><span class="me1">Url</span><span class="sy0">.</span> <span class="st0">&#39;&quot;&gt;&lt;/a&gt;&lt;/li&gt;&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">echo</span><span class="br0">&#40;</span><span class="st0">&quot;&lt;/ul&gt;&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
</ol>
</div>
<p>Of course there is the old RSS-option, which doesnt require an appid but also falls under the api 2.0 tos, and a soap option.</p>
<p>other sources :<br />
There is a <a href="http://bingapiphp.codeplex.com/" rel="nofollow">bing api php class</a> made over at <a href="http://routecafe.com/posts/bing-api-php-v11-release.moccha">routecafe</a>, and a <a href="http://einaros.blogspot.com/2009/06/hovering-bing-search-using-jquery.html" rel="nofollow">jquery bing plugin using json</a> over at Einar Otto Stangvik&#8217;s blog. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.juust.org/index.php/bing-api-with-php-simplexml/2009/09/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>replace_ereg</title>
		<link>http://www.juust.org/index.php/replace_ereg/2009/09/</link>
		<comments>http://www.juust.org/index.php/replace_ereg/2009/09/#comments</comments>
		<pubDate>Tue, 15 Sep 2009 13:39:14 +0000</pubDate>
		<dc:creator>juust</dc:creator>
				<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.juust.org/?p=854</guid>
		<description><![CDATA[Posix ereg which will not be included in PHP6 core, you can optionally include it in the install, otherwise you&#8217;d use pcre preg_match. In WordPress, ereg is still used in the squirrelmail POP3 class (trunk), afaik wordpress as it is &#8230; <a href="http://www.juust.org/index.php/replace_ereg/2009/09/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>Posix ereg which will not be included in PHP6 core, you can optionally include it in the install, otherwise you&#8217;d use pcre preg_match. In WordPress, ereg is still used in the squirrelmail POP3 class (<a href="http://core.svn.wordpress.org/trunk/wp-includes/class-pop3.php" rel="nofollow">trunk</a>), afaik wordpress as it is distributed up till now will fail if it tries to load the POP3-class with  a standard PHP 6 install.</p>
<p>I don&#8217;t so much have a problem with that, there is not even a release date set for PHP6. </p>
<p>I was  pondering more in general on backward compatibility and legacy function support, ereg serves as a nice example. </p>
<p>Does it make sense to make a plugin with general php patches ? A central plugin would make it easier for some coders (me of course) to check what functions are dropped, and update code without code breaks caused by updates of php or wordpress core. </p>
<p>So I don&#8217;t have to reinvent the wheel. Something simple like :</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">if</span><span class="br0">&#40;</span><span class="sy0">!</span>function_exist<span class="br0">&#40;</span><span class="st0">&#39;ereg_replace&#39;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw2">function</span> <span class="kw3">ereg_replace</span><span class="br0">&#40;</span><span class="re1">$pattern</span><span class="sy0">,</span> <span class="re1">$replace</span><span class="sy0">,</span> <span class="re1">$source</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">return</span> <span class="kw3">preg_replace</span><span class="br0">&#40;</span><span class="st0">&quot;/&quot;</span><span class="sy0">.</span> <span class="re1">$pattern</span><span class="sy0">.</span><span class="st0">&quot;/&quot;</span><span class="sy0">,</span> <span class="re1">$replace</span><span class="sy0">,</span> <span class="re1">$source</span><span class="br0">&#41;</span><span class="sy0">;</span> &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Anyways, I&#8217;ll have to read about it some more I think.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.juust.org/index.php/replace_ereg/2009/09/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>bing</title>
		<link>http://www.juust.org/index.php/bing-serp/2009/08/</link>
		<comments>http://www.juust.org/index.php/bing-serp/2009/08/#comments</comments>
		<pubDate>Fri, 21 Aug 2009 02:46:06 +0000</pubDate>
		<dc:creator>juust</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[serp]]></category>

		<guid isPermaLink="false">http://www.juust.org/?p=704</guid>
		<description><![CDATA[for completeness : php bing serp scraping : $query = &#39;serp&#39;; $page = 1; $start = &#40;$page-1&#41;*10; $url = &#39;http://www.bing.com/search?q=&#39;.urlencode&#40;$query&#41;.&#34;&#38;first=&#34;.&#40;$start+1&#41;; &#160; $curl_handle = curl_init&#40;&#41;; curl_setopt&#40;$curl_handle,CURLOPT_URL, $url&#41;; curl_setopt&#40;$curl_handle,CURLOPT_CONNECTTIMEOUT,2&#41;; curl_setopt&#40;$curl_handle, CURLOPT_RETURNTRANSFER, 1&#41;; $return = curl_exec&#40;$curl_handle&#41;; curl_close&#40;$curl_handle&#41;; &#160; $parts = split&#40;&#39;&#60;h3&#62;&#39;, $return&#41;; &#160; &#8230; <a href="http://www.juust.org/index.php/bing-serp/2009/08/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>for completeness : php bing serp scraping :</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="re1">$query</span> <span class="sy0">=</span> <span class="st0">&#39;serp&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$page</span> <span class="sy0">=</span> <span class="nu0">1</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$start</span> <span class="sy0">=</span> <span class="br0">&#40;</span><span class="re1">$page</span><span class="nu0">-1</span><span class="br0">&#41;</span><span class="sy0">*</span><span class="nu0">10</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$url</span> <span class="sy0">=</span> <span class="st0">&#39;http://www.bing.com/search?q=&#39;</span><span class="sy0">.</span><span class="kw3">urlencode</span><span class="br0">&#40;</span><span class="re1">$query</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st0">&quot;&amp;first=&quot;</span><span class="sy0">.</span><span class="br0">&#40;</span><span class="re1">$start</span><span class="nu0">+1</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$curl_handle</span> <span class="sy0">=</span> curl_init<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">curl_setopt<span class="br0">&#40;</span><span class="re1">$curl_handle</span><span class="sy0">,</span>CURLOPT_URL<span class="sy0">,</span> <span class="re1">$url</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">curl_setopt<span class="br0">&#40;</span><span class="re1">$curl_handle</span><span class="sy0">,</span>CURLOPT_CONNECTTIMEOUT<span class="sy0">,</span><span class="nu0">2</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">curl_setopt<span class="br0">&#40;</span><span class="re1">$curl_handle</span><span class="sy0">,</span> CURLOPT_RETURNTRANSFER<span class="sy0">,</span> <span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$return</span> <span class="sy0">=</span> curl_exec<span class="br0">&#40;</span><span class="re1">$curl_handle</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">curl_close<span class="br0">&#40;</span><span class="re1">$curl_handle</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$parts</span> <span class="sy0">=</span> <span class="kw3">split</span><span class="br0">&#40;</span><span class="st0">&#39;&lt;h3&gt;&#39;</span><span class="sy0">,</span> <span class="re1">$return</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">for</span><span class="br0">&#40;</span><span class="re1">$j</span><span class="sy0">=</span><span class="nu0">1</span><span class="sy0">;</span><span class="re1">$j</span><span class="sy0">&lt;</span>count <span class="br0">&#40;</span><span class="re1">$parts</span><span class="br0">&#41;</span><span class="sy0">;</span><span class="re1">$j</span><span class="sy0">++</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$p</span><span class="sy0">=</span><span class="re1">$parts</span><span class="br0">&#91;</span><span class="re1">$j</span><span class="br0">&#93;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">preg_match</span><span class="br0">&#40;</span><span class="st0">&#39;#&lt;a<span class="es0">\s</span>+.*?href=[<span class="es0">\&#39;</span>&quot;]([^<span class="es0">\&#39;</span>&quot;]+)[<span class="es0">\&#39;</span>&quot;]<span class="es0">\s</span>*(?:title=[<span class="es0">\&#39;</span>&quot;]([^<span class="es0">\&#39;</span>&quot;]+)[<span class="es0">\&#39;</span>&quot;])?.*?&gt;((?:(?!).)*)#i&#39;</span><span class="sy0">,</span> <span class="re1">$p</span><span class="sy0">,</span> <span class="re1">$urls</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;position: &quot;</span><span class="sy0">.</span><span class="br0">&#40;</span><span class="re1">$start</span> <span class="sy0">+</span><span class="re1">$j</span><span class="br0">&#41;</span><span class="sy0">.</span><span class="st0">&quot; url: &quot;</span><span class="sy0">.</span><span class="re1">$urls</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="sy0">.</span><span class="st0">&quot; title: &quot;</span><span class="sy0">.</span><span class="re1">$urls</span><span class="br0">&#91;</span><span class="nu0">3</span><span class="br0">&#93;</span><span class="sy0">.</span><span class="st0">&#39;&lt;br /&gt;&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="sy0">&lt;/</span>count<span class="sy0">&gt;&lt;/</span>h3<span class="sy0">&gt;</span></div>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.juust.org/index.php/bing-serp/2009/08/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>wordpress : fun with pluggable classes</title>
		<link>http://www.juust.org/index.php/wordpress-fun-with-pluggable-classes/2009/07/</link>
		<comments>http://www.juust.org/index.php/wordpress-fun-with-pluggable-classes/2009/07/#comments</comments>
		<pubDate>Fri, 31 Jul 2009 10:09:26 +0000</pubDate>
		<dc:creator>juust</dc:creator>
				<category><![CDATA[php]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.juust.org/?p=685</guid>
		<description><![CDATA[I was checking some idea i had about writing a small user class with an option to &#8216;plug in&#8217; functions for wordpress. This page covers most of it : dynamically add functions to php classes @ www.gen-x-design.com. The class construct &#8230; <a href="http://www.juust.org/index.php/wordpress-fun-with-pluggable-classes/2009/07/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I was checking some idea i had about writing a small user class with an option to &#8216;plug in&#8217; functions for wordpress. </p>
<p>This page covers most of it :<br />
<a href="http://www.gen-x-design.com/archives/dynamically-add-functions-to-php-classes/">dynamically add functions to php classes</a> @ www.gen-x-design.com. The class construct at the end of the comment thread, Martin Pietschmann&#8217;s <a href="http://pastebin.com/fd1812de" rel="nofollow">contribution</a>, is rather useful. This pattern revolves around importing functionality from pluggable classes and exposing it through one object instance (the &#8216;decorator&#8217; pattern mentioned is mostly used for writing extended classes, different objects with the same base data and functionality, &#8216;views&#8217; sort of). </p>
<p>I can include the file with <em>base</em>, <em>import</em> and <em>user</em> class into function.php, and on making a user object have it read the directory and import functions modules (or load functionality conditional based on user role/authorization).</p>
<p>For this example I used the wordpress options table. I write a new functions class</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">class</span> UserBogusPlugin <span class="kw2">extends</span> MI_Importable</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">public</span> <span class="kw2">function</span> the_anchor<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//user_url and user_nicename are exposed through the user class</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//I plug the functions class into, i can use the $this reference </span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//as if i am writing code in the user class</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">user_url</span><span class="sy0">&lt;&gt;</span><span class="st0">&#39;&#39;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="st0">&#39;&lt;a href=&quot;&#39;</span><span class="sy0">.</span><span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">user_url</span><span class="sy0">.</span><span class="st0">&#39;&quot;&gt;&#39;</span><span class="sy0">.</span><span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">user_nicename</span> <span class="sy0">.</span><span class="st0">&#39;&lt;/a&gt;, &#39;</span> <span class="sy0">.</span> <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">first_name</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//no url, no anchor&#8230;. &nbsp; </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">return</span> <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">user_nicename</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>&#8230;store the added class name in the options table&#8230;</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="co1">//load $arr from options table</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$modules</span> <span class="sy0">=</span> get_option<span class="br0">&#40;</span><span class="st0">&#39;usermodules&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span><span class="br0">&#40;</span><span class="re1">$modules</span><span class="br0">&#41;</span> <span class="re1">$usermodules</span> <span class="sy0">=</span> json_decode<span class="br0">&#40;</span><span class="re1">$modules</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//add module</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$usermodules</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="st0">&#39;UserBogusPlugin&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//store back in options</span></div>
</li>
<li class="li1">
<div class="de1">add_option<span class="br0">&#40;</span><span class="st0">&#39;usermodules&#39;</span><span class="sy0">,</span> json_encode<span class="br0">&#40;</span><span class="re1">$usermodules</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
</ol>
</div>
<p>&#8230;and load the plugin classes when instantiating the user object : </p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">class</span> User <span class="kw2">extends</span> MI_Base</div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">public</span> <span class="kw2">function</span> __construct<span class="br0">&#40;</span><span class="re1">$ID</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$modules</span> <span class="sy0">=</span> get_option<span class="br0">&#40;</span><span class="st0">&#39;usermodules&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re1">$modules</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$usermodules</span> <span class="sy0">=</span> json_decode<span class="br0">&#40;</span><span class="re1">$modules</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re1">$usermodules</span> <span class="kw1">as</span> <span class="re1">$module</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw3">class_exists</span><span class="br0">&#40;</span><span class="re1">$module</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">import</span><span class="br0">&#40;</span><span class="kw2">new</span> <span class="re1">$module</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">//or..</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">//include(&#39;plugclass/&#39;.$module.&#39;.class.php&#39;);</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1">//$this-&gt;import(new $module);</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">ID</span><span class="sy0">=</span><span class="re1">$ID</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>In the wordpress template i can use the added functionality through the user instance :</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="re1">$my_user</span> <span class="sy0">=</span> <span class="kw2">new</span> User<span class="br0">&#40;</span><span class="re1">$user_id</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="sy0">&#8230;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> <span class="re1">$my_user</span><span class="sy0">-&gt;</span><span class="me1">the_anchor</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
</ol>
</div>
<p>Fun with classes :)</p>
<p>add. 3-8 (qed) :<br />
a function to load a directory with plugin files, i add a header /* plugin pluginfilename */ and check the files if there is a header.</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw2">public</span> <span class="kw2">function</span> getPlugins<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$plugdir</span> <span class="sy0">=</span> TEMPLATEPATH <span class="sy0">.</span><span class="st0">&#39;/plug&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="re1">$handle</span> <span class="sy0">=</span> <span class="kw3">opendir</span><span class="br0">&#40;</span><span class="re1">$plugdir</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$retval</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">while</span> <span class="br0">&#40;</span><span class="kw2">false</span> <span class="sy0">!==</span> <span class="br0">&#40;</span><span class="re1">$file</span> <span class="sy0">=</span> <span class="kw3">readdir</span><span class="br0">&#40;</span><span class="re1">$handle</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="br0">&#40;</span><span class="re1">$file</span> <span class="sy0">&lt;&gt;</span> <span class="st0">&quot;.&quot;</span><span class="br0">&#41;</span> <span class="sy0">&amp;&amp;</span> <span class="br0">&#40;</span><span class="re1">$file</span> <span class="sy0">&lt;&gt;</span> <span class="st0">&quot;..&quot;</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$fh</span> <span class="sy0">=</span> <span class="kw3">fopen</span><span class="br0">&#40;</span><span class="re1">$plugdir</span><span class="sy0">.</span><span class="st0">&#39;/&#39;</span><span class="sy0">.</span><span class="re1">$file</span><span class="sy0">,</span> <span class="st0">&#39;r&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$contents</span> <span class="sy0">=</span> <span class="st0">&#39;&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$contents</span> <span class="sy0">.=</span> <span class="kw3">fread</span><span class="br0">&#40;</span><span class="re1">$fh</span><span class="sy0">,</span> <span class="nu0">1024</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">fclose</span><span class="br0">&#40;</span><span class="re1">$fh</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="kw3">preg_match</span><span class="br0">&#40;</span><span class="st0">&#39;/lugin/&#39;</span><span class="sy0">,</span> <span class="re1">$contents</span><span class="br0">&#41;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span> &nbsp; <span class="co1">//check for header : plugin, grab pluginname</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$a</span> <span class="sy0">=</span> <span class="kw3">strpos</span><span class="br0">&#40;</span><span class="re1">$contents</span><span class="sy0">,</span> <span class="st0">&#39;lugin&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$a</span> <span class="sy0">+=</span> <span class="nu0">6</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$b</span> <span class="sy0">=</span> <span class="kw3">strpos</span><span class="br0">&#40;</span><span class="re1">$contents</span><span class="sy0">,</span> <span class="st0">&#39; &#39;</span><span class="sy0">,</span> <span class="re1">$a</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$plugname</span> <span class="sy0">=</span> <span class="kw3">substr</span><span class="br0">&#40;</span><span class="re1">$contents</span><span class="sy0">,</span> <span class="re1">$a</span><span class="sy0">,</span> <span class="re1">$b</span><span class="sy0">-</span><span class="re1">$a</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$retval</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="re1">$plugdir</span><span class="sy0">.</span><span class="st0">&#39;/&#39;</span><span class="sy0">.</span><span class="re1">$file</span><span class="sy0">,</span> <span class="re1">$plugname</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span> &nbsp;<span class="br0">&#125;</span> &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">closedir</span><span class="br0">&#40;</span><span class="re1">$handle</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="re1">$retval</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">public</span> <span class="kw2">function</span> __construct<span class="br0">&#40;</span><span class="re1">$id</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//get he array with plugin files</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$usermodules</span> <span class="sy0">=</span> <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">getPlugins</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re1">$usermodules</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">foreach</span><span class="br0">&#40;</span><span class="re1">$usermodules</span> <span class="kw1">as</span> <span class="re1">$module</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//use require to load and import to add the function</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">require_once</span><span class="br0">&#40;</span><span class="re1">$module</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">import</span><span class="br0">&#40;</span><span class="kw2">new</span> <span class="re1">$module</span><span class="br0">&#91;</span><span class="nu0">1</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">;</span> &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">ID</span><span class="sy0">=</span><span class="re1">$id</span><span class="sy0">;</span> &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.juust.org/index.php/wordpress-fun-with-pluggable-classes/2009/07/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ga api sample : get pageviews</title>
		<link>http://www.juust.org/index.php/google-analytics-api-sample-get-pageviews/2009/05/</link>
		<comments>http://www.juust.org/index.php/google-analytics-api-sample-get-pageviews/2009/05/#comments</comments>
		<pubDate>Wed, 13 May 2009 14:58:01 +0000</pubDate>
		<dc:creator>juust</dc:creator>
				<category><![CDATA[google]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[analytics]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[ga]]></category>
		<category><![CDATA[namespaces]]></category>
		<category><![CDATA[simplexml]]></category>

		<guid isPermaLink="false">http://www.juust.org/?p=504</guid>
		<description><![CDATA[I was going to put that online : how to get the pageviews out of the google analytics api, using simplexml and php. Google use three namespaces in the output file which make it less easy accessible, so here&#8217;s a &#8230; <a href="http://www.juust.org/index.php/google-analytics-api-sample-get-pageviews/2009/05/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p>I was going to put that online : how to get the pageviews out of the google analytics api, using simplexml and php. Google use three namespaces in the output file which make it less easy accessible, so here&#8217;s a quick sample of how to get your sites pageviews out of it :</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="co1">//ids &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = site identifier (from the site data feed)</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//metrics &nbsp; &nbsp; = what i want to see</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//start-date </span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//end-date </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$feedUri</span> <span class="sy0">=</span> <span class="st0">&quot;https://www.google.com/analytics/feeds/data?ids=ga:10516419&amp;metrics=ga:pageviews&amp;start-date=2009-04-01&amp;end-date=2009-05-01&quot;</span><span class="sy0">;</span> &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re1">$curl</span> <span class="sy0">=</span> curl_init<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;curl_setopt<span class="br0">&#40;</span><span class="re1">$curl</span><span class="sy0">,</span> CURLOPT_URL<span class="sy0">,</span> <span class="re1">$feedUri</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;curl_setopt<span class="br0">&#40;</span><span class="re1">$curl</span><span class="sy0">,</span> CURLOPT_CONNECTTIMEOUT<span class="sy0">,</span> <span class="nu0">3</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;curl_setopt<span class="br0">&#40;</span><span class="re1">$curl</span><span class="sy0">,</span> CURLOPT_RETURNTRANSFER<span class="sy0">,</span> <span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="re1">$headers</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="st0">&quot;Authorization: GoogleLogin auth=&quot;</span><span class="sy0">.</span><span class="re1">$Authtoken</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//for authtoken : see previous post</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;curl_setopt<span class="br0">&#40;</span><span class="re1">$curl</span><span class="sy0">,</span> CURLOPT_HTTPHEADER<span class="sy0">,</span> <span class="re1">$headers</span><span class="br0">&#41;</span><span class="sy0">;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp;curl_setopt<span class="br0">&#40;</span><span class="re1">$curl</span><span class="sy0">,</span> CURLOPT_SSL_VERIFYHOST<span class="sy0">,</span> <span class="nu0">0</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;curl_setopt<span class="br0">&#40;</span><span class="re1">$curl</span><span class="sy0">,</span> CURLOPT_SSL_VERIFYPEER<span class="sy0">,</span> <span class="kw2">false</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;curl_setopt<span class="br0">&#40;</span><span class="re1">$curl</span><span class="sy0">,</span> CURLOPT_VERBOSE<span class="sy0">,</span> <span class="nu0">1</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//get the string containing the xml file</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re1">$gA</span> <span class="sy0">=</span> curl_exec<span class="br0">&#40;</span><span class="re1">$curl</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
</ol>
</div>
<p>the feed has three namespaces (atom, opensearch and dxp/analytics), a simple way is accessing the ENTRY tags (from the Atom namespace), in that tag is one DXP: line and that has the answer to the question.</p>
<p>&lt;dxp:metric confidenceInterval=&#8217;0.0&#8242; name=&#8217;ga:pageviews&#8217; type=&#8217;integer&#8217; value=&#8217;755&#8242;/&gt;</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="co1">//load the string into a simple xml object</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re1">$feed</span> <span class="sy0">=</span> simplexml_load_string<span class="br0">&#40;</span><span class="re1">$gA</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//take the atom namespace</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re1">$children</span> <span class="sy0">=</span> &nbsp;<span class="re1">$feed</span><span class="sy0">-&gt;</span><span class="me1">children</span><span class="br0">&#40;</span><span class="st0">&#39;http://www.w3.org/2005/Atom&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//take the entry tags</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re1">$parts</span> <span class="sy0">=</span> <span class="re1">$children</span><span class="sy0">-&gt;</span><span class="me1">entry</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="re1">$parts</span> <span class="kw1">as</span> <span class="re1">$entry</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//from the entry tag,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//access the dxp namespace</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re1">$dxp</span> <span class="sy0">=</span> <span class="br0">&#40;</span>object<span class="br0">&#41;</span> <span class="re1">$entry</span><span class="sy0">-&gt;</span><span class="me1">children</span><span class="br0">&#40;</span><span class="st0">&#39;http://schemas.google.com/analytics/2009&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//METRIC contains the answer to the question</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//grab from the tag METRIC the attribute VALUE</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">echo</span> &nbsp; <span class="br0">&#40;</span>string<span class="br0">&#41;</span> <span class="re1">$dxp</span><span class="sy0">-&gt;</span><span class="me1">metric</span><span class="sy0">-&gt;</span><span class="me1">attributes</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">-&gt;</span><span class="me1">value</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>Important is using the (string) typecast, normally simplexml returns a simplexml object, when you force a string type, it gives the actual metric ga:pageview <strong>value</strong> attribute as number.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.juust.org/index.php/google-analytics-api-sample-get-pageviews/2009/05/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

