http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1415224089

こちらの方と全く同じ症状、エラーで悩んでおりました。
参考までにPHPはVersion 5.2.1、XML_RPC-1.5.1を使用しております。
ご教授のほど、よろしくお願い致します。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2008/03/31 03:17:17
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:kent013 No.1

回答回数38ベストアンサー獲得回数7

ポイント100pt

出ているのはエラーではなく,ワーニングなので,動作自体は問題ないです.

ただ,やり取りはUTF-8で行う必要があるので,そのスクリプトをUTF-8で保存してください.

すると問題なく,記事が投稿されているはずです.


また,ワーニング自体は,コードを読む限りデバッグ出力のためにエンコード変換をしているところで出ていますので,その行を削除してしまって構わないです.

具体的には

<?php
require_once("XML/RPC.php"); //XML-RPC package 読み込み
$GLOBALS['XML_RPC_defencoding'] = "UTF-8";

//XML-RPCインタフェース、ユーザ定義
$fc2_host = "blog.fc2.com";
$fc2_xmlrpc_path = "/xmlrpc.php";
$fc2_user = "ここにID";
$fc2_passwd = "ここにパスワード";

$bm = new BlogManager();
$bm->post_blog("PHPから投稿テスト3-Title","PHPから投稿テスト3-Dsescription <br/>改行コード埋め込み \n なんかいけてそう");

class BlogManager {
    function post_blog($title,$content){
        global $fc2_xmlrpc_path,$fc2_host,$fc2_user,$fc2_passwd;
        //クライアントの作成
        echo "クライアント作成<br\n>";
        $c = new XML_RPC_client( $fc2_xmlrpc_path, $fc2_host, 80 );
        
        //送信データ
        $blogid = new XML_RPC_Value( 0, 'string');
        $username = new XML_RPC_Value($fc2_user, 'string');
        $passwd = new XML_RPC_Value($fc2_passwd, 'string');
        $content = new XML_RPC_Value(array(
        'title'=> new XML_RPC_Value($title, 'string'),
        'description'=> new XML_RPC_Value($content, 'string'),
        'dateCreated'=> new XML_RPC_Value(date("Ymd\TH:i:s",time()), 'dateTime.iso8601')
        ), 'struct');
        $publish = new XML_RPC_Value( 1, 'boolean');
        //XML-RPCメソッドのセット
        $message = new XML_RPC_Message(
        'metaWeblog.newPost',
        array($blogid, $username, $passwd, $content, $publish) );
        
        $this->send_message($c,$message);
        
    }
    
    function get_users_blogs(){
        global $fc2_xmlrpc_path,$fc2_host,$fc2_user,$fc2_passwd;
        //クライアントの作成
        echo "クライアント作成<br\n>";
        $c = new XML_RPC_client( $fc2_xmlrpc_path, $fc2_host, 80 );
        $appkey = new XML_RPC_Value( '', 'string' );
        $username = new XML_RPC_Value( $fc2_user, 'string' );
        $passwd = new XML_RPC_Value( $fc2_passwd, 'string' );
        
        //メッセージ作成
        echo "メッセージ作成<br\n>";
        $message = new XML_RPC_Message(    "blogger.getUsersBlogs",array($appkey, $username, $passwd) );
        
        $this->send_message($c,$message);
    }
    
    function send_message($c,$message){
        //print_r($c);
        //print_r($message);
        //メッセージ送信
        echo "メッセージ送信<br\n>";
        $result = $c->send($message);
        
        if( !$result ){
             exit('Could not connect to the server.');
        }else if( $result->faultCode() ){
             exit('XML-RPC fault ('.$result->faultCode().'): '
                 .$result->faultString());
        }
        
        return XML_RPC_decode( $result->value() );
    }
    
    function array_convEnc($a){
         if( is_array($a) ){ return array_map( 'array_convEnc', $a ); }
         return mb_convert_encoding(
             $a, mb_internal_encoding(),
             $GLOBALS['XML_RPC_defencoding'] );
    }
}
?>

で動きます.

id:JMaster

ありがとうございます!!

UTFで保存はもちろん、エディタを秀丸からテラパッドに変えたりいろいろ試しても

駄目だったのですが、ご教授頂いたソースで一発でワーニングが出なくなりました。

感謝致します!!

2008/03/31 03:15:11

その他の回答1件)

id:kent013 No.1

回答回数38ベストアンサー獲得回数7ここでベストアンサー

ポイント100pt

出ているのはエラーではなく,ワーニングなので,動作自体は問題ないです.

ただ,やり取りはUTF-8で行う必要があるので,そのスクリプトをUTF-8で保存してください.

すると問題なく,記事が投稿されているはずです.


また,ワーニング自体は,コードを読む限りデバッグ出力のためにエンコード変換をしているところで出ていますので,その行を削除してしまって構わないです.

具体的には

<?php
require_once("XML/RPC.php"); //XML-RPC package 読み込み
$GLOBALS['XML_RPC_defencoding'] = "UTF-8";

//XML-RPCインタフェース、ユーザ定義
$fc2_host = "blog.fc2.com";
$fc2_xmlrpc_path = "/xmlrpc.php";
$fc2_user = "ここにID";
$fc2_passwd = "ここにパスワード";

$bm = new BlogManager();
$bm->post_blog("PHPから投稿テスト3-Title","PHPから投稿テスト3-Dsescription <br/>改行コード埋め込み \n なんかいけてそう");

class BlogManager {
    function post_blog($title,$content){
        global $fc2_xmlrpc_path,$fc2_host,$fc2_user,$fc2_passwd;
        //クライアントの作成
        echo "クライアント作成<br\n>";
        $c = new XML_RPC_client( $fc2_xmlrpc_path, $fc2_host, 80 );
        
        //送信データ
        $blogid = new XML_RPC_Value( 0, 'string');
        $username = new XML_RPC_Value($fc2_user, 'string');
        $passwd = new XML_RPC_Value($fc2_passwd, 'string');
        $content = new XML_RPC_Value(array(
        'title'=> new XML_RPC_Value($title, 'string'),
        'description'=> new XML_RPC_Value($content, 'string'),
        'dateCreated'=> new XML_RPC_Value(date("Ymd\TH:i:s",time()), 'dateTime.iso8601')
        ), 'struct');
        $publish = new XML_RPC_Value( 1, 'boolean');
        //XML-RPCメソッドのセット
        $message = new XML_RPC_Message(
        'metaWeblog.newPost',
        array($blogid, $username, $passwd, $content, $publish) );
        
        $this->send_message($c,$message);
        
    }
    
    function get_users_blogs(){
        global $fc2_xmlrpc_path,$fc2_host,$fc2_user,$fc2_passwd;
        //クライアントの作成
        echo "クライアント作成<br\n>";
        $c = new XML_RPC_client( $fc2_xmlrpc_path, $fc2_host, 80 );
        $appkey = new XML_RPC_Value( '', 'string' );
        $username = new XML_RPC_Value( $fc2_user, 'string' );
        $passwd = new XML_RPC_Value( $fc2_passwd, 'string' );
        
        //メッセージ作成
        echo "メッセージ作成<br\n>";
        $message = new XML_RPC_Message(    "blogger.getUsersBlogs",array($appkey, $username, $passwd) );
        
        $this->send_message($c,$message);
    }
    
    function send_message($c,$message){
        //print_r($c);
        //print_r($message);
        //メッセージ送信
        echo "メッセージ送信<br\n>";
        $result = $c->send($message);
        
        if( !$result ){
             exit('Could not connect to the server.');
        }else if( $result->faultCode() ){
             exit('XML-RPC fault ('.$result->faultCode().'): '
                 .$result->faultString());
        }
        
        return XML_RPC_decode( $result->value() );
    }
    
    function array_convEnc($a){
         if( is_array($a) ){ return array_map( 'array_convEnc', $a ); }
         return mb_convert_encoding(
             $a, mb_internal_encoding(),
             $GLOBALS['XML_RPC_defencoding'] );
    }
}
?>

で動きます.

id:JMaster

ありがとうございます!!

UTFで保存はもちろん、エディタを秀丸からテラパッドに変えたりいろいろ試しても

駄目だったのですが、ご教授頂いたソースで一発でワーニングが出なくなりました。

感謝致します!!

2008/03/31 03:15:11
id:kent013 No.2

回答回数38ベストアンサー獲得回数7

ポイント35pt

補足です.

FC2はMetaWeblogというAPIを使っています.

ブログを書くということ - tohimaの日記

http://www.xmlrpc.com/metaWeblogApi

が参考になります.

id:JMaster

ご丁寧にありがとうございます。

こちらの情報も参考にさせて頂きます。

2008/03/31 03:16:08

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません