「User:Horizon Bot」修訂間的差異

出自Stardew Valley Wiki
跳至導覽 跳至搜尋
(复制自旧版Wiki用户页)
 
(文本替换 - 替换“tt>”为“samp>”)
 
(未顯示由 1 位使用者於中間所作的 2 次修訂)
第1行: 第1行:
 
 本机器人由 [[User:Horizon98|Horizon98]] 维护,如果您对该机器人有建议或任何问题,请前往 [[User_talk:Horizon98|Horizon98的讨论页]] 发起讨论。
 
 本机器人由 [[User:Horizon98|Horizon98]] 维护,如果您对该机器人有建议或任何问题,请前往 [[User_talk:Horizon98|Horizon98的讨论页]] 发起讨论。
  
== 作用==
+
== 贡献==
  用于 修正各个页面的跨语言链接(已于2021年1月26日全部修正过)。
+
* 修正 各个页面的跨语言链接(已于2021年1月26日全部修正过)。
 
+
* 更新了所有可被赠出的物品页面的NPC偏好(已于2021年1月30日全部更新过)。
  以后会用于 修正重定向词条的链入页面或者折腾其他功能。
+
* 修正重定向词条的链入页面或者折腾其他功能。
  
 
==关于本机器人==
 
==关于本机器人==
 
 使用[https://www.mediawiki.org/wiki/Manual:Pywikibot Pywikibot]框架,由于本人编程能力不足,调用了现成的[https://www.mediawiki.org/wiki/Manual:Pywikibot/Scripts 脚本]。不排除未来可能会对脚本进行小修改后使用。
 
 使用[https://www.mediawiki.org/wiki/Manual:Pywikibot Pywikibot]框架,由于本人编程能力不足,调用了现成的[https://www.mediawiki.org/wiki/Manual:Pywikibot/Scripts 脚本]。不排除未来可能会对脚本进行小修改后使用。
  
  目前 采用半自动方式编辑,即机器人提交更改前进行手动确认。
+
 采用半自动方式编辑,即机器人提交更改前进行手动确认。
 +
 
 +
==如何使用Pywikibot==
 +
MediaWiki上有很多页面可供您参考,我主要参考了以下页面:
 +
# [https://www.mediawiki.org/wiki/Manual:Pywikibot/Installation#Install_Pywikibot 安装PywikiBot]
 +
# [https://www.mediawiki.org/wiki/Manual:Pywikibot/Third-party_Wiki_Quick_Start 在第三方网站上使用PywikiBot的快速上手指南]
 +
# [https://www.mediawiki.org/wiki/Manual:Pywikibot/Use_on_third-party_wikis 在第三方网站上使用PywikiBot]
 +
# [https://www.mediawiki.org/wiki/Manual:Pywikibot/replace.py 用于替换文本的replace.py的说明文档]
 +
# [https://www.mediawiki.org/wiki/Manual:Pywikibot/interwiki.py#Getting_started 用于自动更正或添加跨语言链接的interwiki.py的说明文档]
 +
# [https://www.mediawiki.org/wiki/Manual:Pywikibot/Scripts 所有脚本列表]
 +
 
 +
===一个简单的安装说明===
 +
'''如果你也想运行一个属于自己的Bot,请务必时刻关注Bot做出的编辑是否有误,如果Bot破坏了大量页面,首先会给这个Wiki带来很大的影响,其次还可能被管理员封号。'''
 +
 
 +
另外Bot账号应当与您的主账号不同,并需要及时向管理员申请将账号迁移到Bot用户组,以防Bot编辑时在“最近更改”这个页面刷屏。
 +
 
 +
下面的步骤是针对Windows的,也仅在本网站上测试过:
 +
 
 +
1. 已经安装Python3并配置环境变量。
 +
 
 +
2. 下载并解压[https://pywikibot.toolforge.org/ PywikiBot的相关文件]。
 +
 
 +
3. 打开解压后的文件夹,依次打开 <samp>pywikibot -> families</samp> 文件夹,在families文件夹下新建一个名为 <code>stardewvalleywiki_family.py</code> 的文件,使用适用于Python文件的编辑器打开并编辑其中的内容。配置文件如下(直接复制下列文本可能会有缩进问题,可参考families文件夹中的其他文件进行编辑):
 +
<pre># -*- coding: utf-8  -*-
 +
from pywikibot import family
 +
 
 +
 
 +
class Family(family.Family):
 +
   name = 'stardewvalleywiki' # family的名称,与这个文件名称的前缀应当一致。
 +
 
 +
   langs = {  # 该网站各个语言的子域名
 +
     'de': 'de.stardewvalleywiki.com',
 +
     'en': 'stardewvalleywiki.com',
 +
     'es': 'es.stardewvalleywiki.com',
 +
     'fr': 'fr.stardewvalleywiki.com',
 +
     'it': 'it.stardewvalleywiki.com',
 +
     'ja': 'ja.stardewvalleywiki.com',
 +
     'ko': 'ko.stardewvalleywiki.com',
 +
     'hu': 'hu.stardewvalleywiki.com',
 +
     'pt': 'pt.stardewvalleywiki.com',
 +
     'ru': 'ru.stardewvalleywiki.com',
 +
     'tr': 'tr.stardewvalleywiki.com',
 +
     'zh': 'zh.stardewvalleywiki.com'
 +
   }
 +
 
 +
   def scriptpath(self, code):
 +
     return '/mediawiki' # 网站上api.php页面的路径
 +
 
 +
   def protocol(self, code):
 +
     return 'HTTPS' # 使用https协议连接
 +
 
 +
   def version(self, code):
 +
     return "1.35.1" # 该网站正在使用的mediawiki版本</pre>
 +
 
 +
需要说明的是,<code><nowiki>return '/mediawiki'</nowiki></code> 这行中是告知本网站的api接口位于/mediawiki路径下,即[https://zh.stardewvalleywiki.com/mediawiki/api.php 这个网页]。有的网站会直接放在根目录下,即类似于 <code>xxwiki.com/api.php</code> 的网址,此时你需要将这一行修改为 <code><nowiki>return ''</nowiki></code> 。
 +
 
 +
最后一行1.35.1的版本号,你可以在[[Special:version]]这个页面找到,需要与当前网站使用的MediaWiki版本一致。
 +
 
 +
4. 打开解压后文件夹的根目录,即有 <samp>pwb.py</samp> 这个文件的目录,新建一个名为 <code>user-config.py</code> 的文件。使用适用于Python文件的编辑器打开并编辑其中的内容。配置文件如下(下列的配置仅适用于中文站点,其他语言的站点需要根据 <samp>stardewvalleywiki_family.py</samp> 中的配置将下面的内容稍作修改):
 +
<pre>mylang = 'zh'
 +
family = 'stardewvalleywiki'
 +
usernames['stardewvalleywiki']['zh'] = '账号名称'
 +
authenticate['zh.stardewvalleywiki.com'] = ('账号名称','账号密码')
 +
noisysleep = 30.0</pre>
 +
 
 +
其中nosiysleep这个参数设置的应该是Bot提交编辑更改后,等待网站响应的最大时间(秒),超时后会重试。你也可以根据自己的需要进行修改。
 +
 
 +
5. 打开终端工具(Powershell、Windows Terminal等等),先用cd命令定位到你解压一开始下载的文件的目录(目录中有名为 <samp>pwb.py</samp> 的文件)。
 +
 
 +
6. 输入 <code>python pwb.py login</code> 尝试登录,第一次登录时需要输入账号密码。如果后面输出 <code>Logged in on stardewvalleywiki:zh as xxx</code> 就说明登录成功了。
 +
 
 +
7. 试着使用你的机器人做出一次编辑。找到一个只有很少页面的分类(例如:[[:Category:餐桌]])。输入以下命令:
 +
<pre>python pwb.py add_text -cat:餐桌 -text:"This is a Test." -except:"\{\{([Tt]emplate:|)[Dd]ocumentation [Ss]ubpage" -up</pre>
 +
 
 +
然后在这个分类下的所有页面最顶部,会被机器人添加“This is a Test”的文字。(记得手动去删掉。)
 +
 
 +
===一个简单的使用说明===
 +
个人用了这么久,觉得最常用的还是[https://www.mediawiki.org/wiki/Manual:Pywikibot/replace.py replace.py],可以批量替换文本。(当然[https://zh.stardewvalleywiki.com/Special:%E6%9B%BF%E6%8D%A2%E6%96%87%E6%9C%AC Special:替换文本]这个页面应该也能做到且效率更高,但是需要管理员权限。)
 +
 
 +
就用这个脚本举例吧。(个人其实对这方面并不是特别了解,因此最好去参考官方文档)
 +
 
 +
一行命令应该长这样:<code>python pwb.py 脚本名称 参数</code>
 +
 
 +
先举两个例子:
 +
<pre>python pwb.py replace -page:救生圈 "信件" "邮件"</pre>
 +
上面这行命令的意思是将“救生圈”这个页面中所有“信件”替换成“邮件”。
 +
 
 +
<pre>python pwb.py replace -namespace:0 -start "路人甲" "路人乙"</pre>
 +
上面这行命令是遍历主命名空间下的所有条目,将各个条目中的“路人甲”替换为“路人乙”。
 +
 
 +
然后是我最常用的几个参数:
 +
* -simulate ——> 通常加在一行命令的最后,用于模拟编辑。即在机器人提交编辑前停止运行,不影响其他参数。
 +
* -page:页面名称 ——> 在指定页面上运行
 +
* -ref:页面名称 ——> 在所有链入该页面的页面上运行
 +
* -namespace(或-ns):命名空间序号 ——> 限制遍历的范围为给定的命名空间。例如[https://zh.stardewvalleywiki.com/Special:%E6%89%80%E6%9C%89%E9%A1%B5%E9%9D%A2?from=&to=&namespace=570&hideredirects=1 模组]和[https://zh.stardewvalleywiki.com/Special:%E6%89%80%E6%9C%89%E9%A1%B5%E9%9D%A2?from=&to=&namespace=1&hideredirects=1 Talk]便是不同的命名空间,[https://zh.stardewvalleywiki.com/Special:%E6%89%80%E6%9C%89%E9%A1%B5%E9%9D%A2?from=&to=&namespace=0&hideredirects=1 主]空间通常是最常被编辑的。
 +
* -cat:分类名称 ——> 在指定分类下的所有页面上运行
 +
* -regex "原来的文本(正则表达式)" "替代的文本(普通模式)" ——> 在筛选原始文本时使用正则表达式
 +
 
 +
以上几个参数除了最后的-regex,其他的一般在所有脚本上通用。
 +
 
 +
===批量撤销Bot的编辑===
 +
如果Bot做出了大量错误的编辑,可以使用[https://www.mediawiki.org/wiki/Manual:Pywikibot/revertbot.py revertbot.py]批量撤销编辑。
 +
 
 +
 
 +
 
 +
以上便是我在维护Bot时的一些经验,很浅显,也可能有些小错误。如果你也想维护一个Bot,希望这对你有帮助!

於 2021年11月4日 (四) 18:53 的最新修訂

本機械人由 Horizon98 維護,如果您對該機械人有建議或任何問題,請前往 Horizon98的討論頁 發起討論。

貢獻

  • 修正了各個頁面的跨語言連結(已於2021年1月26日全部修正過)。
  • 更新了所有可被贈出的物品頁面的NPC偏好(已於2021年1月30日全部更新過)。
  • 修正重定向詞條的鏈入頁面或者折騰其他功能。

關於本機械人

使用Pywikibot框架,由於本人編程能力不足,調用了現成的腳本。不排除未來可能會對腳本進行小修改後使用。

採用半自動方式編輯,即機械人提交更改前進行手動確認。

如何使用Pywikibot

MediaWiki上有很多頁面可供您參考,我主要參考了以下頁面:

  1. 安裝PywikiBot
  2. 在第三方網站上使用PywikiBot的快速上手指南
  3. 在第三方網站上使用PywikiBot
  4. 用於替換文本的replace.py的說明文檔
  5. 用於自動更正或添加跨語言連結的interwiki.py的說明文檔
  6. 所有腳本列表

一個簡單的安裝說明

如果你也想運行一個屬於自己的Bot,請務必時刻關注Bot做出的編輯是否有誤,如果Bot破壞了大量頁面,首先會給這個Wiki帶來很大的影響,其次還可能被管理員封號。

另外Bot賬號應當與您的主賬號不同,並需要及時向管理員申請將賬號遷移到Bot用戶組,以防Bot編輯時在「最近更改」這個頁面刷屏。

下面的步驟是針對Windows的,也僅在本網站上測試過:

1. 已經安裝Python3並配置環境變量。

2. 下載並解壓PywikiBot的相關文件

3. 打開解壓後的文件夾,依次打開 pywikibot -> families 文件夾,在families文件夾下新建一個名為 stardewvalleywiki_family.py 的文件,使用適用於Python文件的編輯器打開並編輯其中的內容。配置文件如下(直接複製下列文本可能會有縮進問題,可參考families文件夾中的其他文件進行編輯):

# -*- coding: utf-8  -*-
from pywikibot import family


class Family(family.Family):
    name = 'stardewvalleywiki' # family的名称,与这个文件名称的前缀应当一致。

    langs = {  # 该网站各个语言的子域名
        'de': 'de.stardewvalleywiki.com',
        'en': 'stardewvalleywiki.com',
        'es': 'es.stardewvalleywiki.com',
        'fr': 'fr.stardewvalleywiki.com',
        'it': 'it.stardewvalleywiki.com',
        'ja': 'ja.stardewvalleywiki.com',
        'ko': 'ko.stardewvalleywiki.com',
        'hu': 'hu.stardewvalleywiki.com',
        'pt': 'pt.stardewvalleywiki.com',
        'ru': 'ru.stardewvalleywiki.com',
        'tr': 'tr.stardewvalleywiki.com',
        'zh': 'zh.stardewvalleywiki.com'
    }

    def scriptpath(self, code):
        return '/mediawiki' # 网站上api.php页面的路径

    def protocol(self, code):
        return 'HTTPS' # 使用https协议连接

    def version(self, code):
        return "1.35.1" # 该网站正在使用的mediawiki版本

需要說明的是,return '/mediawiki' 這行中是告知本網站的api接口位於/mediawiki路徑下,即這個網頁。有的網站會直接放在根目錄下,即類似於 xxwiki.com/api.php 的網址,此時你需要將這一行修改為 return ''

最後一行1.35.1的版本號,你可以在Special:version這個頁面找到,需要與當前網站使用的MediaWiki版本一致。

4. 打開解壓後文件夾的根目錄,即有 pwb.py 這個文件的目錄,新建一個名為 user-config.py 的文件。使用適用於Python文件的編輯器打開並編輯其中的內容。配置文件如下(下列的配置僅適用於中文站點,其他語言的站點需要根據 stardewvalleywiki_family.py 中的配置將下面的內容稍作修改):

mylang = 'zh'
family = 'stardewvalleywiki'
usernames['stardewvalleywiki']['zh'] = '账号名称'
authenticate['zh.stardewvalleywiki.com'] = ('账号名称','账号密码')
noisysleep = 30.0

其中nosiysleep這個參數設置的應該是Bot提交編輯更改後,等待網站響應的最大時間(秒),超時後會重試。你也可以根據自己的需要進行修改。

5. 打開終端工具(Powershell、Windows Terminal等等),先用cd命令定位到你解壓一開始下載的文件的目錄(目錄中有名為 pwb.py 的文件)。

6. 輸入 python pwb.py login 嘗試登錄,第一次登錄時需要輸入賬號密碼。如果後面輸出 Logged in on stardewvalleywiki:zh as xxx 就說明登錄成功了。

7. 試着使用你的機械人做出一次編輯。找到一個只有很少頁面的分類(例如:Category:餐桌)。輸入以下命令:

python pwb.py add_text -cat:餐桌 -text:"This is a Test." -except:"\{\{([Tt]emplate:|)[Dd]ocumentation [Ss]ubpage" -up

然後在這個分類下的所有頁面最頂部,會被機械人添加「This is a Test」的文字。(記得手動去刪掉。)

一個簡單的使用說明

個人用了這麼久,覺得最常用的還是replace.py,可以批量替換文本。(當然Special:替換文本這個頁面應該也能做到且效率更高,但是需要管理員權限。)

就用這個腳本舉例吧。(個人其實對這方面並不是特別了解,因此最好去參考官方文檔)

一行命令應該長這樣:python pwb.py 脚本名称 参数

先舉兩個例子:

python pwb.py replace -page:救生圈 "信件" "邮件"

上面這行命令的意思是將「救生圈」這個頁面中所有「信件」替換成「郵件」。

python pwb.py replace -namespace:0 -start "路人甲" "路人乙"

上面這行命令是遍歷主命名空間下的所有條目,將各個條目中的「路人甲」替換為「路人乙」。

然後是我最常用的幾個參數:

  • -simulate ——> 通常加在一行命令的最後,用於模擬編輯。即在機械人提交編輯前停止運行,不影響其他參數。
  • -page:頁面名稱 ——> 在指定頁面上運行
  • -ref:頁面名稱 ——> 在所有鏈入該頁面的頁面上運行
  • -namespace(或-ns):命名空間序號 ——> 限制遍歷的範圍為給定的命名空間。例如模組Talk便是不同的命名空間,空間通常是最常被編輯的。
  • -cat:分類名稱 ——> 在指定分類下的所有頁面上運行
  • -regex "原來的文本(正則表達式)" "替代的文本(普通模式)" ——> 在篩選原始文本時使用正則表達式

以上幾個參數除了最後的-regex,其他的一般在所有腳本上通用。

批量撤銷Bot的編輯

如果Bot做出了大量錯誤的編輯,可以使用revertbot.py批量撤銷編輯。


以上便是我在維護Bot時的一些經驗,很淺顯,也可能有些小錯誤。如果你也想維護一個Bot,希望這對你有幫助!