Last Updated on 2021-05-20 by Clay
在使用 WordPress 經營個人 Blog 的過程中,有時候我常常會希望能夠將所有寫過的文章做個整理。當然,我想要使用的方法當然是『人工慢慢看』以外的方法,比如說透過『API』來取得 WordPress 相關的資料。
在研究的過程中,找到了數種不同的 API 可以使用,最後我選擇的是 python-wordpress-xmlrpc 這個套件。
若是對這個套件有興趣,歡迎前往其 PyPI 看看:https://pypi.org/project/python-wordpress-xmlrpc/
今天這裡先紀錄的,是如何在 WordPress 自動發文。將發表過的文章擷取下來我放到另外的文章吧!不過我程式已經寫好了就是了。 (2020/01/10 更新快速連結:《透過 Python API 將 WordPress 上發表的文章下載下來》)
自動發文
第一次使用這個套件的話,需要使用以下指令安裝:
pip3 install python-wordpress-xmlrpc
程式碼:
# -*- coding: utf-8 -*- import json from wordpress_xmlrpc import Client, WordPressPost from wordpress_xmlrpc.methods.posts import NewPost # Login with open('account.json', 'r', encoding='utf-8') as f: account = json.load(f) id = account['user'] password = account['password'] url = 'http://clay-atlas.com/xmlrpc.php' which = 'draft' wp = Client(url, id, password) post = WordPressPost() post.post_status = which post.title = 'API TEST' post.content = 'API TEST CONTENT' post.excerpt = 'API TEST EXCERPT' post.terms_names = { "post_tag": ['Python'], "category": ['Python'] } wp.call(NewPost(post))
Output:
http://clay-atlas.com/xmlrpc.php
網址的部份我當然是填我的,你應該要轉成你自己的哦。
然後我發表的文章類型是 "draft",如果不是想要發草稿、而是直接發布的話,應該使用 "publish"。
您好,如上述方法操作,會出現下列錯誤訊息;不知是什麼原因呢?
FileNotFoundError: [Errno 2] No such file or directory: ‘account.json’
謝謝您!
你好,很高興認識你!
這個報錯的意思是在當前目錄底下,沒有 “account.json” 這個檔案。
之所以我的程式會需要這個檔案,是因為我為了不透漏自己的帳號密碼,於是便將帳號密碼寫在 account.json 裡。
你可以在我程式當中 id 和 password 中填入自己的帳號密碼,比方說你帳號是 abc、密碼是 123,那麼就要寫成:
id = 'abc'
password = '123'
有問題歡迎再留言告訴我。
嗨,我完全照著你的程式,出現了一個 Error,我沒有使用 “account.json” 這個檔案
Traceback (most recent call last):
File “test.py”, line 15, in
wp = Client(url, id, password)
File “C:\Users\xxx\anaconda3\envs\virtual_workspace\lib\site-packages\wordpress_xmlrpc\base.py”, line 27, in __init__
raise ServerConnectionError(repr(e))
wordpress_xmlrpc.exceptions.ServerConnectionError:
我找不到你的聯繫方式,如果方便的話可以寄信到我email通知我,擔心看不到你的回覆,我試了很多方法都不行,
你好,很抱歉我找不到你的 email 位址,請容許我在這裡回覆。
我剛剛自己又重新測試了一次,至少在我的裝置上該套件可以正常運作。
我的 WordPress 當前版本為 5.6;Python 版本為 3.6.7;python-wordpress-xmlrpc 為 2.3。
查看了下此套件回報 “ServerConnectionError” 的錯誤訊息(如果你有興趣,我是在 https://pydoc.net/python-wordpress-xmlrpc/2.3/wordpress_xmlrpc.exceptions/ 這裡找到的),這裡僅僅只是註解著 “An error while attempting to connect to the XML-RPC endpoint.” 這樣的訊息。
由於我不確定你報錯訊息的全部內容,於是我假設是 xmlrpc 位址的問題,嘗試將我自己測試的 “http://clay-atlas.com/xmlrpc.php” 修改成錯誤的 “http://clay-atlas.com/xmlrc.php”。
在我修改成錯誤的位址後,得到了很接近的報錯訊息。不知道是否確認下你的 xmlrpc 的位址呢?
如果不是這個問題,歡迎提供更多的報錯訊息,我也會試著瞭解看看。
您好,請問我輸入我的網站xmlrpc 位址後,出現”Error 520 Web server is returning an unknown error” 應該要怎麼解決?感謝~
曾有朋友也遇過同樣的問題,他似乎是因為 Cloudflare 的緣故造成的。
或許也可以試試看不用透過 xmlrpc 自動發文的方法,比方說以下這篇教學:https://www.yannyann.com/2018/09/wp-rest-api-create-new-post-and-upload-image/
我嘗試使用了 WordPress REST API 發表文章、修改文章、刪除文章。目前運作得十分順利。我有另外開一篇文章並放上我所使用的程式碼,或許可以參考看看:https://clay-atlas.com/blog/2021/03/22/wordpress-cn-use-rest-api-python-to-operate/
你好!!我剛好在研究這個程式,我已經花了一整天,直到睡前才翻到你的這文章(。我想詢問的是,我的程式碼對照不少的人寫法,最終都得到這個錯誤
raise RemoteDisconnected(“Remote end closed connection without”
http.client.RemoteDisconnected: Remote end closed connection without response
套件也安裝了,python-wordpress-xmlrpc 為 2.3,wordpress版本為5.7,python為3.8。看了一些論壇討論有說到現在wordpress禁用XML-RPC。不知道是不是這個原因。但我不知道有什麼解決方法,再麻煩你協助了,感謝
你好,這個報錯我不確定是否真為 XML-RPC 的問題,也有可能是沒有使用 User-agent 導致被網站拒絕連線。
不過確實貴站的 XML-RPC 沒有回應。以我的網站為例,可以嘗試連入 https://clay-atlas.com/xmlrpc.php ,並顯示 “XML-RPC server accepts POST requests only.”。或許可以查詢網路上的一些教學是否能幫助您啟用 XML-RPC。
不過後來研究,發現使用 REST API 比 XML-RPC 發文更為安全。目前更傾向推薦大家去研究使用 REST API 來發文。
我嘗試使用了 WordPress REST API 發表文章、修改文章、刪除文章。目前運作得十分順利。我有另外開一篇文章並放上我所使用的程式碼,或許可以參考看看:https://clay-atlas.com/blog/2021/03/22/wordpress-cn-use-rest-api-python-to-operate/
謝謝您的提供,不過我也試過用這篇教REST API的程式碼發文,沒有顯示任何報錯,但網站還是沒有出現新的文章。
我嘗試使用了 WordPress REST API 發表文章、修改文章、刪除文章。目前運作得十分順利。我有另外開一篇文章並放上我所使用的程式碼,或許可以參考看看:https://clay-atlas.com/blog/2021/03/22/wordpress-cn-use-rest-api-python-to-operate/
非常感謝你專業的回覆,我會嘗試看看使用REST API,謝謝你的建議,到時候再來請教你,衷心感謝
我嘗試使用了 WordPress REST API 發表文章、修改文章、刪除文章。目前運作得十分順利。我有另外開一篇文章並放上我所使用的程式碼,或許可以參考看看:https://clay-atlas.com/blog/2021/03/22/wordpress-cn-use-rest-api-python-to-operate/
真的很感謝您熱心的幫助,之前在網路花了很多時間找使用 WordPress REST API 發表文章的方法,但看到的文章裡的程式碼都沒辦法成功發出文章,謝謝您還花時間寫了一篇使用 WordPress REST API 發文的文章,真的受益良多,現在已經能成功發文了,感謝您!點讚點讚!
謝謝回應,很高興你能順利發文。
當然,網路上其他文章之所以無法運作,可能也是因為時間比較久了的關係。
程式、網站總是日新月異。