サポート » 使い方全般 » PEAR XML_RPCによる記事投稿で文字化けしてしまいます

  • PEAR XML_PRCを利用してWordPressへ記事投稿を試みておりますが、投稿された記事のタイトル、本文が文字化けしてしまいます。

    原因・解決法等、御心当たりがございましたらご教授ください。
    どうぞよろしくお願いいたします。

    バージョン:PHP 5.3.3
    表示したい文字コード:UTF-8
    WordPress:3.4.1

    <?php
    //PEAR XML_PRCの読み出し
    require_once("XML/RPC.php");
    $GLOBALS['XML_RPC_defencoding'] = "UTF-8";
    
    $host = "ホスト名";
    $xmlrpc_path = "/パス/xmlrpc.php";
    $appkey = '';
    $user = 'ユーザー名';
    $passwd ='パスワード';
    
    $c = new XML_RPC_client($xmlrpc_path, $host, 80);
    
    $appkey = new XML_RPC_Value($appkey, 'string');
    $username = new XML_RPC_Value( $user, 'string' );
    $passwd = new XML_RPC_Value( $passwd, 'string' );
    
    $message = new XML_RPC_Message(
    'blogger.getUsersBlogs',array($appkey, $username, $passwd)
    );
    
    $result = $c->send($message);
    
    if(!$result){
    exit('Could not connect to the server.');
    } else if( $result->faultCode() ){
    exit($result->faultString());
    }
    
    $blogs = XML_RPC_decode($result->value());
    
    $blog_id = new XML_RPC_Value($blogs[0]["blogid"], "string");
    
    //--------ここまでがBlogIDの取得----------------------------
    
    $title = "今週の管理人Bookmark (".date('n/j',$oneweek).'-'.date('n/j',time()).')';
    $categories = array(
    new XML_RPC_Value("カテゴリー名", "string"),
    );
    $description = "ここに本文を入れます。HTML も書けます<p>段落</p>";
    $content = new XML_RPC_Value(
    array(
    'title' => new XML_RPC_Value($title, 'string'),
    'categories' => new XML_RPC_Value($categories, 'array'),
    'description' => new XML_RPC_Value($description, 'string'),
    'wp_slug' => new XML_RPC_Value('bookmarks-of-'.date('Yms'),'string'),
    'dateCreated' => new XML_RPC_Value(time(), 'dateTime.iso8601')
    ),
    'struct');
    
    $publish = new XML_RPC_Value(1, "boolean");
    
    $message = new XML_RPC_Message(
    'metaWeblog.newPost',
    array($blog_id, $username, $passwd, $content, $publish)
    );
    
    $result = $c->send($message);
    
    if(!$result){
    exit('Could not connect to the server.');
    } else if( $result->faultCode() ){
    exit($result->faultString());
    }
    ?>
7件の返信を表示中 - 1 - 7件目 (全7件中)
  • 文字コード設定が抜けているみたいです。

    こちらの記事を参考にしてください。
    http://ounziw.com/2011/10/01/xmlrpc-phppear/

    $GLOBALS[‘XML_RPC_defencoding’] = “UTF-8”;

    トピック投稿者 nou

    (@nou)

    ありがとうございます。

    ご指摘いただいた部分を上記ソースに加えてみましたが、文字化けは直りませんでした。。。

    リンク先のソースそのままで実行したところ投稿自体されませんでした なにか環境自体が違うのでしょうか…

    あれま。
    php, pear, wordpress のバージョンによって動作が異なるかもしれませんね。
    私もそこまでは調べきれていません。

    ところで、
    http://www.phppro.jp/qa/3769
    にもほぼ同様の質問がありますが、本問と関係があるのでしょうか。

    こんにちは、

    PEAR使わないで、WordPressのファイルを使っていいなら

    <?php
    /*wp-includesからファイルをコピペ*/
    require_once("class-IXR.php");
    
    	$host			= "http://www.example.com/wp";
    	$base_uri 		= $host. "/xmlrpc.php";
    	$encoding 		= 'UTF-8';
    	$method 		= 'metaWeblog.newPost';//wp.newPostは動きませんでした
    	$title 			= "タイトル";
    	$description 	= "本文";
    	$user			= 'nobita';
    	$pass			= 'your password';
    	$params = array(1,
    				$user,
    				$pass,
    				array(
    					"title" => $title,
    					"description" => $description,
    					),
    				1,
    				);
    $client = new IXR_Client($base_uri);
    
    if (!$client->query($method, $params)) {
    	echo $client->getErrorCode().":".$client->getErrorMessage()."\n";
    	exit();
    }

    で、投稿が出来るようです。

    curlでも、試してみたんですが、以下のようなコードだと、文字化けするようです。

    /*Creating the wp.getPostStatusList request */
      $request = xmlrpc_encode_request("metaWeblog.newPost",
        array($BLOGID, $USERNAME, $PASSWORD ,array('description' => '練習だよ','title'=>'ほらこれだよ'), 1)) ;

    カテゴリを取得するような動作は、問題ないようですが、ワードプレスに付属しているものを使うようにしてみてはどうでしょうか?

    追記:その後 文字化けした関数は

    /*Creating the request */
      $request = xmlrpc_encode_request("metaWeblog.newPost",
        array($BLOGID, $USERNAME, $PASSWORD ,array('description' => '練習だよ','title'=>'ほらこれだよ'),1),array('escaping'=> "markup",'encode'=>'UTF-8') ) ;

    でうまくいきました
    @source

    curlのコードも置いておきます。

    <?php
    
    $USERNAME = "";
    $PASSWORD = "";
    
    $BLOGID = 1;
    $BLOGURL = "";
    
    $XMLRPC_URL = $BLOGURL."/xmlrpc.php";
    
    function get_response($URL, $context) {
     if(!function_exists('curl_init')) {
     die ("Curl PHP package not installed\n");
     }
    
     /*Initializing CURL*/
     $curlHandle = curl_init();
    
     /*The URL to be downloaded is set*/
     curl_setopt($curlHandle, CURLOPT_URL, $URL);
     curl_setopt($curlHandle, CURLOPT_HEADER, false);
     curl_setopt($curlHandle, CURLOPT_HTTPHEADER, array("Content-Type: text/xml"));
     curl_setopt($curlHandle, CURLOPT_POSTFIELDS, $context);
    
     /*Now execute the CURL, download the URL specified*/
     $response = curl_exec($curlHandle);
     return $response;
    }
    
      /*Creating the request */
      $request = xmlrpc_encode_request("metaWeblog.newPost",
        array($BLOGID, $USERNAME, $PASSWORD ,array('description' => '練習だよ','title'=>'ほらこれだよ'),1),array('escaping'=> "markup",'encode'=>'UTF-8') ) ;
    
      /*Making the request to wordpress XMLRPC of your blog*/
      $xmlresponse = get_response($XMLRPC_URL, $request);
      $response = xmlrpc_decode($xmlresponse);
    
      if ($response && xmlrpc_is_fault($response)) {
        trigger_error("xmlrpc: $response[faultString] ($response[faultCode])");
      } else {
        /*Printing the response on to the console*/
        print_r($response);
      }
    echo "\n";
    
    ?>
    トピック投稿者 nou

    (@nou)

    みなさま 御助力ありがとうございました。
    おかげさまで解決することができました。文字化けなしの記事が投稿されたときはガッツポーズしてしまいましたw

    nobita様 本当にありがとうございます。教えていただいた ”class-IXR.php” のソースで文字化けなしで記事を投稿することができました。2週間近く悩んでいたので本当に嬉しいです。ありがとうございました。

    php-web様 御助力ありがとうございました。無事解決いたしました。こちらに質問させていただいて本当によかったと思っております。本当にありがとうございました。

    問題も解決したのに本当に図々しく恐縮なのですが、もう一点お伺いしたいことがあります。

    現状 投稿された記事のURLはタイトルとなっております。これはパーマリンクで設定しているのですが、投稿記事に関してはできれば短縮URLまたは他のローマ字等表記にしたいのですが、上記ソースに設定を付け加えることは可能でしょうか。

    こんにちは、

    URL短縮API使って、URLを置換したものを送信すればいいと思います。

    こんな感じで、URLを作って、本文内のリンクを置換してやればいいと思います。
     詳細は、短縮APIサービス調べてみてください

    require_once 'bit_ly.php';
    
    $bitly = new Bitly($login,$apikey,$apiversion,$format);
    $aaa = $bitly->shorten($url);
    return $aaa;

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「PEAR XML_RPCによる記事投稿で文字化けしてしまいます」には新たに返信することはできません。