Pocket
LINEで送る



 

他のことでは不便を感じないのだが、MacのMarsEditとWindows Live Writerを、WordPress管理画面を通して、受け渡しが出来なくて、放置していた「ブログ サーバーから受信した metaWeblog.getRecentPosts メソッドへの応答が無効です。」エラーに対処しようと奮闘いたしました。

Windows Live Writer「ブログ サーバーから受信した metaWeblog.getRecentPosts メソッドへの応答が無効です。」エラー

症状

Windows Live Writerから、WordPress管理画面に下書き保存されている投稿を取得しようとすると、「ブログ サーバーから受信した metaWeblog.getRecentPosts メソッドへの応答が無効です。」というエラーメッセージが出る。

ログファイルを見ると、「Invalid response document returned from XmlRpc server」とある。

幾つか試してみると、WordPressのマルチ化した子サイト全てが、エラーが出るのではなく、幾つかが上手く行かない。

ログファイルの見方

 Windows Live Writer ログファイル参照

ヘルプから「バージョン情報」参照。

Windows Live Writer ログファイルの参照

現れたバージョン情報ウィンドウ の「ログファイルの表示」をクリック。

Windows Live Writer ログファイルの参照02

 

Windows Live Writer.logを開く。
.log.oldとなっているのは、それ以前のログです。

検索してみると

検索のヒント

こういうエラーの場合、エラーメッセージそのもので、検索してみる。

ただし、User/Kazuoとなっているような固有な単語は省く。

多くのログから、どれがエラーを表わしているかは、丁寧に読み、あとは感。


 

下記WordPressのサポート・フォーラムを見ると、幾つか、解決策が提案されています。

実際に、解決策を、ご利用される場合は、ご自身の責任において行ってください。

1.xmlrpc.phpファイルの関数mw_newPost() 関数の途中約この行は間違っており、「未定義関数」コールとして定義されている。

logIO(’O', ‘Post cats: ‘ . printr($catnames,true));

となっているprintrを正しい関数、print_rに訂正せよ。

logIO(’O', ‘Post cats: ‘ . print_r($catnames,true));

2.mod_securityをを伝えるためにあなたの.htaccessファイルにこれを追加してみてください。

<IfModule mod_security.c>
SecFilterEngine Off
SecFilterScanPOST Off
</IfModule>

.htaccessのある場所

.htaccess は、存在しない場合もあるのですが、もしあれば、WordPressをインストールした直下に存在します。

WordPress › Support » invalid response document returned from XmlRpc server

 

WordPress.orgの辞典とも言えるWordPress Codexには、この「ブログ サーバーから受信した metaWeblog.getRecentPosts メソッドへの応答が無効です。」に関して2つの対処法が掲載されていました。

残念ながら、その内の一つは意味がわかりませんでした。

1.ブログを設置しているサーバーが、PHP5.2.2を使っていれば、xmlrpc.phpファイルの先頭に次の行を追加せよ。

$HTTP_RAW_POST_DATA = file_get_contents(“php://input”);

調べてみると、僕が利用しているロリポップのサーバーのPHPは、5.2のようです。

ロリポップ!ユーザー専用ページ - PHP設定

どうも、この解決法が、僕の場合、フィットしているようです。

xmlrpc.phpがある階層

同じくxmlrpc.phpファイルは、WordPressをインストールした直下に存在します。

2.pre, script や style tagsがあると、Windows Live WriterでWordPressの投稿を開くことができない。

ベータ3で修正。

3.サブドメインのWordPressマルチサイト(○○○.example.com)、ドメインマッピングを使っている場合、○○○.example.com/xmlrpc.phpを使いなさい。

確かに、僕は、マルチサイトで利用しているのですが、エラーメッセージが違うようだ。

エラーメッセージ

You signed in successfully with a blog account, but you do not have a blog with this service provider. Check with the blog service provider and then try again.

翻訳

あなたはブログアカウントで正常にサインインしますが、このサービスプロバイダにブログを持っていない。ブログサービスプロバイダに確認してから、再試行してください。

 さすがは、Codex。

Windows Live Writer Help « WordPress Codex

早速、xmlrpc.phpに追記してみます。

 xmlrpc.phpファイルの修正

コピペなどでxmlrpc.phpファイルの一番上に、追記してみてください。

 その際、メモ帳などは、お使いにならないでください。

無料のものでしたら、TeraPad – 窓の杜ライブラリ.などのエディタを、お使いください。

保存し、もとの階層に、アップロード。

試してみても、結果は変わらず。
しばらく時間をおいてみても同じ。

 16 進数値 0x00) は無効な文字です。 行 2521、位置 83 です。

 というエラーメッセージが怪しいのですが、ググってみても何のことやらさっぱり。

ファイルを検索してみても、「logIO(’O’, ‘Post cats: ‘ . printr($catnames,true));」のような項目はない。

xmlrpc.phpファイルをよく見てみると、サイトURLにより、違いはなさそうだ。

なので、xmlrpc.phpファイルをコピペし、新たに○○○.ki.blog/xmlrpc.phpを作成。

保存しようとしたら、「/(スラッシュ)」が邪魔して保存できない。

○○○.ki.blogというフォルダなんて存在しないし、ん~わからん。

エラーメッセージ

WindowsLiveWriter,1.6216,None,00013,03-Apr-2015 21:12:04.669,”DisplayableException occurred: WindowsLive.Writer.Extensibility.BlogClient.BlogClientInvalidServerResponseException: サーバーの応答が無効です – ブログ サーバーから受信した metaWeblog.getRecentPosts メソッドへの応答が無効です。

Invalid response document returned from XmlRpc server
場所 WindowsLive.Writer.BlogClient.Clients.XmlRpcBlogClient.CallMethod(String methodName, XmlRpcValue[] parameters)
場所 WindowsLive.Writer.BlogClient.Clients.MetaweblogClient.GetRecentPosts(String blogId, Int32 maxPosts, Boolean includeCategories)
場所 WindowsLive.Writer.BlogClient.Blog.GetRecentPosts(Int32 maxPosts, Boolean includeCategories)
場所 WindowsLive.Writer.PostEditor.RemoteWeblogBlogPostSource.GetPosts(RecentPostRequest request, Boolean getPages)
場所 WindowsLive.Writer.PostEditor.RemoteWeblogBlogPostSource.GetRecentPosts(RecentPostRequest request)
場所 WindowsLive.Writer.PostEditor.OpenPost.BlogPostListBox.GetRecentPostsAsyncOperation.DoWork()
場所 WindowsLive.Writer.CoreServices.AsyncOperation.InternalStart()”,””
WindowsLiveWriter,1.6216,None,00014,03-Apr-2015 22:21:31.532,”Exception parsing XML-RPC response:

WindowsLive.Writer.CoreServices.XmlRpcClientInvalidResponseException: Invalid response document returned from XmlRpc server —> System.Xml.XmlException: ‘.’ (16 進数値 0x00) は無効な文字です。 行 2521、位置 83 です。
場所 System.Xml.XmlTextReaderImpl.Throw(Exception e)
場所 System.Xml.XmlTextReaderImpl.Throw(String res, String[] args)
場所 System.Xml.XmlTextReaderImpl.Throw(Int32 pos, String res, String[] args)
場所 System.Xml.XmlTextReaderImpl.ThrowInvalidChar(Int32 pos, Char invChar)
場所 System.Xml.XmlTextReaderImpl.ParseText(Int32& startPos, Int32& endPos, Int32& outOrChars)
場所 System.Xml.XmlTextReaderImpl.ParseText()
場所 System.Xml.XmlTextReaderImpl.ParseElementContent()
場所 System.Xml.XmlTextReaderImpl.Read()
場所 System.Xml.XmlLoader.LoadNode(Boolean skipOverWhitespace)
場所 System.Xml.XmlLoader.LoadDocSequence(XmlDocument parentDoc)
場所 System.Xml.XmlLoader.Load(XmlDocument doc, XmlReader reader, Boolean preserveWhitespace)
場所 System.Xml.XmlDocument.Load(XmlReader reader)
場所 System.Xml.XmlDocument.LoadXml(String xml)
場所 WindowsLive.Writer.CoreServices.XmlRpcMethodResponse..ctor(String responseText)
— 内部例外スタック トレースの終わり —
場所 WindowsLive.Writer.CoreServices.XmlRpcMethodResponse..ctor(String responseText)
場所 WindowsLive.Writer.CoreServices.XmlRpcClient.CallMethod(String methodName, XmlRpcValue[] parameters)

突然、以下のようなメッセージが現れ、ログイン情報を要求してくる。

Windows Live Writer エラー

 この記事を書いている間も度々、ログアウトする。
最近、急速にTwitterで、外国人のフォロワーが増えた。

ロリポップで、自分のIPアドレスからしか、WordPressのログイン画面が現れないように設定しているのが、とても不安だ。

 xmlrpc.phpファイルに追記した[$HTTP_RAW_POST_DATA = file_get_contents(“php://input”);]を削除すると、上記のエラーメッセージは、現れなくなるが、振り出しに戻っただけだった。

今日は断念。

一応、サーバーのPHPの設定を、5.3にするが、結果は同じ。

同じくロリポップのサーバーの管理画面のphp.iniの設定画面でdefault_charsetをUTF-8にするが変わらず。

[cptapagination custom_post_type='yourposttype' post_limit='5']
Pocket
LINEで送る