<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta content="text/html; charset=UTF-8" http-equiv="Content-Type" />
    <title></title>
  </head>

  <body>
    <p style="margin: 0px;">Tim,</p>

    <p style="margin: 0px;">&#160;</p>

    <p style="margin: 0px;">I haven&#39;t worked specifically with struct datatypes (in reality, most of the time I just build my own procedure on the server I&#39;m working with) ... but the documentation says you can use them.</p>

    <p style="margin: 0px;">&#160;</p>

    <p style="margin: 0px;">Here&#39;s the full documentation for the IXR library if you want to take a crack at it: http://scripts.incutio.com/xmlrpc/manual.php&#160; Just be sure to post your solution here so we can all learn from you :-)</p>

    <p style="margin: 0px;">&#160;</p>

    <p style="margin: 0px;">~Eric<span></span></p>

    <p>&#160;</p>

    <div style="margin: 5px 0px 5px 0px; font-family: monospace;">
      On June 15, 2010 at 7:20 PM Tim Golen &lt;tim@golen.net&gt; wrote:<br />
      <br />
      &gt; Thanks Eric! How did you handle the areguments with struct datatypes like<br />
      &gt; for creating a new category? Do you just pass in a array with key=&gt;val pairs<br />
      &gt; or do you have to do special encoding?<br />
      &gt;<br />
      &gt; Tim<br />
      &gt;<br />
      &gt; On Tue, Jun 15, 2010 at 1:06 PM, eric@eamann.com &lt;eric@eamann.com&gt; wrote:<br />
      &gt;<br />
      &gt; &gt;&#160; OK, now I understand what you&#39;re doing.<br />
      &gt; &gt;<br />
      &gt; &gt;<br />
      &gt; &gt;<br />
      &gt; &gt; When I first started working with WordPress and XMLRPC, I tried building my<br />
      &gt; &gt; own library ... it was taking a long time, and I ran into many of the issues<br />
      &gt; &gt; you&#39;re running in to now.&#160; Someone suggested I use the built-in IXR library<br />
      &gt; &gt; instead, and it made all the difference.<br />
      &gt; &gt;<br />
      &gt; &gt;<br />
      &gt; &gt;<br />
      &gt; &gt; Here&#39;s a simple example:<br />
      &gt; &gt;<br />
      &gt; &gt;<br />
      &gt; &gt;<br />
      &gt; &gt; include_once(ABSPATH . WPINC . &#39;/class-IXR.php&#39;);<br />
      &gt; &gt;<br />
      &gt; &gt;<br />
      &gt; &gt;<br />
      &gt; &gt; $client = new IXR_Client(&#39;destinantion_url&#39;);<br />
      &gt; &gt;<br />
      &gt; &gt;<br />
      &gt; &gt;<br />
      &gt; &gt; $client-&gt;query(&#39;procedure.name&#39;, &#39;arg1&#39;, &#39;arg2&#39;, &#39;arg3&#39;, ...);<br />
      &gt; &gt;<br />
      &gt; &gt;<br />
      &gt; &gt;<br />
      &gt; &gt; $response = $client-&gt;getResponse();<br />
      &gt; &gt;<br />
      &gt; &gt;<br />
      &gt; &gt;<br />
      &gt; &gt; That will load the library, create a new client pointing at whatever WP<br />
      &gt; &gt; installation you&#39;re working with, execute your remote procedure, and store<br />
      &gt; &gt; the response (errors, data, or whatever) in the $response variable.<br />
      &gt; &gt;<br />
      &gt; &gt;<br />
      &gt; &gt;<br />
      &gt; &gt;<br />
      &gt; &gt;&#160; On June 15, 2010 at 6:51 PM Tim Golen &lt;tim@golen.net&gt; wrote:<br />
      &gt; &gt;<br />
      &gt; &gt; &gt; Hi Joseph,<br />
      &gt; &gt; &gt;<br />
      &gt; &gt; &gt; Right on, that&#39;s exactly what I needed to know.<br />
      &gt; &gt; &gt;<br />
      &gt; &gt; &gt; I&#39;ve been using http://devzone.zend.com/article/1307 for the XML-RPC<br />
      &gt; &gt; (lower<br />
      &gt; &gt; &gt; level) API, and then building my own PHP library on top of that (with the<br />
      &gt; &gt; &gt; Wordpress functions). I&#39;ll go and check out the IXR library to see if<br />
      &gt; &gt; that<br />
      &gt; &gt; &gt; helps.<br />
      &gt; &gt; &gt;<br />
      &gt; &gt; &gt; All of the calls that I am making that pull data from Wordpress are<br />
      &gt; &gt; working<br />
      &gt; &gt; &gt; fine. It&#39;s just when trying to create data (wp.newComment,<br />
      &gt; &gt; wp.newCategory,<br />
      &gt; &gt; &gt; metaWeblog.newPost) they are all giving me similar data errors:<br />
      &gt; &gt; &gt;<br />
      &gt; &gt; &gt; Sorry, the new category failed.<br />
      &gt; &gt; &gt;<br />
      &gt; &gt; &gt; Invalid Data: Please go back and try again.<br />
      &gt; &gt; &gt;<br />
      &gt; &gt; &gt; Content, title, and excerpt are empty.<br />
      &gt; &gt; &gt;<br />
      &gt; &gt; &gt; I&#39;ve been debugging the thing to death and still can&#39;t get any closer. I<br />
      &gt; &gt; &gt; have a feeling that it has something to do with how the struct datatypes<br />
      &gt; &gt; are<br />
      &gt; &gt; &gt; being encoded in the XML-RPC portion. Here is a sample of my code:<br />
      &gt; &gt; &gt;<br />
      &gt; &gt; &gt;<br />
      &gt; &gt; &gt; $this-&gt;makeRequest(<br />
      &gt; &gt; &gt; &#39;wp.newComment&#39;,<br />
      &gt; &gt; &gt; array(<br />
      &gt; &gt; &gt; new xmlrpcval($blogId),<br />
      &gt; &gt; &gt; new xmlrpcval($this-&gt;username),<br />
      &gt; &gt; &gt; new xmlrpcval($this-&gt;password),<br />
      &gt; &gt; &gt; new xmlrpcval($postId),<br />
      &gt; &gt; &gt; xmlrpc_encode(array(<br />
      &gt; &gt; &gt; &#39;comment_parent&#39;=&gt;intval(0),<br />
      &gt; &gt; &gt; &#39;content&#39;=&gt;strval($comment-&gt;content),<br />
      &gt; &gt; &gt; &#39;author&#39;=&gt;strval($comment-&gt;author),<br />
      &gt; &gt; &gt; &#39;author_url&#39;=&gt;strval($comment-&gt;author_url),<br />
      &gt; &gt; &gt; &#39;author_email&#39;=&gt;strval($comment-&gt;author_email)<br />
      &gt; &gt; &gt; )),<br />
      &gt; &gt; &gt; ));<br />
      &gt; &gt; &gt;<br />
      &gt; &gt; &gt; The structure containing the comment information ends up being encoded to<br />
      &gt; &gt; &gt; this:<br />
      &gt; &gt; &gt;<br />
      &gt; &gt; &gt; &lt;params&gt;<br />
      &gt; &gt; &gt; &lt;param&gt;<br />
      &gt; &gt; &gt;&#160; &lt;value&gt;<br />
      &gt; &gt; &gt;&#160; &#160;&lt;struct&gt;<br />
      &gt; &gt; &gt;&#160; &#160; &lt;member&gt;<br />
      &gt; &gt; &gt;&#160; &#160; &#160;&lt;name&gt;comment_parent&lt;/name&gt;<br />
      &gt; &gt; &gt;&#160; &#160; &#160;&lt;value&gt;<br />
      &gt; &gt; &gt;&#160; &#160; &#160; &lt;int&gt;0&lt;/int&gt;<br />
      &gt; &gt; &gt;<br />
      &gt; &gt; &gt;&#160; &#160; &#160;&lt;/value&gt;<br />
      &gt; &gt; &gt;&#160; &#160; &lt;/member&gt;<br />
      &gt; &gt; &gt;&#160; &#160; &lt;member&gt;<br />
      &gt; &gt; &gt;&#160; &#160; &#160;&lt;name&gt;content&lt;/name&gt;<br />
      &gt; &gt; &gt;&#160; &#160; &#160;&lt;value&gt;<br />
      &gt; &gt; &gt;&#160; &#160; &#160; &lt;string&gt;comment&lt;/string&gt;<br />
      &gt; &gt; &gt;&#160; &#160; &#160;&lt;/value&gt;<br />
      &gt; &gt; &gt;&#160; &#160; &lt;/member&gt;<br />
      &gt; &gt; &gt;<br />
      &gt; &gt; &gt;&#160; &#160; &lt;member&gt;<br />
      &gt; &gt; &gt;&#160; &#160; &#160;&lt;name&gt;author&lt;/name&gt;<br />
      &gt; &gt; &gt;&#160; &#160; &#160;&lt;value&gt;<br />
      &gt; &gt; &gt;&#160; &#160; &#160; &lt;string&gt;Tim&lt;/string&gt;<br />
      &gt; &gt; &gt;&#160; &#160; &#160;&lt;/value&gt;<br />
      &gt; &gt; &gt;&#160; &#160; &lt;/member&gt;<br />
      &gt; &gt; &gt;&#160; &#160; &lt;member&gt;<br />
      &gt; &gt; &gt;&#160; &#160; &#160;&lt;name&gt;author_url&lt;/name&gt;<br />
      &gt; &gt; &gt;<br />
      &gt; &gt; &gt;&#160; &#160; &#160;&lt;value&gt;<br />
      &gt; &gt; &gt;&#160; &#160; &#160; &lt;string&gt;http://www.golen.net/blog&lt;/string&gt;<br />
      &gt; &gt; &gt;&#160; &#160; &#160;&lt;/value&gt;<br />
      &gt; &gt; &gt;&#160; &#160; &lt;/member&gt;<br />
      &gt; &gt; &gt;&#160; &#160; &lt;member&gt;<br />
      &gt; &gt; &gt;&#160; &#160; &#160;&lt;name&gt;author_email&lt;/name&gt;<br />
      &gt; &gt; &gt;&#160; &#160; &#160;&lt;value&gt;<br />
      &gt; &gt; &gt;&#160; &#160; &#160; &lt;string&gt;tim@golen.net&lt;/string&gt;<br />
      &gt; &gt; &gt;<br />
      &gt; &gt; &gt;&#160; &#160; &#160;&lt;/value&gt;<br />
      &gt; &gt; &gt;&#160; &#160; &lt;/member&gt;<br />
      &gt; &gt; &gt;&#160; &#160;&lt;/struct&gt;<br />
      &gt; &gt; &gt;&#160; &lt;/value&gt;<br />
      &gt; &gt; &gt; &lt;/param&gt;<br />
      &gt; &gt; &gt; &lt;/params&gt;<br />
      &gt; &gt; &gt;<br />
      &gt; &gt; &gt;<br />
      &gt; &gt; &gt; And all that is encoded the way they discuss it at<br />
      &gt; &gt; &gt; http://devzone.zend.com/article/1307. I&#39;ll take a look at the IXR<br />
      &gt; &gt; library<br />
      &gt; &gt; &gt; and see if that does any better of a job. I appreciate all of your help<br />
      &gt; &gt; and<br />
      &gt; &gt; &gt; suggestions with this! Once I get the PHP library built, I think it would<br />
      &gt; &gt; be<br />
      &gt; &gt; &gt; an invaluable resource to post on the Wordpress site somewhere.<br />
      &gt; &gt; &gt;<br />
      &gt; &gt; &gt; Tim<br />
      &gt; &gt; &gt;<br />
      &gt; &gt; &gt; On Tue, Jun 15, 2010 at 12:37 PM, Joseph Scott &lt;joseph@josephscott.org<br />
      &gt; &gt; &gt;wrote:<br />
      &gt; &gt; &gt;<br />
      &gt; &gt; &gt; &gt; There are 2 different &quot;levels&quot; of libraries for the the WP XML-RPC<br />
      &gt; &gt; &gt; &gt; APIs.&#160; First, lower level XML-RPC only APIs.&#160; These take care of all<br />
      &gt; &gt; &gt; &gt; the XML-RPC work, but don&#39;t know anything about the specific methods<br />
      &gt; &gt; &gt; &gt; that WordPress provides.&#160; For that layer I recommend the PHP IXR<br />
      &gt; &gt; &gt; &gt; library, which is what WordPress uses.<br />
      &gt; &gt; &gt; &gt;<br />
      &gt; &gt; &gt; &gt; The next level up are libraries both take care of the XML-RPC details<br />
      &gt; &gt; &gt; &gt; and know about the various methods that WP exposes.&#160; I&#39;ve seen some<br />
      &gt; &gt; &gt; &gt; Perl libraries that fit into this category, but I haven&#39;t seen much in<br />
      &gt; &gt; &gt; &gt; the of PHP ones.<br />
      &gt; &gt; &gt; &gt;<br />
      &gt; &gt; &gt; &gt; On Tue, Jun 15, 2010 at 11:51 AM, Tim Golen &lt;tim@golen.net&gt; wrote:<br />
      &gt; &gt; &gt; &gt; &gt; Is there already an existing PHP library for the Wordpress API? I&#39;m<br />
      &gt; &gt; still<br />
      &gt; &gt; &gt; &gt; &gt; running into problems and don&#39;t need to reinvent the wheel if it&#39;s<br />
      &gt; &gt; &gt; &gt; already<br />
      &gt; &gt; &gt; &gt; &gt; been done. The MetaWeblog API mentions a PHP library, but it comes up<br />
      &gt; &gt; &gt; &gt; with a<br />
      &gt; &gt; &gt; &gt; &gt; 404 error, and the MetaWeblog site hasn&#39;t been updated since 2003.<br />
      &gt; &gt; &gt; &gt; &gt; Errors like &quot;Invalid Data: Please go back and try again.&quot; when trying<br />
      &gt; &gt; to<br />
      &gt; &gt; &gt; &gt; do<br />
      &gt; &gt; &gt; &gt; &gt; something rather simple like create a comment can get really<br />
      &gt; &gt; frustrating.<br />
      &gt; &gt; &gt; &gt;<br />
      &gt; &gt; &gt; &gt;<br />
      &gt; &gt; &gt; &gt;<br />
      &gt; &gt; &gt; &gt; --<br />
      &gt; &gt; &gt; &gt; Joseph Scott<br />
      &gt; &gt; &gt; &gt; joseph@josephscott.org<br />
      &gt; &gt; &gt; &gt; http://josephscott.org/<br />
      &gt; &gt; &gt; &gt; _______________________________________________<br />
      &gt; &gt; &gt; &gt; wp-xmlrpc mailing list<br />
      &gt; &gt; &gt; &gt; wp-xmlrpc@lists.automattic.com<br />
      &gt; &gt; &gt; &gt; http://lists.automattic.com/mailman/listinfo/wp-xmlrpc<br />
      &gt; &gt; &gt; &gt;<br />
      &gt; &gt;<br />
      &gt; &gt; _______________________________________________<br />
      &gt; &gt; wp-xmlrpc mailing list<br />
      &gt; &gt; wp-xmlrpc@lists.automattic.com<br />
      &gt; &gt; http://lists.automattic.com/mailman/listinfo/wp-xmlrpc<br />
      &gt; &gt;<br />
      &gt; &gt;<br />
    </div>
  </body>
</html>