2011年6月12日 星期日

解決Windows Live Writer讀取Wordpress出現blogger.getUsersBlogs錯誤

https://blogger-script-study.blogspot.com/2011/06/windows-live-writerwordpressbloggergetu.html

這兩天嘗試將部落格平台從Byethost免費平台搬移到其付費的平台,一開始發生【500 internal server error】的錯誤,後來發了一張Ticket給Byethost之後,工作人員幫我解決了問題,可是當我嘗試使用 Windows Live Writer 2011 來讀取部落格上的舊文章時,接著又出現了【無效的伺服器回應 - 收到部落格伺服器對於 blogger.getUsersBlogs 方法的無效回應: Invalid response document returned from XmlRpc server】。

 

我同樣發了一張 Ticket 給 Byethost 的工作人員,Byethost 的反應速度還算快,但信件來來去去了好幾回就是無法解決我的問題,最後竟然要求我自己上 Google 找 solution,因為他們沒有 Windows 的平台,所以也無法安裝 Windows Live Writer 來做測試,真是不合他們當初宣稱的可以不計成本地花好幾個小時,甚至好幾天的時間來幫我除錯(debug),當初可是因為他們的號稱才願意從免費升級到付費的耶,不過也還好,我在 Google 大仙上面不費什麼吹灰之力就找到了解決方法,也順利的解決了問題:其方法如下:

1. 打開wp-includes目錄下面的class-IXR.php檔案,然後尋找下面的程式碼:

$length = strlen($xml);

這段程式碼位於 function output($xml) 之下,然後將其程式碼修改為:

$length = strlen($xml)+3;

我使用的是 Windows Live Writer 2001 及 Wordpress 3.0 的版本,看起來是xml檔名字串長度不足造成的問題,範例中是將字串長度增加3,但我以我的部落格為例,我只要將字串長度增加2就可以修復問題了,只增加1還是不行。從網路上看來,有些人的部落格似乎必須將字串長度增加9才可以解決問題,所以自己得試看看效果如何。

另外,下面的錯誤訊息是從 Windows Live Writer 上面的 Log file 節錄下來的,上面有提到是因為解析檔案名稱錯誤造成,這有可能是因為中文檔案的關係,猜測啦!想開啟 Windows Live Writer 的 Log file (紀錄檔)可以點選【關於Windows Live Writer】然後在其視窗的左下角點選【顯示紀錄檔】可以起開啟其目錄,這個當按裡面紀錄了你操作WLW的大小事,如果你只想查看目前的問題,建議你關閉WLW,然後更改原來的檔案名稱,在重新操作一次WLW,這樣就可以紀錄到最新的操作步驟與錯誤紀錄。

WindowsLiveWriter,1.9200,None,00001,05-Jun-2011 09:54:28.888,"WLSetup check returned WLStatusOK",""
WindowsLiveWriter,1.9200,None,00002,05-Jun-2011 09:54:29.021,"User is opted out of CEIP",""
WindowsLiveWriter,1.9200,None,00003,05-Jun-2011 09:54:29.051,"Using passport environment: Production",""
WindowsLiveWriter,1.9200,None,00004,05-Jun-2011 09:54:29.051,"Starting Windows Live Writer 15.4.3508.1109",""
WindowsLiveWriter,1.9200,None,00005,05-Jun-2011 09:54:29.051,".NET version: 2.0.50727.5444",""
WindowsLiveWriter,1.9200,None,00006,05-Jun-2011 09:54:29.390,"499 499",""
WindowsLiveWriter,1.9200,None,00007,05-Jun-2011 09:54:29.597,"Creating a readable ribbon istream for C:\Users\ASLU\AppData\Roaming\Windows Live Writer\Ribbon.dat",""
WindowsLiveWriter,1.9200,None,00008,05-Jun-2011 09:54:34.741,"Creating a writable ribbon istream for C:\Users\ASLU\AppData\Roaming\Windows Live Writer\Ribbon.dat",""
WindowsLiveWriter,1.9200,None,00009,05-Jun-2011 09:54:37.063,"Creating a writable ribbon istream for C:\Users\ASLU\AppData\Roaming\Windows Live Writer\Ribbon.dat",""
WindowsLiveWriter,1.9200,None,00010,05-Jun-2011 09:54:40.728,"Exception parsing XML-RPC response:

WindowsLive.Writer.CoreServices.XmlRpcClientInvalidResponseException: Invalid response document returned from XmlRpc server ---> System.Xml.XmlException: 當剖析檔案 Name 時出現未預期的結尾。 第 18 行,位置 16。
於 System.Xml.XmlTextReaderImpl.Throw(Exception e)
於 System.Xml.XmlTextReaderImpl.Throw(String res, String arg)
於 System.Xml.XmlTextReaderImpl.Throw(Int32 pos, String res, String arg)
於 System.Xml.XmlTextReaderImpl.ParseQName(Boolean isQName, Int32 startOffset, Int32& colonPos)
於 System.Xml.XmlTextReaderImpl.ThrowTagMismatch(NodeData startTag)
於 System.Xml.XmlTextReaderImpl.ParseEndElement()
於 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)

<?xml version=""1.0""?>
<methodResponse>
<params>
<param>
<value>
<array><data>
<value><struct>
<member><name>isAdmin</name><value><boolean>1</boolean></value></member>
<member><name>url</name><value><string>http://www.researchmfg.com/</string></value></member>
<member><name>blogid</name><value><string>1</string></value></member>
<member><name>blogName</name><value><string>電子製造,工作狂人(ResearchMFG)</string></value></member>
<member><name>xmlrpc</name><value><string>http://www.researchmfg.com/xmlrpc.php</string></value></member>
</struct></value>
</data></array>
</value>
</param>
</params>
</methodRespons",""


延伸閱讀:
解決Windows Live Writer讀取Blogger文章繼續閱讀後內容消失問題

沒有留言: