OldManRiver Posted October 28, 2010 Share Posted October 28, 2010 All, Was needing to write to ISP and index into Joomla and WordPress for several sites. Originally opened thread: http://www.phpfreaks.com/forums/index.php/topic,313496.0.html 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."\n"; $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 Quote Link to comment https://forums.phpfreaks.com/topic/217093-xml-rpc-help/ Share on other sites More sharing options...
JonnoTheDev Posted October 28, 2010 Share Posted October 28, 2010 Badly formed XML. XML is strict unlike HTML. Any syntax error within a XML document will cause any parser to have a fit. Quote Link to comment https://forums.phpfreaks.com/topic/217093-xml-rpc-help/#findComment-1127520 Share on other sites More sharing options...
OldManRiver Posted October 28, 2010 Author Share Posted October 28, 2010 Neil, Please be specific. I found one post, searching google, that says this is due to the content containing the '#' symbol, so wrote this function: function fix_pound($myline) { $q_idx = 0; $q_pos = strpos($myline,"#",$q_idx); while ($q_pos) { $f_str = substr($myline,0,$q_pos); $e_str = substr($myline,$q_pos); $myline = $f_str.trim("\ ").$e_str; $q_idx = $q_pos; $q_pos = strpos($myline,"#",$q_idx+2); } return $myline; } // end function but still get the error. When I set the content value blank or to a fixed string I hand enter it works fine so know it is not a server parse error, which some posts I found suggested. Just need to understand all the special characters the XML parser blows on. Thanks! OMR Quote Link to comment https://forums.phpfreaks.com/topic/217093-xml-rpc-help/#findComment-1127628 Share on other sites More sharing options...
JonnoTheDev Posted October 28, 2010 Share Posted October 28, 2010 Display the xml on screen and exit prior to parsing. Then we can look at the formatting. Quote Link to comment https://forums.phpfreaks.com/topic/217093-xml-rpc-help/#findComment-1127788 Share on other sites More sharing options...
OldManRiver Posted November 1, 2010 Author Share Posted November 1, 2010 Display the xml on screen and exit prior to parsing. Then we can look at the formatting. Neil, Ah yes you mean add the "debug" line like so: $client = new IXR_Client($url); $client->debug = true; 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 (""","&","'", "<",">"); $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 = '&${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 Quote Link to comment https://forums.phpfreaks.com/topic/217093-xml-rpc-help/#findComment-1129057 Share on other sites More sharing options...
JonnoTheDev Posted November 2, 2010 Share Posted November 2, 2010 If you are putting HTML into XML you should enclose it within CDATA. This will tell the parser not to try and parse it as the HTML contains elements that are seen as XML such as < > or invalid characters such as &. http://www.w3schools.com/xml/xml_cdata.asp There is no need to try and convert any entities if you do this. Quote Link to comment https://forums.phpfreaks.com/topic/217093-xml-rpc-help/#findComment-1129355 Share on other sites More sharing options...
OldManRiver Posted November 2, 2010 Author Share Posted November 2, 2010 If you are putting HTML into XML you should enclose it within CDATA. This will tell the parser not to try and parse it as the HTML contains elements that are seen as XML such as < > or invalid characters such as &. http://www.w3schools.com/xml/xml_cdata.asp There is no need to try and convert any entities if you do this. Neil, There might be a easier way. If WordPress has an XML-RPC option to decode my HTML, then encoding is fine. I'm looking to see if that option exists; it should. OMR Quote Link to comment https://forums.phpfreaks.com/topic/217093-xml-rpc-help/#findComment-1129475 Share on other sites More sharing options...
OldManRiver Posted November 5, 2010 Author Share Posted November 5, 2010 All, Also wrote this up at: http://wordpress.org/support/topic/xml-rpc-question?replies=11#post-1775378 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 Quote Link to comment https://forums.phpfreaks.com/topic/217093-xml-rpc-help/#findComment-1130762 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.