他のことでは不便を感じないのだが、MacのMarsEditとWindows Live Writerを、WordPress管理画面を通して、受け渡しが出来なくて、放置していた「ブログ サーバーから受信した metaWeblog.getRecentPosts メソッドへの応答が無効です。」エラーに対処しようと奮闘いたしました。
症状
Windows Live Writerから、WordPress管理画面に下書き保存されている投稿を取得しようとすると、「ブログ サーバーから受信した metaWeblog.getRecentPosts メソッドへの応答が無効です。」というエラーメッセージが出る。
ログファイルを見ると、「Invalid response document returned from XmlRpc server」とある。
幾つか試してみると、WordPressのマルチ化した子サイト全てが、エラーが出るのではなく、幾つかが上手く行かない。
ログファイルの見方
ヘルプから「バージョン情報」参照。
現れたバージョン情報ウィンドウ の「ログファイルの表示」をクリック。
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 は、存在しない場合もあるのですが、もしあれば、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のようです。
どうも、この解決法が、僕の場合、フィットしているようです。
同じく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ファイルの一番上に、追記してみてください。
その際、メモ帳などは、お使いにならないでください。
無料のものでしたら、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)
突然、以下のようなメッセージが現れ、ログイン情報を要求してくる。
この記事を書いている間も度々、ログアウトする。
最近、急速にTwitterで、外国人のフォロワーが増えた。
ロリポップで、自分のIPアドレスからしか、WordPressのログイン画面が現れないように設定しているのが、とても不安だ。
xmlrpc.phpファイルに追記した[$HTTP_RAW_POST_DATA = file_get_contents(“php://input”);]を削除すると、上記のエラーメッセージは、現れなくなるが、振り出しに戻っただけだった。
今日は断念。
一応、サーバーのPHPの設定を、5.3にするが、結果は同じ。
同じくロリポップのサーバーの管理画面のphp.iniの設定画面でdefault_charsetをUTF-8にするが変わらず。