<?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; wordpress</title>
	<atom:link href="http://www.juust.org/index.php/category/wordpress/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.juust.org</link>
	<description>Unordered list of one element</description>
	<lastBuildDate>Wed, 28 Jul 2010 14:26:26 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>availability test</title>
		<link>http://www.juust.org/index.php/availability-test/2010/06/</link>
		<comments>http://www.juust.org/index.php/availability-test/2010/06/#comments</comments>
		<pubDate>Thu, 17 Jun 2010 00:39:01 +0000</pubDate>
		<dc:creator>juust</dc:creator>
				<category><![CDATA[mysql]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.juust.org/?p=1263</guid>
		<description><![CDATA[I was writing an availability test with starttime-endtime, on a database with ICS schedule data from Google Calendar (userid, eventid, starttime, endtime), and i came up with this one :

get all user id&#8217;s
a get id&#8217;s for test.start between table.start and table.end
b get id&#8217;s for test.end between table.start and table.end
c get id&#8217;s for test.start < table.start [...]]]></description>
			<content:encoded><![CDATA[<p>I was writing an availability test with starttime-endtime, on a database with ICS schedule data from Google Calendar (userid, eventid, starttime, endtime), and i came up with this one :</p>
<ul>
<li>get all user id&#8217;s</li>
<li>a get id&#8217;s for test.start between table.start and table.end</li>
<li>b get id&#8217;s for test.end between table.start and table.end</li>
<li>c get id&#8217;s for test.start < table.start and test.end > table.end</li>
<li>merge the three overlapping sets (a b c)</li>
<li>available = the difference between all id&#8217;s and the merged set</li>
</ul>
<p>It works but it takes four queries on the entire table. </p>
<p>Isn&#8217;t there a more intelligent way of doing that ?</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">function</span> maat_agenda_check_available<span class="br0">&#40;</span><span class="re1">$start</span><span class="sy0">,</span> <span class="re1">$end</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"><span class="kw3">global</span> <span class="re1">$wpdb</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//get all id&#39;s</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$sql</span> <span class="sy0">=</span> <span class="st0">&quot;SELECT userid FROM &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="st0">&quot;maat_agenda GROUP BY userid&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$all</span> <span class="sy0">=</span> <span class="re1">$wpdb</span><span class="sy0">-&gt;</span><span class="me1">get_results</span><span class="br0">&#40;</span><span class="re1">$sql</span><span class="sy0">,</span> ARRAY_A<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 ids with overlaps</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$a</span> <span class="sy0">=</span> <span class="st0">&quot;SELECT userid FROM &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="st0">&quot;maat_agenda WHERE endtime &gt; &quot;</span><span class="sy0">.</span><span class="re1">$start</span><span class="sy0">.</span><span class="st0">&quot; AND starttime &lt; &quot;</span><span class="sy0">.</span><span class="re1">$start</span><span class="sy0">.</span><span class="st0">&quot; GROUP BY userid&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$b</span> <span class="sy0">=</span> <span class="st0">&quot;SELECT userid FROM &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="st0">&quot;maat_agenda WHERE endtime &gt; &quot;</span><span class="sy0">.</span><span class="re1">$end</span><span class="sy0">.</span><span class="st0">&quot; AND starttime &lt; &quot;</span><span class="sy0">.</span><span class="re1">$end</span><span class="sy0">.</span><span class="st0">&quot; GROUP BY userid&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$c</span> <span class="sy0">=</span> <span class="st0">&quot;SELECT userid FROM &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="st0">&quot;maat_agenda WHERE endtime &lt; &quot;</span><span class="sy0">.</span><span class="re1">$end</span><span class="sy0">.</span><span class="st0">&quot; AND starttime &gt; &quot;</span><span class="sy0">.</span><span class="re1">$start</span><span class="sy0">.</span><span class="st0">&quot; GROUP BY userid&quot;</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">$rsta</span> <span class="sy0">=</span> <span class="re1">$wpdb</span><span class="sy0">-&gt;</span><span class="me1">get_results</span><span class="br0">&#40;</span><span class="re1">$a</span><span class="sy0">,</span> ARRAY_A<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$rstb</span> <span class="sy0">=</span> <span class="re1">$wpdb</span><span class="sy0">-&gt;</span><span class="me1">get_results</span><span class="br0">&#40;</span><span class="re1">$b</span><span class="sy0">,</span> ARRAY_A<span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$rstc</span> <span class="sy0">=</span> <span class="re1">$wpdb</span><span class="sy0">-&gt;</span><span class="me1">get_results</span><span class="br0">&#40;</span><span class="re1">$c</span><span class="sy0">,</span> ARRAY_A<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">//merge arrays</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">if</span><span class="br0">&#40;</span><span class="sy0">!</span><span class="kw3">is_array</span><span class="br0">&#40;</span><span class="re1">$rsta</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="re1">$rsta</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"><span class="kw1">if</span><span class="br0">&#40;</span><span class="sy0">!</span><span class="kw3">is_array</span><span class="br0">&#40;</span><span class="re1">$rstb</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="re1">$rstb</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"><span class="kw1">if</span><span class="br0">&#40;</span><span class="sy0">!</span><span class="kw3">is_array</span><span class="br0">&#40;</span><span class="re1">$rstc</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="re1">$rstc</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"><span class="re1">$rst</span> <span class="sy0">=</span> <span class="kw3">array_merge</span><span class="br0">&#40;</span><span class="re1">$rsta</span><span class="sy0">,</span> <span class="re1">$rstb</span><span class="sy0">,</span> <span class="re1">$rstc</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 uniques</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw3">array_unique</span><span class="br0">&#40;</span><span class="re1">$rst</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">return</span> <span class="kw3">array_diff</span><span class="br0">&#40;</span><span class="re1">$all</span><span class="sy0">,</span> <span class="re1">$rst</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="br0">&#125;</span></div>
</li>
</ol>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.juust.org/index.php/availability-test/2010/06/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>p2p with wordpress xml-rpc</title>
		<link>http://www.juust.org/index.php/p2p-with-wordpress-xml-rpc/2010/02/</link>
		<comments>http://www.juust.org/index.php/p2p-with-wordpress-xml-rpc/2010/02/#comments</comments>
		<pubDate>Mon, 08 Feb 2010 15:49:54 +0000</pubDate>
		<dc:creator>juust</dc:creator>
				<category><![CDATA[wordpress]]></category>
		<category><![CDATA[xml-rpc]]></category>

		<guid isPermaLink="false">http://www.juust.org/?p=1233</guid>
		<description><![CDATA[Simple fun with Wordpress xml-rpc. I want a way to return a welcome message to interested blog owners. 
To get that done, I make a new plugin that adds a new method to the xml-rpc server. 
The method &#8216;p2p.welcome&#8217; is mapped to the plugin function &#8216;p2p_welcome&#8217;, which returns the &#8220;about yourself&#8221; description of the admin [...]]]></description>
			<content:encoded><![CDATA[<p>Simple fun with Wordpress xml-rpc. I want a way to return a welcome message to interested blog owners. </p>
<p>To get that done, I make a new plugin that adds a new method to the xml-rpc server. </p>
<p>The method &#8216;p2p.welcome&#8217; is mapped to the plugin function &#8216;p2p_welcome&#8217;, which returns the &#8220;about yourself&#8221; description of the admin profile.</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="coMULTI">/*</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">Plugin Name: P2P rpc</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">Description: RPC Peer to Peer stuff</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">Version: 1.0.0 &nbsp;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">Author: Juust</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">Author URI: http://www.juust.org/</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">*/</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/* xmlrpc_methods hooks into IXR_Server */</span> &nbsp; &nbsp;</div>
</li>
<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;p2p_xmlrpc_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="coMULTI">/* pass the $methods array and add a new one */</span> &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> p2p_xmlrpc_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; &nbsp;<span class="re1">$methods</span><span class="br0">&#91;</span><span class="st0">&#39;p2p.whoami&#39;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="st0">&#39;p2p_whoami&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &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="coMULTI">/* the function that returns the profile description of user 1 (admin) */</span> &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> p2p_whoami<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">return</span> get_the_author_meta<span class="br0">&#40;</span> <span class="st0">&#39;user_description&#39;</span><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="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>I plug that into the wordpress blog.</p>
<p>Then I can make a small test program : </p>
<ul>
<li>include class-IXR.php which has the IXR_Client class</li>
<li>extend IXR_Client as <strong>P2PClient</strong></li>
<li>add a function P2PClient->whoareyou()</li>
<li>&#8230;that calls the new method p2p.whoami on the blog</li>
<li>echo the returned data : the admin profile description</li>
</ul>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">include_once</span><span class="br0">&#40;</span><span class="st0">&#39;/absolute/path/to/class-IXR.php&#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">Class</span> P2PClient <span class="kw2">extends</span> IXR_Client <span class="br0">&#123;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> <span class="re1">$MyPeerConnection</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> <span class="re1">$response</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">var</span> <span class="re1">$url</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> __construct<span class="br0">&#40;</span><span class="re1">$url</span><span class="sy0">=</span><span class="st0">&quot;&quot;</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="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">url</span> <span class="sy0">=</span> <span class="re1">$url</span><span class="sy0">;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="sy0">!</span><span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">connect</span><span class="br0">&#40;</span><span class="re1">$url</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="kw1">return</span> <span class="kw2">false</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//see if there is an xml rpc endpoint</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> connect<span class="br0">&#40;</span><span class="re1">$url</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">if</span><span class="br0">&#40;</span><span class="sy0">!</span><span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">MyPeerConnection</span> <span class="sy0">=</span> <span class="kw2">new</span> IXR_Client<span class="br0">&#40;</span><span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">url</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="kw1">return</span> <span class="kw2">false</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&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;<span class="co1">//query &#39;p2p.whoami&#39;, store the response</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> whoareyou<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">MyPeerConnection</span><span class="sy0">-&gt;</span><span class="me1">query</span><span class="br0">&#40;</span><span class="st0">&#39;p2p.whoami&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">response</span> <span class="sy0">=</span> <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">MyPeerConnection</span><span class="sy0">-&gt;</span><span class="me1">getResponse</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;<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="co1">//init the client, query, echo response</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$p2p</span> <span class="sy0">=</span> <span class="kw2">new</span> P2PClient<span class="br0">&#40;</span><span class="st0">&#39;http://loaneys.com/xmlrpc.php&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="re1">$p2p</span><span class="sy0">-&gt;</span><span class="me1">whoareyou</span><span class="br0">&#40;</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="st0">&quot;resp &quot;</span><span class="sy0">.</span> <span class="re1">$p2p</span><span class="sy0">-&gt;</span><span class="me1">response</span><span class="sy0">;</span></div>
</li>
</ol>
</div>
<p>That returns : </p>
<blockquote><p>
Hi I am juust, admin of loaneys.com. I worked as business economist at project control and proces automation in engineering and utilities. These days, I do some scripting as a hobby and stick to painting as job.</p></blockquote>
<p>That is a basic way to exchange blog data by extending the xml-rpc endpoint. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.juust.org/index.php/p2p-with-wordpress-xml-rpc/2010/02/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>metaWeblog.newPost posting to Wordpress from Word</title>
		<link>http://www.juust.org/index.php/metaweblog-newpost-posting-to-wordpress-from-word/2009/10/</link>
		<comments>http://www.juust.org/index.php/metaweblog-newpost-posting-to-wordpress-from-word/2009/10/#comments</comments>
		<pubDate>Mon, 26 Oct 2009 11:14:37 +0000</pubDate>
		<dc:creator>juust</dc:creator>
				<category><![CDATA[wordpress]]></category>
		<category><![CDATA[xml-rpc]]></category>

		<guid isPermaLink="false">http://www.juust.org/?p=1027</guid>
		<description><![CDATA[Quick and dirty : posting to Wordpress from Word with VBA. I put the text source on the server. 
It works, to a point. You can take a Word document, run the PostToWordpress macro (with your own blogs settings) and it puts the content in Wordpress. 
I haven&#8217;t worked with Word for a few years, [...]]]></description>
			<content:encoded><![CDATA[<p>Quick and dirty : posting to Wordpress from Word with VBA. I put the <a href="http://www.juust.org/post_to_wordpress.txt" rel="nofollow">text source</a> on the server. </p>
<p>It works, to a point. You can take a Word document, run the PostToWordpress macro (with your own blogs settings) and it puts the content in Wordpress. </p>
<p>I haven&#8217;t worked with Word for a few years, you&#8217;d have to ask someone with up-to-date Word vba skills how to grab the document title, and sanitize and format the document text into proper html-output. For the tests I grabbed a snippet off the net, it does not do a perfect job but the  basic idea is kosher.</p>
<h3>metaWeblog.newPost</h3>
<p>Most sites (including blogger) have skipped from blogger.newPost to newer formats. I prefer using the metaWeblog.newPost rpc method, it is a bit more versatile, and supported by Wordpress as well. </p>
<p>(ref. <a href="http://msdn.microsoft.com/en-us/library/aa905673.aspx" rel="nofollow">msdn library article on metaWeblog.newPost</a>)</p>
<p>The <strong>methodcall</strong> is structured like this :</p>
<ul>
<li>methodname : metaWeblog.newPost</li>
<li>blogid</li>
<li>blog user name</li>
<li>blog password</li>
<li>the post struct with it&#8217;s members
<ul>
<li>categories array</li>
<li>description (the doc text)</li>
<li>title</li>
<li>date created</li>
</ul>
</li>
<li>publish (0=save as draft, 1=publish immediately)</li>
</ul>
<p>So let&#8217;s build that step by step as vba routine :</p>
<div class="geshi no vb">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">Sub</span> PostToWordpress<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">&#39;the basic blog settings</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; txtURL = <span class="st0">&quot;http://www.blog.com/xmlrpc.php&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; txtBlogId = <span class="st0">&quot;1&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; txtUserName = <span class="st0">&quot;MyUserName&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; txtPassWord = <span class="st0">&quot;MyPassword&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">&#39;the document settings</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; txtTitle = <span class="st0">&quot;MyTitle&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">&#39;note : you can use the documents creation date here</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; txtDateCreated = <span class="kw1">Format</span><span class="br0">&#40;</span><span class="kw1">Now</span><span class="br0">&#40;</span><span class="br0">&#41;</span>, <span class="st0">&quot;yyyyMMdd&quot;</span><span class="br0">&#41;</span> &amp; <span class="st0">&quot;T&quot;</span> &amp; <span class="kw1">Format</span><span class="br0">&#40;</span><span class="kw1">Now</span><span class="br0">&#40;</span><span class="br0">&#41;</span>, <span class="st0">&quot;hh:mm:ss&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">&#39;Categories is an array in the post,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">&#39;you can use category names,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">&#39;and you can always use &quot;Uncategorized&quot; </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">&#39;as all wordpress blogs have it</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">Dim</span> MyCategories<span class="br0">&#40;</span><span class="nu0">2</span><span class="br0">&#41;</span> <span class="kw1">As</span> <span class="kw1">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; MyCategories<span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span> = <span class="st0">&quot;Uncategorized&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; MyCategories<span class="br0">&#40;</span><span class="nu0">2</span><span class="br0">&#41;</span> = <span class="st0">&quot;example_category_one&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">&#39;note: this function grabs the document text, </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">&#39;replaces linebreaks with html linebreaks etc. </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">&#39;it needs a lot more work</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; txtDocument = getCurrentDocAsSimpleHtml<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
</ol>
</div>
<p>Once I have the blog settings and the content + attributes for the new Wordpress post, I set up the XMLHttpRequest object :</p>
<div class="geshi no vb">
<ol>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">Dim</span> objSvrHTTP <span class="kw1">As</span> ServerXMLHTTP</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">Dim</span> strT <span class="kw1">As</span> <span class="kw1">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">Set</span> objSvrHTTP = <span class="kw1">New</span> ServerXMLHTTP</div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; objSvrHTTP.<span class="kw1">Open</span> <span class="st0">&quot;POST&quot;</span>, txtURL, <span class="kw1">False</span>, <span class="kw1">CStr</span><span class="br0">&#40;</span>txtUserName<span class="br0">&#41;</span>, _</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">CStr</span><span class="br0">&#40;</span>txtPassWord<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; objSvrHTTP.<span class="me1">setRequestHeader</span> <span class="st0">&quot;Accept&quot;</span>, <span class="st0">&quot;application/xml&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; objSvrHTTP.<span class="me1">setRequestHeader</span> <span class="st0">&quot;Content-Type&quot;</span>, <span class="st0">&quot;application/xml&quot;</span></div>
</li>
</ol>
</div>
<p>Then I start building the XML to send to Wordpress, </p>
<div class="geshi no vb">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">&#39;methodcall &nbsp; &nbsp;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;methodcall&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">&#39;methodname</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;methodname&gt;metaWeblog.newPost&lt;/methodname&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">&#39;parameters : blog settings</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;params&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;param&gt;&lt;value&gt;&lt;string&gt;&quot;</span> &amp; txtBlogId &amp; <span class="st0">&quot;&lt;/string&gt;&lt;/value&gt;&lt;/param&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;param&gt;&lt;value&gt;&lt;string&gt;&quot;</span> &amp; txtUserName &amp; <span class="st0">&quot;&lt;/string&gt;&lt;/value&gt;&lt;/param&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;param&gt;&lt;value&gt;&lt;string&gt;&quot;</span> &amp; txtPassWord &amp; <span class="st0">&quot;&lt;/string&gt;&lt;/value&gt;&lt;/param&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">&#39;parameters : the post structure</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;param&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;struct&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">&#39;parameters : post : category array</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;member&gt;&lt;name&gt;categories&lt;/name&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;value&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;array&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;data&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">For</span> i = <span class="nu0">1</span> <span class="kw1">To</span> <span class="kw1">UBound</span><span class="br0">&#40;</span>MyCategories<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; &nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;value&gt;&quot;</span> &amp; MyCategories<span class="br0">&#40;</span>i<span class="br0">&#41;</span> &amp; <span class="st0">&quot;&lt;/value&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">Next</span> i</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;/data&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;/array&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;/value&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;/member&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">&#39;parameters : post : the content</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;member&gt;&lt;name&gt;description&lt;/name&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;value&gt;&lt; [!CDATA[&quot;</span> &amp; txtDocument &amp; <span class="st0">&quot;]]&gt;&lt;/value&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;/member&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">&#39;parameters : post : title</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;member&gt;&lt;name&gt;title&lt;/name&gt;&lt;value&gt;&quot;</span> &amp; txtTitle &amp; <span class="st0">&quot;&lt;/value&gt;&lt;/member&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">&#39;parameters : post : date created</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;member&gt;&lt;name&gt;dateCreated&lt;/name&gt;&lt;value&gt;&lt;datetime .iso8601&gt;&quot;</span> &amp; &nbsp;txtDateCreated &amp; <span class="st0">&quot;&lt;/datetime&gt;&lt;/value&gt;&lt;/member&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;/struct&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;/param&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">&#39;parameters : post : store as draft (0) or publish immediately (1)</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;param&gt;&lt;value&gt;&lt;boolean&gt;0&lt;/boolean&gt;&lt;/value&gt;&lt;/param&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">&#39;end parameters</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;/params&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">&#39;end methodcall</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;/methodcall&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">&#39;send it to wordpress</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; objSvrHTTP.<span class="me1">send</span> strT</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">&#39;send the response to the debug window</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; Debug.<span class="kw1">Print</span> objSvrHTTP.<span class="me1">responseText</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">End</span> <span class="kw1">Sub</span></div>
</li>
</ol>
</div>
<h3>conversion to html</h3>
<p>The main practical problem is converting the Word document content to html. I grabbed two quick functions to select the current document text, convert the most common html entities and replace linebreaks with their html counterparts, but it is far from perfect. </p>
<div class="geshi no vb">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">Private</span> <span class="kw1">Function</span> getCurrentDocAsSimpleHtml<span class="br0">&#40;</span><span class="br0">&#41;</span> <span class="kw1">As</span> <span class="kw1">String</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">&#39;&#8230; see source text</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">End</span> <span class="kw1">Function</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">&#39; simple HTML entity encoder</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">Private</span> <span class="kw1">Function</span> encode<span class="br0">&#40;</span>ByVal s <span class="kw1">As</span> <span class="kw1">String</span><span class="br0">&#41;</span> <span class="kw1">As</span> <span class="kw1">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">If</span> s = <span class="st0">&quot;&amp;&quot;</span> <span class="kw1">Then</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; encode = <span class="st0">&quot;&amp;amp;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">ElseIf</span> s = <span class="st0">&quot;&lt; &quot;</span> <span class="kw1">Then</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; encode = <span class="st0">&quot;&amp;lt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">ElseIf</span> s = <span class="st0">&quot;&gt;&quot;</span> <span class="kw1">Then</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; encode = <span class="st0">&quot;&amp;gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">ElseIf</span> s = <span class="kw1">Chr</span><span class="br0">&#40;</span><span class="nu0">13</span><span class="br0">&#41;</span> <span class="kw1">Then</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; encode = <span class="st0">&quot;&lt;br /&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">Else</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; encode = s</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">End</span> <span class="kw1">If</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">End</span> <span class="kw1">Function</span></div>
</li>
</ol>
</div>
<p>The Wordpress Incutio xml-parser will not pass content it cannot make sense of, which leaves you with an empty post.</p>
<h3>using CDATA</h3>
<p>A rather common hack I used above is using < ![CDATA[ ]]&gt; to wrap the post content, which indicates to the wordpress xml-parser that I pass a string of raw character data as content. The parser ignores it, and Wordpress stuffs everything in the database. </p>
<p>Works great, but it can backfire and slip stuff in the database that wordpress cannot handle and display correctly. </p>
<p>I&#8217;d test without using CDATA if you want to post from Word on a regular basis, or use a more professional html-converter on the word documents first.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.juust.org/index.php/metaweblog-newpost-posting-to-wordpress-from-word/2009/10/feed/</wfw:commentRss>
		<slash:comments>9</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 years ago, setting up msaccess as reporting tool for SAP R/3 with RFC dll&#8217;s and [...]]]></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>1</slash:comments>
		</item>
		<item>
		<title>integrating ms office and wordpress with vba and xml-rpc</title>
		<link>http://www.juust.org/index.php/integrating-ms-office-and-wordpress-with-vba-and-xml-rpc/2009/10/</link>
		<comments>http://www.juust.org/index.php/integrating-ms-office-and-wordpress-with-vba-and-xml-rpc/2009/10/#comments</comments>
		<pubDate>Tue, 20 Oct 2009 11:20:53 +0000</pubDate>
		<dc:creator>juust</dc:creator>
				<category><![CDATA[juust]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[xml-rpc]]></category>
		<category><![CDATA[vba]]></category>

		<guid isPermaLink="false">http://www.juust.org/?p=979</guid>
		<description><![CDATA[Okay. 
Yesterday I made some basic stuff to grab my Wordpress blog data with visual basic for applicationsn cos I don&#8217;t feel like programming php admin pages for tables. 
So let&#8217;s make a basic xml-rpc crud plugin and put my agenda on vba remote control.
The basic xml-rpc plugin is simple, plug extra methods into the [...]]]></description>
			<content:encoded><![CDATA[<p>Okay. </p>
<p>Yesterday I made some basic stuff to grab my Wordpress blog data with visual basic for applicationsn cos I don&#8217;t feel like programming php admin pages for tables. </p>
<p>So let&#8217;s make a basic xml-rpc crud plugin and put my agenda on vba remote control.</p>
<p>The basic xml-rpc plugin is simple, plug extra methods into the xml-rpc method array, and write a function per crud-method. </p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<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;add_agenda_xmlrpc_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> add_agenda_xmlrpc_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;agenda.addAgendaItem&#39;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="st0">&#39;addAgendaItem&#39;</span><span class="sy0">;</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;agenda.updateAgendaItem&#39;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="st0">&#39;updateAgendaItem&#39;</span><span class="sy0">;</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;agenda.deleteAgendaItem&#39;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="st0">&#39;deleteAgendaItem&#39;</span><span class="sy0">;</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;agenda.reportAgendaItem&#39;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="st0">&#39;reportAgendaItem&#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> addAgendaItem<span class="br0">&#40;</span><span class="re1">$args</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <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> updateAgendaItem<span class="br0">&#40;</span><span class="re1">$args</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <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> deleteAgendaItem<span class="br0">&#40;</span><span class="re1">$args</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <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> reportAgendaItem<span class="br0">&#40;</span><span class="re1">$args</span><span class="br0">&#41;</span> <span class="br0">&#123;</span> <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//basic login helper function</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> CheckLogin<span class="br0">&#40;</span><span class="re1">$user</span><span class="sy0">,</span> <span class="re1">$pwd</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>There now, if I call on the xmlrpc.php file, the extra methods are added to the callback array and I can use the table CRUD functions from my vba desktop.</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">function</span> addAgendaItem<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;</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">$AgendaItem</span> &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">//remember : add a login check</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//(for the example it is irrelevant)</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</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; &nbsp; &nbsp; &nbsp; <span class="re1">$sql</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="st0">&quot;Agenda (</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;`userid`, `tags`, `description`, `firstdate`, `enddate`, `link`, `price`, `location`</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;) VALUES (</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;&quot;</span><span class="sy0">.</span><span class="re1">$AgendaItem</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#39;userid&#39;</span><span class="br0">&#93;</span><span class="sy0">.</span><span class="st0">&quot;&#39;,</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;&quot;</span><span class="sy0">.</span><span class="re1">$AgendaItem</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#39;tags&#39;</span><span class="br0">&#93;</span><span class="sy0">.</span><span class="st0">&quot;&#39;,</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;&quot;</span><span class="sy0">.</span><span class="re1">$AgendaItem</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#39;description&#39;</span><span class="br0">&#93;</span><span class="sy0">.</span><span class="st0">&quot;&#39;,</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;&quot;</span><span class="sy0">.</span><span class="re1">$AgendaItem</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#39;firstdate&#39;</span><span class="br0">&#93;</span><span class="sy0">.</span><span class="st0">&quot;&#39;,</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;&quot;</span><span class="sy0">.</span><span class="re1">$AgendaItem</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#39;enddate&#39;</span><span class="br0">&#93;</span><span class="sy0">.</span><span class="st0">&quot;&#39;,</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;&quot;</span><span class="sy0">.</span><span class="re1">$AgendaItem</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#39;link&#39;</span><span class="br0">&#93;</span><span class="sy0">.</span><span class="st0">&quot;&#39;,</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;&quot;</span><span class="sy0">.</span><span class="re1">$AgendaItem</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#39;price&#39;</span><span class="br0">&#93;</span><span class="sy0">.</span><span class="st0">&quot;&#39;,</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;&quot;</span><span class="sy0">.</span><span class="re1">$AgendaItem</span><span class="br0">&#91;</span><span class="nu0">0</span><span class="br0">&#93;</span><span class="br0">&#91;</span><span class="st0">&#39;location&#39;</span><span class="br0">&#93;</span><span class="sy0">.</span><span class="st0">&quot;&#39; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;)&quot;</span><span class="sy0">;</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">$sql</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">&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>note : the agendaitem is a struct in an array (see below), I use [0] to get the first struct (which is the actual array with field-value pairs, my record with agenda info).</p>
<p>Activate the plugin, and write a simple test </p>
<div class="geshi no vb">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">&#39;Type to hold an agenda info record</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">Type</span> AgendaItem</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; userid <span class="kw1">As</span> <span class="kw1">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; tags <span class="kw1">As</span> <span class="kw1">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; Description <span class="kw1">As</span> <span class="kw1">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; firstdate <span class="kw1">As</span> <span class="kw1">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; enddate <span class="kw1">As</span> <span class="kw1">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; link <span class="kw1">As</span> <span class="kw1">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; price <span class="kw1">As</span> <span class="kw1">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; location <span class="kw1">As</span> <span class="kw1">String</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">End</span> <span class="kw1">Type</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="kw1">Function</span> AddAgendaItem<span class="br0">&#40;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">txtURL = <span class="st0">&quot;http://wwwblog.com/xmlrpc.php&quot;</span></div>
</li>
<li class="li1">
<div class="de1">txtUserName = <span class="st0">&quot;MyUsername&quot;</span></div>
</li>
<li class="li1">
<div class="de1">txtPassword = <span class="st0">&quot;MyPassword&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">Dim</span> objSvrHTTP <span class="kw1">As</span> ServerXMLHTTP</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">Dim</span> strT <span class="kw1">As</span> <span class="kw1">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">Set</span> objSvrHTTP = <span class="kw1">New</span> ServerXMLHTTP</div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; objSvrHTTP.<span class="kw1">Open</span> <span class="st0">&quot;POST&quot;</span>, txtURL, <span class="kw1">False</span>, <span class="kw1">CStr</span><span class="br0">&#40;</span>txtUserName<span class="br0">&#41;</span>, _</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">CStr</span><span class="br0">&#40;</span>txtPassword<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; objSvrHTTP.<span class="me1">setRequestHeader</span> <span class="st0">&quot;Accept&quot;</span>, <span class="st0">&quot;application/xml&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; objSvrHTTP.<span class="me1">setRequestHeader</span> <span class="st0">&quot;Content-Type&quot;</span>, <span class="st0">&quot;application/xml&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = <span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;methodcall&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;methodname&gt;agenda.addAgendaItem&lt;/methodname&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;params&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;param&gt;&lt;value&gt;&lt;string&gt;&quot;</span> &amp; txtBlogId &amp; <span class="st0">&quot;&lt;/string&gt;&lt;/value&gt;&lt;/param&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;param&gt;&lt;value&gt;&lt;string&gt;&quot;</span> &amp; txtUserName &amp; <span class="st0">&quot;&lt;/string&gt;&lt;/value&gt;&lt;/param&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;param&gt;&lt;value&gt;&lt;string&gt;&quot;</span> &amp; txtPassword &amp; <span class="st0">&quot;&lt;/string&gt;&lt;/value&gt;&lt;/param&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">&#39;now we go make the struct, I use a Type (stdobject), normally</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">&#39;you&#39;d use a recordset</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">Dim</span> a <span class="kw1">As</span> AgendaItem</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">With</span> a</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; .<span class="me1">userid</span> = <span class="nu0">1</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; .<span class="me1">Description</span> = <span class="st0">&quot;rpc testing&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; .<span class="me1">firstdate</span> = <span class="st0">&quot;2009/10/14&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; .<span class="me1">enddate</span> = <span class="st0">&quot;2009/10/14&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; .<span class="me1">link</span> = <span class="st0">&quot;http://www.juust.org/&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; .<span class="me1">price</span> = <span class="st0">&quot;rpc testing&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; .<span class="me1">location</span> = <span class="st0">&quot;limmen&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; .<span class="me1">tags</span> = <span class="st0">&quot;php, xml-rpc&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">End</span> <span class="kw1">With</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;param&gt;&lt;value&gt;&lt;array&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;data&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;value&gt;&lt;struct&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;member&gt;&lt;name&gt;userid&lt;/name&gt;&lt;value&gt;&lt;string&gt;&quot;</span> &amp; a.<span class="me1">userid</span> &amp; <span class="st0">&quot;&lt;/string&gt;&lt;/value&gt;&lt;/member&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;member&gt;&lt;name&gt;tags&lt;/name&gt;&lt;value&gt;&lt;string&gt;&quot;</span> &amp; a.<span class="me1">tags</span> &amp; <span class="st0">&quot;&lt;/string&gt;&lt;/value&gt;&lt;/member&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;member&gt;&lt;name&gt;description&lt;/name&gt;&lt;value&gt;&lt;string&gt;&quot;</span> &amp; a.<span class="me1">Description</span> &amp; <span class="st0">&quot;&lt;/string&gt;&lt;/value&gt;&lt;/member&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;member&gt;&lt;name&gt;firstdate&lt;/name&gt;&lt;value&gt;&lt;string&gt;&quot;</span> &amp; a.<span class="me1">firstdate</span> &amp; <span class="st0">&quot;&lt;/string&gt;&lt;/value&gt;&lt;/member&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;member&gt;&lt;name&gt;enddate&lt;/name&gt;&lt;value&gt;&lt;string&gt;&quot;</span> &amp; a.<span class="me1">enddate</span> &amp; <span class="st0">&quot;&lt;/string&gt;&lt;/value&gt;&lt;/member&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;member&gt;&lt;name&gt;link&lt;/name&gt;&lt;value&gt;&lt;string&gt;&quot;</span> &amp; a.<span class="me1">link</span> &amp; <span class="st0">&quot;&lt;/string&gt;&lt;/value&gt;&lt;/member&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;member&gt;&lt;name&gt;price&lt;/name&gt;&lt;value&gt;&lt;string&gt;&quot;</span> &amp; a.<span class="me1">price</span> &amp; <span class="st0">&quot;&lt;/string&gt;&lt;/value&gt;&lt;/member&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;member&gt;&lt;name&gt;location&lt;/name&gt;&lt;value&gt;&lt;string&gt;&quot;</span> &amp; a.<span class="me1">location</span> &amp; <span class="st0">&quot;&lt;/string&gt;&lt;/value&gt;&lt;/member&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">&#39;close the struct &nbsp; &nbsp;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;/struct&gt;&lt;/value&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;/data&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">&#39;close the struct array</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;/array&gt;&lt;/value&gt;&lt;/param&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">&#39;end parameters</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;/params&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">&#39;end method</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;/methodcall&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">&#39;send the lot to the blog &nbsp;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; objSvrHTTP.<span class="me1">send</span> strT</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">&#39;print the response to debug </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; Debug.<span class="kw1">Print</span> &nbsp;objSvrHTTP.<span class="me1">responseText</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">End</span> <span class="kw1">function</span></div>
</li>
</ol>
</div>
<p>Et voila : </p>
<p><img src="http://www.juust.org/wp-content/uploads/2009/10/agenda-rpc.png" alt="agenda rpc" title="agenda rpc" width="550" height="150" class="alignleft size-full wp-image-980" /></p>
<p>That&#8217;s yer basic Office-Wordpress XML-RPC integration.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.juust.org/index.php/integrating-ms-office-and-wordpress-with-vba-and-xml-rpc/2009/10/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>more vba and wordpress xml rpc</title>
		<link>http://www.juust.org/index.php/more-vba-and-wordpress-xml-rpc/2009/10/</link>
		<comments>http://www.juust.org/index.php/more-vba-and-wordpress-xml-rpc/2009/10/#comments</comments>
		<pubDate>Mon, 19 Oct 2009 16:23:58 +0000</pubDate>
		<dc:creator>juust</dc:creator>
				<category><![CDATA[wordpress]]></category>
		<category><![CDATA[xml-rpc]]></category>

		<guid isPermaLink="false">http://www.juust.org/?p=976</guid>
		<description><![CDATA[Basic Example II, vba wordpress remote control, demo.ayHello is fun but quite useless, so let&#8217;s proceed to wp.getUsersBlogs. 
I make a table in access (id, isAdmin, blogid, url, blogName, xmlrpc) and then query wordpress, parse the xml response in store it in the database.
So here we go query Wordpress :



&#160; &#160; methodname = &#34;wp.getUsersBlogs&#34;


&#160;


&#39;xmlrpc url


&#160; [...]]]></description>
			<content:encoded><![CDATA[<p>Basic Example II, vba wordpress remote control, demo.ayHello is fun but quite useless, so let&#8217;s proceed to wp.getUsersBlogs. </p>
<p>I make a table in access (id, isAdmin, blogid, url, blogName, xmlrpc) and then query wordpress, parse the xml response in store it in the database.</p>
<p>So here we go query Wordpress :</p>
<div class="geshi no vb">
<ol>
<li class="li1">
<div class="de1">&nbsp; &nbsp; methodname = <span class="st0">&quot;wp.getUsersBlogs&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">&#39;xmlrpc url</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; txtURL = <span class="st0">&quot;http://www.blog.com/xmlrpc.php&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">&#39;authorization</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; txtUserName = <span class="st0">&quot;user&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; txtPassword = <span class="st0">&quot;pass&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">&#39;XML http request &nbsp;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">Dim</span> objSvrHTTP <span class="kw1">As</span> ServerXMLHTTP</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">Dim</span> strT <span class="kw1">As</span> <span class="kw1">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">Set</span> objSvrHTTP = <span class="kw1">New</span> ServerXMLHTTP</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; objSvrHTTP.<span class="kw1">Open</span> <span class="st0">&quot;POST&quot;</span>, txtURL, <span class="kw1">False</span>, <span class="kw1">CStr</span><span class="br0">&#40;</span>txtUserName<span class="br0">&#41;</span>, _</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="kw1">CStr</span><span class="br0">&#40;</span>txtPassword<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; objSvrHTTP.<span class="me1">setRequestHeader</span> <span class="st0">&quot;Accept&quot;</span>, <span class="st0">&quot;application/xml&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; objSvrHTTP.<span class="me1">setRequestHeader</span> <span class="st0">&quot;Content-Type&quot;</span>, <span class="st0">&quot;application/xml&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">&#39;here is the bit with the wp.getUserBlogs methodname, </span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">&#39;and the username and password &nbsp; &nbsp;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = <span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;methodcall&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;methodname&gt;&quot;</span> &amp; methodname &amp; <span class="st0">&quot;&lt;/methodname&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;params&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;param&gt;&lt;value&gt;&lt;string&gt;&quot;</span> &amp; txtUserName &amp; <span class="st0">&quot;&lt;/string&gt;&lt;/value&gt;&lt;/param&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;param&gt;&lt;value&gt;&lt;string&gt;&quot;</span> &amp; txtPassword &amp; <span class="st0">&quot;&lt;/string&gt;&lt;/value&gt;&lt;/param&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;/params&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; strT = strT &amp; <span class="st0">&quot;&lt;/methodcall&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; objSvrHTTP.<span class="me1">send</span> strT</div>
</li>
</ol>
</div>
<p>that&#8217;s pretty straight forward.</p>
<p>I get an xml message back with the data stored in an array of STRUCT types.</p>
<div class="geshi no vb">
<ol>
<li class="li1">
<div class="de1"><span class="co1">&#39;Create the DomDocument Object</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">Dim</span> oDoc <span class="kw1">As</span> MSXML2.<span class="me1">DOMDocument</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">Set</span> oDoc = <span class="kw1">CreateObject</span><span class="br0">&#40;</span><span class="st0">&quot;MSXML2.DOMDocument&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">oDoc.<span class="me1">async</span> = <span class="kw1">False</span></div>
</li>
<li class="li1">
<div class="de1">oDoc.<span class="me1">validateOnParse</span> = <span class="kw1">False</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">&#39;Load the response in the DomDocument Object</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">Dim</span> fSuccess <span class="kw1">As</span> <span class="kw1">Boolean</span></div>
</li>
<li class="li1">
<div class="de1">fSuccess = oDoc.<span class="me1">loadXML</span><span class="br0">&#40;</span>objSvrHTTP.<span class="me1">responseText</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">If</span> <span class="kw1">Not</span> fSuccess <span class="kw1">Then</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">MsgBox</span> <span class="st0">&quot;failed&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">Exit</span> <span class="kw1">Function</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">End</span> <span class="kw1">If</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1"><span class="co1">&#39;counters</span></div>
</li>
<li class="li1">
<div class="de1">ct = <span class="nu0">1</span></div>
</li>
<li class="li1">
<div class="de1">cs = <span class="nu0">1</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">&#39;array to story the field values</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">Dim</span> SArray<span class="br0">&#40;</span><span class="nu0">1</span> <span class="kw1">To</span> <span class="nu0">5</span><span class="br0">&#41;</span> <span class="kw1">As</span> <span class="kw1">String</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">&#39;open the table as recordset </span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">Dim</span> d <span class="kw1">As</span> DAO.<span class="kw1">Recordset</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">Set</span> d = CurrentDb.<span class="me1">OpenRecordset</span><span class="br0">&#40;</span><span class="st0">&quot;blogs&quot;</span>, dbOpenTable<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">&#39;lets get the structs</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">Set</span> oChildren = oDoc.<span class="me1">selectNodes</span><span class="br0">&#40;</span><span class="st0">&quot;//struct&quot;</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">For</span> Each oStruct In oChildren</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">&#39;the struct has members, </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">Set</span> Members = oStruct.<span class="me1">childNodes</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw1">For</span> Each Member In Members</div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">&#39;each member has a param pair (field, value)</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">&#39;skip the first param, and store the field value</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">&#39;in an array</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">Set</span> Params = Member.<span class="me1">childNodes</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">For</span> Each Param In Params</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; ct = ct + <span class="nu0">1</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">If</span> ct / <span class="nu0">2</span> &lt;&gt; <span class="kw1">Int</span><span class="br0">&#40;</span>ct / <span class="nu0">2</span><span class="br0">&#41;</span> <span class="kw1">Then</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; SArray<span class="br0">&#40;</span>ct / <span class="nu0">2</span><span class="br0">&#41;</span> = Param.<span class="me1">Text</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; cs = cs + <span class="nu0">1</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">End</span> <span class="kw1">If</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp;<span class="kw1">Next</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">Next</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">&#39;we got the struct data, </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="co1">&#39;now add the array to the database</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="kw1">With</span> d</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; .<span class="me1">AddNew</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; !isAdmin = SArray<span class="br0">&#40;</span><span class="nu0">1</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; !url = SArray<span class="br0">&#40;</span><span class="nu0">2</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; !blogid = SArray<span class="br0">&#40;</span><span class="nu0">3</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; !blogName = SArray<span class="br0">&#40;</span><span class="nu0">4</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; !xmlrpc = SArray<span class="br0">&#40;</span><span class="nu0">5</span><span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; .<span class="me1">Update</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">End</span> <span class="kw1">With</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">Next</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">&#39;close up shop</span></div>
</li>
<li class="li1">
<div class="de1">d.<span class="kw1">Close</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">Set</span> d = <span class="kw1">Nothing</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="kw1">End</span> <span class="kw1">Function</span></div>
</li>
</ol>
</div>
<p>The other worpdress api calls work quite the same. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.juust.org/index.php/more-vba-and-wordpress-xml-rpc/2009/10/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>spot the bot</title>
		<link>http://www.juust.org/index.php/spot-a-bot/2009/09/</link>
		<comments>http://www.juust.org/index.php/spot-a-bot/2009/09/#comments</comments>
		<pubDate>Thu, 10 Sep 2009 09:10:25 +0000</pubDate>
		<dc:creator>juust</dc:creator>
				<category><![CDATA[optimisation]]></category>
		<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://www.juust.org/?p=837</guid>
		<description><![CDATA[I have some overhead scripts fetching data that can cost a few seconds extra loading time. Having traffic trigger tasks saves me the trouble of using cron-jobs, but I don&#8217;t want to run overhead scripts with visitors or googlebot on the site. Apart from that, some routines can use a lot of resources which are [...]]]></description>
			<content:encoded><![CDATA[<p>I have some overhead scripts fetching data that can cost a few seconds extra loading time. Having traffic trigger tasks saves me the trouble of using cron-jobs, but I don&#8217;t want to run overhead scripts with visitors or googlebot on the site. Apart from that, some routines can use a lot of resources which are wasted on some crawlers.</p>
<p>I actually want the crawlers to come around, so I will make an array with bots and allowed_bots. Whatever is not on the white-list gets a meager page with overhead jobs attached to it, the rest (iow visitors and the big search engines) get the standard page. </p>
<p>There are truckloads of bots (see <a href="http://www.crawltrack.fr/">crawltrack</a>), for my purposes a few regulars will do. </p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//hook it into &#39;init&#39;, run when calling script</span></div>
</li>
<li class="li1">
<div class="de1">add_action<span class="br0">&#40;</span> <span class="st0">&#39;init&#39;</span><span class="sy0">,</span> <span class="st0">&#39;spotabot&#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="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* checks if visitor is a bot</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* This method checks the http_user_agent string</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* to see if the visitors is a non-essential bot</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* @param void</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;* @return void</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;*/</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">/*</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp;if(IS_A_BAD_BOT) {}</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">*/</span></div>
</li>
<li class="li1">
<div class="de1"><span class="kw2">function</span> spotabot<span class="br0">&#40;</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">$bot_list</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="st0">&quot;Teoma&quot;</span><span class="sy0">,</span> <span class="st0">&quot;betaBot&quot;</span><span class="sy0">,</span> <span class="st0">&quot;alexa&quot;</span><span class="sy0">,</span> <span class="st0">&quot;froogle&quot;</span><span class="sy0">,</span> <span class="st0">&quot;Gigabot&quot;</span><span class="sy0">,</span> <span class="st0">&quot;inktomi&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;looksmart&quot;</span><span class="sy0">,</span> <span class="st0">&quot;URL_Spider_SQL&quot;</span><span class="sy0">,</span> <span class="st0">&quot;Firefly&quot;</span><span class="sy0">,</span> <span class="st0">&quot;NationalDirectory&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;Ask Jeeves&quot;</span><span class="sy0">,</span> <span class="st0">&quot;TECNOSEEK&quot;</span><span class="sy0">,</span> <span class="st0">&quot;InfoSeek&quot;</span><span class="sy0">,</span> <span class="st0">&quot;WebFindBot&quot;</span><span class="sy0">,</span> <span class="st0">&quot;girafabot&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;crawler&quot;</span><span class="sy0">,</span> <span class="st0">&quot;www.galaxy.com&quot;</span><span class="sy0">,</span> <span class="st0">&quot;Googlebot&quot;</span><span class="sy0">,</span> <span class="st0">&quot;Scooter&quot;</span><span class="sy0">,</span> <span class="st0">&quot;Slurp&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;msnbot&quot;</span><span class="sy0">,</span> <span class="st0">&quot;appie&quot;</span><span class="sy0">,</span> <span class="st0">&quot;FAST&quot;</span><span class="sy0">,</span> <span class="st0">&quot;WebBug&quot;</span><span class="sy0">,</span> <span class="st0">&quot;Radian6&quot;</span><span class="sy0">,</span> <span class="st0">&quot;Spade&quot;</span><span class="sy0">,</span> <span class="st0">&quot;ZyBorg&quot;</span><span class="sy0">,</span> <span class="st0">&quot;rabaz&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;Baiduspider&quot;</span><span class="sy0">,</span> <span class="st0">&quot;Feedfetcher-Google&quot;</span><span class="sy0">,</span> <span class="st0">&quot;TechnoratiSnoop&quot;</span><span class="sy0">,</span> <span class="st0">&quot;Rankivabot&quot;</span><span class="sy0">,</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="st0">&quot;Mediapartners-Google&quot;</span><span class="sy0">,</span> <span class="st0">&quot;Sogou web spider&quot;</span><span class="sy0">,</span> <span class="st0">&quot;WebAlta Crawler&quot;</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="re1">$bot_allowed</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="st0">&quot;Googlebot&quot;</span><span class="sy0">,</span> <span class="st0">&quot;Feedfetcher-Google&quot;</span><span class="sy0">,</span> <span class="st0">&quot;Mediapartners-Google&quot;</span><span class="sy0">,</span> <span class="st0">&quot;Slurp&quot;</span><span class="sy0">,</span> <span class="st0">&quot;Baiduspider&quot;</span><span class="sy0">,</span> <span class="st0">&quot;msnbot&quot;</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">$bot_list</span> <span class="kw1">as</span> <span class="re1">$bot</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">if</span><span class="br0">&#40;</span><span class="kw3">strpos</span><span class="br0">&#40;</span><span class="kw3">strtolower</span><span class="br0">&#40;</span><span class="st0">&quot;x&quot;</span><span class="sy0">.</span><span class="re1">$_SERVER</span><span class="br0">&#91;</span><span class="st0">&#39;HTTP_USER_AGENT&#39;</span><span class="br0">&#93;</span><span class="br0">&#41;</span><span class="sy0">,</span> <span class="kw3">strtolower</span><span class="br0">&#40;</span><span class="re1">$bot</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">&gt;</span><span class="nu0">0</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="kw1">foreach</span><span class="br0">&#40;</span><span class="re1">$bot_allowed</span> <span class="kw1">as</span> <span class="re1">$okbot</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="re1">$okbot</span><span class="sy0">==</span><span class="re1">$bot</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="kw3">define</span><span class="br0">&#40;</span><span class="st0">&quot;IS_A_BAD_BOT&quot;</span><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; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &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; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw3">define</span><span class="br0">&#40;</span><span class="st0">&quot;IS_A_BAD_BOT&quot;</span><span class="sy0">,</span> <span class="kw2">true</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">return</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; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">define</span><span class="br0">&#40;</span><span class="st0">&quot;IS_A_BAD_BOT&quot;</span><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; &nbsp; <span class="kw1">return</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>In templates and functions i can use some simple code to run stuff conditional :</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="kw3">defined</span><span class="br0">&#40;</span><span class="st0">&#39;IS_A_BAD_BOT&#39;</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;<span class="kw1">if</span><span class="br0">&#40;</span>IS_A_BAD_BOT<span class="br0">&#41;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;hi bot&lt;br /&gt;&quot;</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; &nbsp; &nbsp; run_time_consuming_overhead_tasks<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; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; and_omit_the_sidebar<span class="br0">&#40;</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> <span class="kw1">else</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw3">echo</span> <span class="st0">&quot;hello wonderful visitor&lt;br /&gt;&quot;</span><span class="sy0">;</span> </div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="br0">&#125;</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="co1">//if it is not defined it is not a bot or the function ain&#39;t present, </span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//I am lazy and sloppy and don&#39;t want a code-break</span></div>
</li>
</ol>
</div>
<p>It would be nice if Wordpress built in a switch to run plugins conditional.</p>
<p><em>one related smart plugin is the <a href="http://indiafascinates.com/chennai/chennaicentral/">chennai central</a> plugin that sends 304 not modified headers on conditional GETs, so crawlers don&#8217;t fetch the page. That can save some bandwidth and serverload.<br />
</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.juust.org/index.php/spot-a-bot/2009/09/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
	</channel>
</rss>
