<?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; xml-rpc</title>
	<atom:link href="http://www.juust.org/index.php/category/xml-rpc/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>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>wordpress xmlrpc and microsoft access vba</title>
		<link>http://www.juust.org/index.php/wordpress-xmlrpc-and-microsoft-access-vba/2009/10/</link>
		<comments>http://www.juust.org/index.php/wordpress-xmlrpc-and-microsoft-access-vba/2009/10/#comments</comments>
		<pubDate>Mon, 19 Oct 2009 13:05:25 +0000</pubDate>
		<dc:creator>juust</dc:creator>
				<category><![CDATA[juust]]></category>
		<category><![CDATA[xml-rpc]]></category>
		<category><![CDATA[xhr]]></category>

		<guid isPermaLink="false">http://www.juust.org/?p=972</guid>
		<description><![CDATA[I was building a database in Wordpress but their table interface lacks completely and I dont want to spend 200 hours developing a backend for a once-off project. 
I always used MsAccess for RAD blueprinting and I reckon you can build a better more flexible interface in 20 hours. With XHR MsAccess has some better [...]]]></description>
			<content:encoded><![CDATA[<p>I was building a database in Wordpress but their table interface lacks completely and I dont want to spend 200 hours developing a backend for a once-off project. </p>
<p>I always used MsAccess for RAD blueprinting and I reckon you can build a better more flexible interface in 20 hours. With XHR MsAccess has some better internet capabilities these days, a nice simple XMLHttp library. </p>
<p>You can use it for any http rest api in the cloud. </p>
<p>Ajax for Access :) here&#8217;s the most basic wordpress xml-rpc call, sayHello.</p>
<div class="geshi no vb">
<ol>
<li class="li1">
<div class="de1"><span class="kw1">Sub</span> PutXML<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://www.blog.com/xmlrpc.php&quot;</span></div>
</li>
<li class="li1">
<div class="de1">txtUserName = <span class="st0">&quot;user&quot;</span></div>
</li>
<li class="li1">
<div class="de1">txtPassword = <span class="st0">&quot;pwd&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; strT = <span class="st0">&quot;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; strT = strT &amp; <span class="st0">&quot;&lt;methodcall&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; strT = strT &amp; <span class="st0">&quot;&lt;methodname&gt;demo.sayHello&lt;/methodname&gt;&quot;</span></div>
</li>
<li class="li1">
<div class="de1">&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">&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">&nbsp; <span class="kw1">MsgBox</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>
<p>For pre-Vista you need the MSXML 6.0 library from microsoft, in Vista I already had it installed so you can add a reference to the library and off you go.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.juust.org/index.php/wordpress-xmlrpc-and-microsoft-access-vba/2009/10/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>a social spider</title>
		<link>http://www.juust.org/index.php/a-social-spider/2009/01/</link>
		<comments>http://www.juust.org/index.php/a-social-spider/2009/01/#comments</comments>
		<pubDate>Sat, 24 Jan 2009 04:10:22 +0000</pubDate>
		<dc:creator>juust</dc:creator>
				<category><![CDATA[wordpress]]></category>
		<category><![CDATA[xml-rpc]]></category>

		<guid isPermaLink="false">http://www.juust.org/?p=310</guid>
		<description><![CDATA[I was reading about the BloGee project and some other stuff and then I thought &#8220;how much trouble would it be writing a Wordpress plugin to do some basic &#8217;social spidering&#8217;&#8221;. BloGee is about a micro-content format and that&#8217;s a bit out of my scope. 
I want a simple &#8217;social&#8217; spider for Wordpress so I [...]]]></description>
			<content:encoded><![CDATA[<p>I was reading about the BloGee project and some other stuff and then I thought &#8220;how much trouble would it be writing a Wordpress plugin to do some basic &#8217;social spidering&#8217;&#8221;. BloGee is about a micro-content format and that&#8217;s a bit out of my scope. </p>
<p>I want a simple &#8217;social&#8217; spider for Wordpress so I am going to take some functions of simpleTags and add them to the Wordpress xml-rpc server methods, to get some basic functionality I can call upon through the xml-rpc endpoint. </p>
<p>I don&#8217;t know if I mentioned that, adding methods to Wordpress XML-RPC differs from the straight forward use of Incutio because Wordpress uses its own filter/hook system, the actual IXR_Server instance is made and managed by Wordpress itself.</p>
<p>I hence don&#8217;t use the </p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1"><span class="kw2">class</span> PeekAtYouServer <span class="kw2">extends</span> IXR_Server <span class="br0">&#123;</span></div>
</li>
</ol>
</div>
<p>style class instancing,  in stead I make a class where I hook the function I would normally hand to the IXR_Server as callback into wordpress by adding method/callback to the &#8216;xmlrpc_methods&#8217; filter array. </p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">class</span> PeekAtYouServer <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">function</span> PeekAtYouServer<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="co1">// &nbsp;add callbacks as methods to the array (filter) xmlrpc_methods </span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;add_filter<span class="br0">&#40;</span><span class="st0">&#39;xmlrpc_methods&#39;</span><span class="sy0">,</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="sy0">&amp;</span><span class="re1">$this</span><span class="sy0">,</span> <span class="st0">&#39;filterXmlrpcMethods&#39;</span><span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp;* Here I connect the methodName pay.PeekAtYou to a custom function</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp;*</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp;* This is the array that is added (as pair) to the xmlrpc_methods filter</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp;**/</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">function</span> filterXmlrpcMethods<span class="br0">&#40;</span><span class="sy0">&amp;</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;pay.PeekAtYou&#39;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="sy0">&amp;</span><span class="re1">$this</span><span class="sy0">,</span> <span class="st0">&#39;onXmlRpcpayPeekAtYou&#39;</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="re1">$methods</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp;* the custom function used as callback for pay.PeekAtYou</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; &nbsp;**/</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw2">function</span> onXmlRpcpayPeekAtYou<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; <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">//grab posts</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$sql</span> <span class="sy0">=</span> <span class="st0">&quot;SELECT ID, post_title FROM &quot;</span> <span class="sy0">.</span> <span class="re1">$wpdb</span><span class="sy0">-&gt;</span><span class="me1">posts</span> <span class="sy0">.</span> <span class="st0">&quot; WHERE post_status = &#39;publish&#39;&quot;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$posts</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="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//cycle through all posts and grab the IDs</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="re1">$result</span> <span class="sy0">=</span> <span class="kw3">array</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span><span class="sy0">!</span><span class="kw3">empty</span><span class="br0">&#40;</span><span class="re1">$posts</span><span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="kw1">foreach</span> <span class="br0">&#40;</span><span class="re1">$posts</span> <span class="kw1">as</span> <span class="re1">$post</span><span class="br0">&#41;</span> <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">postids</span><span class="br0">&#91;</span><span class="br0">&#93;</span> <span class="sy0">=</span> <span class="re1">$post</span><span class="sy0">-&gt;</span><span class="me1">ID</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//I got all the ids in an array, </span></div>
</li>
<li class="li1">
<div class="de1"><span class="co1">//now I grab the tags (query is from the simpleTags plugin)</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp;<span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">getTagsFromCurrentPosts</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; <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; &nbsp;<span class="kw1">return</span> <span class="kw2">new</span> IXR_Error<span class="br0">&#40;</span><span class="nu0">404</span><span class="sy0">,</span> <span class="st0">&#39;no posts for the selected criterium.&#39;</span><span class="br0">&#41;</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; &nbsp; <span class="kw1">return</span> <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">tags_currentposts</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="coMULTI">/**</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; * Get tags from current post views</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; * (SimpleTags plugin)</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; * @return boolean</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp; */</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="kw2">function</span> getTagsFromCurrentPosts<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">if</span> <span class="br0">&#40;</span> <span class="kw3">is_array</span><span class="br0">&#40;</span><span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">postids</span><span class="br0">&#41;</span> <span class="sy0">&amp;&amp;</span> <span class="kw3">count</span><span class="br0">&#40;</span><span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">postids</span><span class="br0">&#41;</span> <span class="sy0">&gt;</span> <span class="nu0">0</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;<span class="co1">// Generate SQL from post id</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="re1">$postlist</span> <span class="sy0">=</span> <span class="kw3">implode</span><span class="br0">&#40;</span> <span class="st0">&quot;&#39;, &#39;&quot;</span><span class="sy0">,</span> <span class="re1">$this</span><span class="sy0">-&gt;</span><span class="me1">postids</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;</div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">global</span> <span class="re1">$wpdb</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="re1">$results</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="st0">&quot;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp;SELECT t.name AS name, t.term_id AS term_id, tt.count AS count</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp;FROM {$wpdb-&gt;term_relationships} AS tr</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp;INNER JOIN {$wpdb-&gt;term_taxonomy} AS tt ON (tr.term_taxonomy_id = tt.term_taxonomy_id)</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp;INNER JOIN {$wpdb-&gt;terms} AS t ON (tt.term_id = t.term_id)</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp;WHERE tt.taxonomy = &#39;post_tag&#39;</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp;AND ( tr.object_id IN (&#39;{$postlist}&#39;) )</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp;GROUP BY t.term_id</span></div>
</li>
<li class="li1">
<div class="de1"><span class="st0"> &nbsp; &nbsp;ORDER BY tt.count DESC&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">$this</span><span class="sy0">-&gt;</span><span class="me1">tags_currentposts</span> <span class="sy0">=</span> <span class="re1">$results</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp;<span class="kw3">unset</span><span class="br0">&#40;</span><span class="re1">$results</span><span class="sy0">,</span> <span class="re1">$key</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; <span class="kw1">return</span> <span class="kw2">true</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="br0">&#125;</span></div>
</li>
</ol>
</div>
<p>I saved the file as PeekAtYouServer.class.php. </p>
<p>Now I need a simple file for Wordpress to &#8217;spot the plugin&#8217;, so I can activate it and make the class instance, that adds the custom method and callback function.</p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1">&nbsp;<span class="coMULTI">/*</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;Plugin Name: PeekAtYou XMLRPC Server</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;Plugin URI: http://www.juust.org/</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;Description: Adds Social Spidering to your blog</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;Author: juust</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;Author URI: http://www.juust.org/</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;License: GPL</span></div>
</li>
<li class="li1">
<div class="de1"><span class="coMULTI">&nbsp;Version: 1.1</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">&nbsp;<span class="kw1">require_once</span> <span class="st0">&#39;PeekAtYouServer.class.php&#39;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re1">$PeekAtYouServer</span> <span class="sy0">=</span> <span class="kw2">new</span> PeekAtYouServer<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
</ol>
</div>
<p>I save that as PeekAtYouServer.php and upload the lot to a directory /wp-plugins/pay-xmlrpc-server.</p>
<p>In the Plugin screen (wp 2.5) I can activate the plugin, and then make a call to the xmlrpc-endpoint of the blog using <strong>pay.PeekAtYou</strong> as methodName. </p>
<div class="geshi no php">
<ol>
<li class="li1">
<div class="de1">&nbsp;<span class="kw1">include</span><span class="br0">&#40;</span><span class="st0">&#39;wp-includes/class-IXR.php&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp; &nbsp; &nbsp; &nbsp; <span class="re1">$client</span> <span class="sy0">=</span> <span class="kw2">new</span> IXR_Client<span class="br0">&#40;</span><span class="st0">&#39;http://www.juust.org/xmlrpc.php&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re1">$client</span><span class="sy0">-&gt;</span><span class="me1">query</span><span class="br0">&#40;</span><span class="st0">&#39;pay.PeekAtYou&#39;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
<li class="li1">
<div class="de1">&nbsp;<span class="re1">$response</span> <span class="sy0">=</span> <span class="sy0">&amp;</span><span class="re1">$client</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;<span class="kw3">print_r</span><span class="br0">&#40;</span> <span class="re1">$response</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</li>
</ol>
</div>
<p>That returns all tags the blog uses. </p>
<p>Next week : adding some basic social blog-spider functions. </p>
]]></content:encoded>
			<wfw:commentRss>http://www.juust.org/index.php/a-social-spider/2009/01/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
