Skip to content

[Python] 透過 python-wordpress-xmlrpc 套件在 WordPress 上自動發文

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"。

16 thoughts on “[Python] 透過 python-wordpress-xmlrpc 套件在 WordPress 上自動發文”

  1. longwaterboy

    您好,如上述方法操作,會出現下列錯誤訊息;不知是什麼原因呢?

    FileNotFoundError: [Errno 2] No such file or directory: ‘account.json’

    謝謝您!

    1. ccs96307

      你好,很高興認識你!
      這個報錯的意思是在當前目錄底下,沒有 “account.json” 這個檔案。
      之所以我的程式會需要這個檔案,是因為我為了不透漏自己的帳號密碼,於是便將帳號密碼寫在 account.json 裡。
      你可以在我程式當中 id 和 password 中填入自己的帳號密碼,比方說你帳號是 abc、密碼是 123,那麼就要寫成:

      id = 'abc'
      password = '123'

      有問題歡迎再留言告訴我。

  2. jyii

    嗨,我完全照著你的程式,出現了一個 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通知我,擔心看不到你的回覆,我試了很多方法都不行,

  3. ccs96307

    你好,很抱歉我找不到你的 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 的位址呢?
    如果不是這個問題,歡迎提供更多的報錯訊息,我也會試著瞭解看看。

  4. 您好,請問我輸入我的網站xmlrpc 位址後,出現”Error 520 Web server is returning an unknown error” 應該要怎麼解決?感謝~

    1. ccs96307

      曾有朋友也遇過同樣的問題,他似乎是因為 Cloudflare 的緣故造成的。
      或許也可以試試看不用透過 xmlrpc 自動發文的方法,比方說以下這篇教學:https://www.yannyann.com/2018/09/wp-rest-api-create-new-post-and-upload-image/

    2. ccs96307

      我嘗試使用了 WordPress REST API 發表文章、修改文章、刪除文章。目前運作得十分順利。我有另外開一篇文章並放上我所使用的程式碼,或許可以參考看看:https://clay-atlas.com/blog/2021/03/22/wordpress-cn-use-rest-api-python-to-operate/

  5. 你好!!我剛好在研究這個程式,我已經花了一整天,直到睡前才翻到你的這文章(。我想詢問的是,我的程式碼對照不少的人寫法,最終都得到這個錯誤
    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。不知道是不是這個原因。但我不知道有什麼解決方法,再麻煩你協助了,感謝

    1. ccs96307

      你好,這個報錯我不確定是否真為 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 來發文。

    2. ccs96307

      我嘗試使用了 WordPress REST API 發表文章、修改文章、刪除文章。目前運作得十分順利。我有另外開一篇文章並放上我所使用的程式碼,或許可以參考看看:https://clay-atlas.com/blog/2021/03/22/wordpress-cn-use-rest-api-python-to-operate/

  6. 謝謝您的提供,不過我也試過用這篇教REST API的程式碼發文,沒有顯示任何報錯,但網站還是沒有出現新的文章。

    1. ccs96307

      我嘗試使用了 WordPress REST API 發表文章、修改文章、刪除文章。目前運作得十分順利。我有另外開一篇文章並放上我所使用的程式碼,或許可以參考看看:https://clay-atlas.com/blog/2021/03/22/wordpress-cn-use-rest-api-python-to-operate/

  7. 東東

    非常感謝你專業的回覆,我會嘗試看看使用REST API,謝謝你的建議,到時候再來請教你,衷心感謝

    1. ccs96307

      我嘗試使用了 WordPress REST API 發表文章、修改文章、刪除文章。目前運作得十分順利。我有另外開一篇文章並放上我所使用的程式碼,或許可以參考看看:https://clay-atlas.com/blog/2021/03/22/wordpress-cn-use-rest-api-python-to-operate/

  8. 真的很感謝您熱心的幫助,之前在網路花了很多時間找使用 WordPress REST API 發表文章的方法,但看到的文章裡的程式碼都沒辦法成功發出文章,謝謝您還花時間寫了一篇使用 WordPress REST API 發文的文章,真的受益良多,現在已經能成功發文了,感謝您!點讚點讚!

    1. ccs96307

      謝謝回應,很高興你能順利發文。
      當然,網路上其他文章之所以無法運作,可能也是因為時間比較久了的關係。
      程式、網站總是日新月異。

Leave a Reply取消回覆

Exit mobile version