xmlrpc.inc ( http://phpxmlrpc.sourceforge.net/ ) から metaWeblog.getPost を使用したいのですが、なにかよいサンプルコードはないでしょうか?

ちなみに当方が以下のようなコードを組むと「Invalid return payload: enable debugging to examine incoming payload (XML error at line 1, check URL)」というエラー($result->faultString()にこのような返り値が入ってしまう)が発生してしまいます。

<?php
include 'lib/xmlrpc.inc';

$server = new xmlrpc_client('/mt4/mt-xmlrpc.cgi',
'(サイトのドメイン)', 80);

$message = new xmlrpcmsg(
"metaWeblog.getPost",
array(
new xmlrpcval("(エントリのID)", 'string'),
new xmlrpcval("(ブログのID)", 'string'),
new xmlrpcval("(ブログのパスワード)", 'string')
)
);

$result = $server->send($message);

print_r($result);

if (!$result) {
print "<p>Could not connect to HTTP server.</p>";
} elseif ($result->faultCode()) {
print "<p>XML-RPC Fault #" . $result->faultCode() . ": " . $result->faultString()."</p>";
} else {
print_r($result->value());
}

?>

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

回答1件)

id:tobeoscontinue No.1

回答回数220ベストアンサー獲得回数59

ポイント60pt

>XML error at line 1

とあるようにXMLファイルが返っていないように思います。

$server->setDebug(2);
$result = $server->send($message);

として送信した内容と受け取った内容を表示して確かめてみてはどうでしょう。


プログラムの問題というよりもmt4の設定の問題ということはありませんか?

http://d.hatena.ne.jp/tacchini/20080502/1209725544

id:halohalolin

tobeoscontinue さん先ほどの質問に引き続きお答えいただきありがとうございます。

カテゴリ一覧の取得をsendするのは成功したので、MTAPIの問題はクリアしていると考えています。

もしかしたら受信するエントリの内容に xmlrpc.inc と相性の悪い物があるのかもしれません。

送信内容等は以下の通りです。

■送信内容

  • SENDING---

POST /mt4/mt-xmlrpc.cgi HTTP/1.0

User-Agent: XML-RPC for PHP 2.2.1

Host: www.gift-communication.net:80

Accept-Encoding: gzip, deflate

Accept-Charset: UTF-8,ISO-8859-1,US-ASCII

Content-Type: text/xml; charset=UTF-8

Content-Length: 297

<methodCall>

<methodName>metaWeblog.getPost</methodName>

<params>

<param>

<value><string>(エントリID)</string></value>

</param>

<param>

<value><string>(MTのID)</string></value>

</param>

<param>

<value><string>(ブログの正確にはMTAPIパスワード)</string></value>

</param>

</params>

</methodCall>

  • END---

■受信内容

  • GOT---

HTTP/1.1 200 OK

Date: Sat, 05 Jul 2008 03:16:41 GMT

Server: Apache/1.3.41 (Unix) PHP/4.4.8 mod_ssl/2.8.31 OpenSSL/0.9.7l

SOAPServer: SOAP::Lite/Perl/0.52

Content-Length: 4092

Connection: close

Content-Type: text/xml

<methodResponse><params><param><value><struct><member><name>permaLink</name><value><string>(ブログのURL)</string></value></member><member><name>mt_basename</name><value><string>post_2</string></value></member><member><name>userid</name><value><string>1</string></value></member><member><name>mt_allow_pings</name><value><int>1</int></value></member><member><name>mt_tags</name><value><string/></value></member><member><name>mt_excerpt</name><value><string>(エントリの内容)

</string></value></member><member><name>postid</name><value><string>(エントリーID)</string></value></member><member><name>mt_convert_breaks</name><value><string>0</string></value></member><member><name>title</name><value><string>(エントリのタイトル)</string></value></member><member><name>mt_keywords</name><value><string/></value></member><member><name>mt_text_more</name><value><string/></value></member></struct></value></param></params></methodResponse>

  • END---

--

7月7日追伸:受信するデータに(")ダブルクォーテーションがあったので、除去したところ動作するようになりました。おつきあいいただきありがとうございました。

2008/07/07 03:35:37
  • id:tobeoscontinue
    受信内容がコピペしたものだとすると
    1.レスポンスヘッダーの各部分に空白行があるのがおかしい。
    2.XMLのタグで< tag_name>や< /tag_name>のように余分な空白が入っている。
    の2点がひっかかってパースエラーとなっていました。

    単純にはmt-xmlrpc.cgi側に問題があると思うのですが、そうなるとバグ報告が上がると思われるので別のところかもしれません。

    とりあえずxmlrpcmsgのparseResponse()で無駄なコードを取る方法にしてみます。
    $GLOBALS['_xh']=array();

    $raw_data = $data;
    の間に
    $data = str_replace("\n\nC", "\nC", $data);
    $data = str_replace("\n\nD", "\nD", $data);
    $data = str_replace("\n\nS", "\nS", $data);
    $data = str_replace("< ", "<", $data);
    を追加します。\n\nは\r\n\r\nかも知れません。実際の受信内容のコードを見て変えて下さい。
    (このコードでは一般的には対処できません。今回のデータだけです)

    $GLOBALS['xmlrpc_internalencoding']='UTF-8';
    としないと漢字などは文字化けするようです。

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

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

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

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