XML-RPC Help

All,

Was needing to write to ISP and index into Joomla and WordPress for several sites. Originally opened thread:

I found the XML-RPC code libraries and it seems to be the answer to my problem. I downloaded the ‘IXR_Library.php’ library from:

http://scripts.incutio.com/xmlrpc/

Installed and tweaked. Ran this sample test code:

<?php
   echo "Beginning the process! <br>";
   include ('IXR_Library.php');
   $url_lnk = 'http://mysite.com/xmlrpc.php';
   $uid_val = 'myuser';
   $pwd_val = 'mypwd';
   $title="XML-RPC Test Page - Test Draft Entry";
   $body="Some test text.";
   $catg="Uncategorized";
   $client = new IXR_Client($url_lnk);
   if (!$client->query('wp.getCategories','', $uid_val,$pwd_val)) {
      die ('An error occurred - '.$client->getErrorCode().":".
             $client->getErrorMessage());
   }
   $res = $client->getResponse();
   $content = array('title'=>$title,
                  'description'=>"$body<p>Hello World!</p>",
            'mt_allow_comments'=>0,  // 1 to allow comments
            'mt_allow_pings'=>0,  // 1 to allow trackbacks
            'post_type'=>'page',
            'post_parent'=>52,
            'mt_keywords'=>$keywords,
            'categories'=>$catg);
   if (!$client->query('metaWeblog.newPost','',$uid_val,$pwd_val,$content, false)) {
      die('An error occurred - '.$client->getErrorCode().":".$client->getErrorMessage());
   }
   $res = $client->getResponse();    //with Wordpress, will report the ID of the new post
   echo "Process Ended! <br>";
?>

which ran fine.

I then put this into my other code as a function of:

   function put_wp_xml($parm_ray) {
      // Called from line 1185
      $url = $parm_ray['L'];
      $uid = $parm_ray['U'];
      $pwd = $parm_ray['P'];
      $bod = $parm_ray['B'];
      include_once('IXR_Library.php');
      $client = new IXR_Client($url);
      $client->debug = true;
      if (!$client->query('wp.getCategories','', $uid,$pwd)) {
     die ('An error occurred - '.$client->getErrorCode().":".
          $client->getErrorMessage());
      }
      $res = $client->getResponse();
      $cot = array ('title'=>$parm_ray['T'],
                 'description'=>$parm_ray['B'],       // Content/Article
            'mt_allow_comments'=>$parm_ray['M'], // 1 to allow comments
            'mt_allow_pings'=>$parm_ray['G'],    // 1 to allow trackbacks
            'post_type'=>$parm_ray['Y'],         // Type = Post or Page
            'post_parent'=>$parm_ray['I'],       // Parent ID for subpage
            'mt_keywords'=>$parm_ray['K'],       // Keyword Array
            'categories'=>$parm_ray['C']);       // Category Array
      if (!$client->query('metaWeblog.newPost','',$uid,$pwd,$cot, false)) {
     die ("An error occurred - ".$client->getErrorCode().
          ":".$client->getErrorMessage());
      }
      $res = $client->getResponse();    //with Wordpress, will report the ID of the new post
   }        // end function

and call it with:

         foreach ($fls as $file) {        // loop through the files
            $lines   = file($file);
            $fil_lns = "";
            foreach ($lines as $lval) {
               //$fil_lns .= $lval."\
";
               $fil_lns .= htmlspecialchars($lval);
            }  // end foreach $lines
            $row_val = $row_lin[$n];
        $url_sit = $row_val['seo_site'];
        $url_lnk = $row_val['seo_thst'];
        $uid_val = $row_val['seo_tuid'];
        $pwd_val = $row_val['seo_tpwd'];
            if (strpos($url_lnk,'abcarz')) { continue; }
        $title   = get_title($file);
        $catg    = "Uncategorized";
        //$body="Some test text.";
            $put_lin = array (L=>$url_lnk,U=>$uid_val,P=>$pwd_val,
                          T=>$title,B=>$fil_lns,M=>0,G=>0,Y=>'page',
                              I=>'',K=>'',C=>$catg);
        $rc = put_wp_xml($put_lin);
            $x++;
            if ($x==$lm) { break; }        // Break on file limit
         }  // end foreach

Originally I did not have the nested “foreach loop”, so was only getting the filename transferred. When I added the nested foreach loop to get the file contents, I started getting this error:

An error occurred - -32700:parse error. not well formed

I’ve searched around for help on this error and as of now have nothing.

Hope someone can help with insite to this.

Thanks!

OMR

All,

Ah but what I found is this code resolves, when I feed my source to this function:

   function xml_entities($text, $charset = 'Windows-1252'){
      $text = htmlentities($text, ENT_COMPAT, $charset, false); // Encode html chars
      $arr_xml_special_char = array ("&quot;","&amp;","&apos;",
                           "<",">");
      $arr_xml_special_char_regex = "(?";                       // Build the regex
      foreach($arr_xml_special_char as $key => $value){
         $arr_xml_special_char_regex .= "(?!$value)";
      }
      $arr_xml_special_char_regex .= ")";
      $pattern = "/$arr_xml_special_char_regex&(".
               "[a-zA-Z0-9]+;)/";                             // Scan for non XML
      $replacement = '&amp;${1}';                               // Replace non XML
      return preg_replace($pattern, $replacement, $text);
   }  // end function

and I can even fix with this abbreviated function of:

   function fix_xml ($text, $charset = 'Windows-1252'){
      $text = htmlentities($text, ENT_COMPAT, $charset, false); // Encode html chars
      //$text = htmlspecialchars($text, ENT_COMPAT, $charset, false); // Encode html chars
      return $text;
   }  // end function

I tried fixing it with just the “htmlspecialchars” but still get the errors and when the code/context from this is submitted to WordPress all the html formatting is lost, and it must be maintained.

Appears I am looking only to convert specific HTML codes to their “&xxx;” equivalents. Any ideas on which codes actually need converting to meet the XML formatting rules?

Thanks!

OMR

You want urlencode
http://www.php.net/manual/en/function.urlencode.php

All,

Also wrote this up at:

and now down to just finding the “Decode” option in the wp.xml-rpc library that envokes the

“html_entity_decode()”

PHP function to restore the encoded HTML. Since XML requires the encoding or it errors, I’m sure the WP programmers did not overlook this option, so just need to know what it is and how to call it so my code is right once uploaded.

If you know this option, please post ASAP!

Thanks!

OMR