用戶:機娘霜天醬
跳至導覽
跳至搜尋
機娘霜天醬是贯井羽优的草莓胖次[更多]操作的機械人,主要用於閃耀幻想曲專題維護。
| 這個用戶的母語是Python。 |
任務
閃耀幻想曲專題維護——在《閃耀幻想曲》追加新卡後進行相關編輯:
- 角色主條目添加劇情、卡片信息,如:Special:差異/5205603/6105081
- Template:Kiraraf角色卡片列表添加卡片信息,如:Special:差異/6102480/6105123
- Template:篩選功能/閃耀幻想曲卡片添加卡片信息,如:Special:差異/6063740/6105125
- 模塊:kiraraf角色信息添加新加入遊戲的角色信息,如:Special:差異/6028302/6105310
- Template talk:kiraraf角色簡介提醒添加缺少的角色簡介,如:Special:固定連結/6103433
近期活動
2022年6月28日 (星期二)
- 18:212022年6月28日 (二) 18:21 差異 歷史 +114 Template:Kiraraf角色卡片列表 添加新卡: //Edit via Pywikibot
- 18:142022年6月28日 (二) 18:14 差異 歷史 +84 Module:Kiraraf角色信息 新角色參戰:小野坂紗織 //Edit via Pywikibot
- 17:532022年6月28日 (二) 17:53 差異 歷史 +114 Template:Kiraraf角色卡片列表 添加新卡: //Edit via Pywikibot
- 17:522022年6月28日 (二) 17:52 差異 歷史 +241 葉山光 krf角色主條目維護: //Edit via Pywikibot
- 16:202022年6月28日 (二) 16:20 差異 歷史 +322 Template:篩選功能/閃耀幻想曲卡片 添加新卡 //Edit via Pywikibot
- 16:202022年6月28日 (二) 16:20 差異 歷史 +114 Template:Kiraraf角色卡片列表 添加新卡: //Edit via Pywikibot
- 16:192022年6月28日 (二) 16:19 差異 歷史 +137 閃耀幻想曲:柯爾克 krf角色主條目維護:劇情更新失敗,請手動添加 //Edit via Pywikibot 目前
- 16:032022年6月28日 (二) 16:03 差異 歷史 +152 猿渡宇希 krf角色主條目維護:劇情更新失敗,請手動添加 //Edit via Pywikibot
- 16:032022年6月28日 (二) 16:03 差異 歷史 +137 真中蒼 krf角色主條目維護:劇情更新失敗,請手動添加 //Edit via Pywikibot
- 16:032022年6月28日 (二) 16:03 差異 歷史 +77 葉山光 krf角色主條目維護:劇情更新失敗,請手動添加 //Edit via Pywikibot
程序代碼
| 展開查看 |
|---|
import pandas as pd
import pywikibot as pwb
import os
import math
import sys
import time
import re
def wait_exit(errinfo):
print(errinfo)
print("程序將在30秒後自動關閉")
time.sleep(30)
sys.exit()
def inputnotice():
print("\n指令說明:")
print("添加卡片-輸入7位卡片代碼,如:1000200")
print("添加全部-輸入all")
print("清空列表-輸入clean")
print("刪除卡片-輸入x+7位卡片代碼,如:x1000200")
print("結束輸入-輸入end")
print("*添加全部是指將krfcard.csv中的全部卡片添加至列表")
a=input("請輸入指令:")
return a
#導入角色數據和卡片數據
print("正在從krfchara.csv導入角色數據……")
df_ch=pd.read_csv("C:/Users/萬類霜天/Desktop/kirafan/krfedit/krfchara.csv",index_col="no")
print("角色數據導入完畢")
for i in df_ch.index:
if "{{!}}" in df_ch.loc[i,"main"]:
df_ch.loc[i,"main"]=re.sub("{{!}}.+","",df_ch.loc[i,"main"])
print("正在從krfcard.csv導入卡片數據……")
df_cd=pd.read_csv("C:/Users/萬類霜天/Desktop/kirafan/krfedit/krfcard.csv",index_col="no")
print("卡片數據導入完畢")
df_cd=df_cd.fillna("")
#輸入活動信息
info=input(r"請輸入活動信息(如:2020年{{0}}7月29日的活動《暑假!作業大作戰》):")
id=[]
a=inputnotice()
#添加要操作的卡片列表
while(1==1):
os.system('cls')
if(a=="end"):
print("添加完畢!")
break
elif(a=="all"):
for idn in df_cd.index:
num=int(idn)
chnum=math.floor(num/1000)
if not(idn in id):
id.append(idn)
print(f'添加成功:{df_ch.loc[chnum,"chara"]}({df_cd.loc[num,"pre"]}{df_cd.loc[num,"ele"]}之{df_cd.loc[num,"job"]}){df_cd.loc[num,"sup"]}')
else:
print(f'已在列表:{df_ch.loc[chnum,"chara"]}({df_cd.loc[num,"pre"]}{df_cd.loc[num,"ele"]}之{df_cd.loc[num,"job"]}){df_cd.loc[num,"sup"]}')
elif(a=="clean"):
id=[]
print("清空列表")
elif(re.match("\d{7}",a)):
if(a in id):
print(f'已在列表:{df_ch.loc[chnum,"chara"]}({df_cd.loc[num,"pre"]}{df_cd.loc[num,"ele"]}之{df_cd.loc[num,"job"]}){df_cd.loc[num,"sup"]}')
else:
num=int(a)
chnum=math.floor(num/1000)
if not (chnum in df_ch.index):
print("未查詢到相應角色,添加失敗")
else:
if not (num in df_cd.index):
print("未找到卡片數據,添加失敗")
else:
id.append(int(a))
print(f'添加成功:{df_ch.loc[chnum,"chara"]}({df_cd.loc[num,"pre"]}{df_cd.loc[num,"ele"]}之{df_cd.loc[num,"job"]}){df_cd.loc[num,"sup"]}')
elif(re.match("x\d{7}",a)):
a=a.replace("x","")
if(a in id):
id.remove(a)
num=int(a)
chnum=math.floor(num/1000)
print(f'刪除成功:{df_ch.loc[chnum,"chara"]}({df_cd.loc[num,"pre"]}{df_cd.loc[num,"ele"]}之{df_cd.loc[num,"job"]}){df_cd.loc[num,"sup"]}')
else:
print("未找到該卡,刪除失敗")
else:
print("無效指令")
print("\n列表中卡片:")
for idn in id:
num=int(idn)
chnum=math.floor(num/1000)
print(f'{df_ch.loc[chnum,"chara"]}({df_cd.loc[num,"pre"]}{df_cd.loc[num,"ele"]}之{df_cd.loc[num,"job"]}){df_cd.loc[num,"sup"]}')
a=inputnotice()
#定義狀態列表
ids={}
for idm in id:
ids[idm]=""
#編輯角色主條目
for idn in id:
check=""
os.system('cls')
ids[idn]="(主條目編輯中)"
print("列表中卡片:")
for idm in id:
num=int(idm)
chnum=math.floor(num/1000)
print(f'{df_ch.loc[chnum,"chara"]}({df_cd.loc[num,"pre"]}{df_cd.loc[num,"ele"]}之{df_cd.loc[num,"job"]}){df_cd.loc[num,"sup"]}{ids[idm]}')
print("")
num=int(idn)
chnum=math.floor(num/1000)
rare=math.floor(((num+1)/1000-math.floor(num/1000))*10)+3
cardname=f'{df_ch.loc[chnum,"chara"]}({df_cd.loc[num,"pre"]}{df_cd.loc[num,"ele"]}之{df_cd.loc[num,"job"]}){df_cd.loc[num,"sup"]}'
page = pwb.Page(pwb.Site(), df_ch.loc[chnum,"main"])
origintext=page.text
if not page.text:
print("角色主條目未創建,跳過編輯")
ids[idn]="(角色主條目未創建)"
continue
if("{{kiraraf卡表" not in page.text):
print("未找到卡表,請手動添加卡片")
check += "未找到卡表;"
elif(f'|{cardname}|' in page.text):
print("卡片已存在")
elif(f'|{rare}{rare{df_cd.loc[num,"ele"]}之{df_cd.loc[num,"job"]}=',f'|{rare}icon|{cardname}|evo=true}}}}<br>')
else:
print("卡片添加成功")
page.text = page.text.replace(r"{{kiraraf卡表",f'{{{{kiraraf卡表\n|{rare{df_cd.loc[num,"ele"]}之{df_cd.loc[num,"job"]}= {{{{kf-table|icon|{cardname}|evo=true}}}}')
if not info:
print("跳過更新劇情")
elif(info in page.text):
print("劇情信息已存在")
elif("*作為主要角色:" in page.text):
print("劇情信息添加成功")
note=re.search("日的活動《(.+》)\n\*?[^\*]",page.text)
page.text=re.sub(note.group(1),note.group(1)+"\n**"+info,page.text,count=1)
elif("'''活動劇情'''(具體的活動劇情請在遊戲中查看,或者觀看[[閃耀幻想曲/年表#活動列表|活動列表]]處的B站漢化劇情)" in page.text):
print("劇情信息添加成功")
page.text=re.sub("的B站漢化劇情)","的B站漢化劇情)\n\n*作為主要角色:\n**"+info,page.text,count=1)
elif("=== 卡片索引 ===" in page.text):
print("劇情信息添加成功")
page.text=re.sub("=== 卡片索引 ===","'''活動劇情'''(具體的活動劇情請在遊戲中查看,或者觀看[[閃耀幻想曲/年表#活動列表|活動列表]]處的B站漢化劇情)\n\n*作為主要角色:\n**"+info+"\n\n=== 卡片索引 ===",page.text,count=1)
else:
print("劇情信息添加失敗")
check += "劇情信息添加失敗"
if not origintext==page.text:
page.save(summary="krf角色主條目維護:"+check+" //Edit via Pywikibot",tags="Automation tool")
ids[idn]="(已完成)"
if(check!=""):
ids[idn]="(未找到卡表)"
os.system('cls')
print("列表中卡片:")
for idm in id:
num=int(idm)
chnum=math.floor(num/1000)
print(f'{df_ch.loc[chnum,"chara"]}({df_cd.loc[num,"pre"]}{df_cd.loc[num,"ele"]}之{df_cd.loc[num,"job"]}){df_cd.loc[num,"sup"]}{ids[idm]}')
#編輯Template:Kiraraf角色卡片列表
check=""
print("\n開始編輯Template:Kiraraf角色卡片列表")
page = pwb.Page(pwb.Site(), "Template:Kiraraf角色卡片列表")
origintext=page.text
for idn in id:
num=int(idn)
chnum=math.floor(num/1000)
rare=math.floor(((num+1)/1000-math.floor(num/1000))*10)+3
order=num%10
cardinfo=f'{df_cd.loc[num,"pre"]}{df_cd.loc[num,"ele"]}之{df_cd.loc[num,"job"]}{df_cd.loc[num,"sup"]}'
cardname=f'{df_ch.loc[chnum,"chara"]}({df_cd.loc[num,"pre"]}{df_cd.loc[num,"ele"]}之{df_cd.loc[num,"job"]}){df_cd.loc[num,"sup"]}'
if ("|%s={{array|id=%s"%(df_ch.loc[chnum,"chara"],df_ch.loc[chnum,"chara"])) not in page.text:
print("添加失敗:"+cardname)
check += df_ch.loc[chnum,"chara"]+"添加失敗;"
continue
if(rare==5):
note=re.compile("(\|%s={{array\|id=%s(\n\|5,[^}\n]+){%s})"%(df_ch.loc[chnum,"chara"],df_ch.loc[chnum,"chara"],order))
else:
note=re.compile("(\|%s={{array\|id=%s(\n\|5,[^}\n]+)*(\n\|4,.+){%s})"%(df_ch.loc[chnum,"chara"],df_ch.loc[chnum,"chara"],order))
result=note.findall(page.text)
pattern=re.sub("\|","\|",result[0][0])
newtext=result[0][0]+"\n|"+str(rare)+","+cardinfo
if newtext in page.text:
print("已在列表:"+cardname)
else:
page.text=re.sub(pattern,newtext,page.text,count=1)
print("添加成功:"+cardname)
if not origintext==page.text:
page.save(summary="添加新卡:"+check+" //Edit via Pywikibot",tags="Automation tool")
#編輯Template:篩選功能/閃耀幻想曲卡片
print("\n開始編輯Template:篩選功能/閃耀幻想曲卡片")
page = pwb.Page(pwb.Site(), "Template:篩選功能/閃耀幻想曲卡片")
origintext=page.text
for idn in id:
num=int(idn)
chnum=math.floor(num/1000)
rare=math.floor(((num+1)/1000-math.floor(num/1000))*10)+3
cardname=f'{df_ch.loc[chnum,"chara"]}({df_cd.loc[num,"pre"]}{df_cd.loc[num,"ele"]}之{df_cd.loc[num,"job"]}){df_cd.loc[num,"sup"]}'
mark=""
if df_ch.loc[chnum,"chara"] in page.text:
note=re.compile("\| {{#invoke:kiraraf篩選\|main\|\d\|%s\|.+}}"%df_ch.loc[chnum,"chara"])
mark="\n|-"
elif df_ch.loc[chnum,"title"] in page.text:
for i in range(1,chnum%10+1,1):
if df_ch.loc[chnum-i,"chara"] in page.text:
note=re.compile("\| {{#invoke:kiraraf篩選\|main\|\d\|%s\|.+}}"%df_ch.loc[chnum-i,"chara"])
mark="\n|-"
break
note=re.compile("<!--%s-->"%df_ch.loc[chnum,"title"])
else:
page.text=re.sub("\|}","\n|-<!--%s-->\n|}"%df_ch.loc[chnum,"title"],page.text)
note=re.compile("<!--%s-->"%df_ch.loc[chnum,"title"])
result=note.findall(page.text)
pattern=re.sub("\|","\|",result[-1])
newtext="\n| {{#invoke:kiraraf篩選|main|"+str(rare)+"|"+df_ch.loc[chnum,"chara"]+"|"+df_cd.loc[num,"ele"]+"|"+df_cd.loc[num,"job"]
if df_cd.loc[num,"pre"]:
newtext += "|pre="+df_cd.loc[num,"pre"]
if df_cd.loc[num,"sup"]:
newtext += "|suf="+df_cd.loc[num,"sup"]
if df_cd.loc[num,"type"]=="活動兌換卡" or (df_cd.loc[num,"type"]=="期間限定卡" and not df_cd.loc[num,"pre"]):
newtext += "|type="+df_cd.loc[num,"type"]
newtext += "}}"
if newtext in page.text:
print("已在列表:"+cardname)
else:
page.text=re.sub(pattern,result[-1]+mark+newtext,page.text,count=1)
print("添加成功:"+cardname)
if not origintext==page.text:
page.save(summary="添加新卡 //Edit via Pywikibot",tags="Automation tool")
#檢查[[模塊:Kiraraf角色信息]]並補漏
print("\n開始檢查[[模塊:Kiraraf角色信息]]並補漏")
page = pwb.Page(pwb.Site(), "模塊:Kiraraf角色信息")
origintext=page.text
newchara=""
for idn in id:
chnum=math.floor(idn/1000)
if df_ch.loc[chnum,"chara"] in page.text:
print("已在列表:"+df_ch.loc[chnum,"chara"])
else:
titleset='titleset["%s"]={"%s","%s","%s"}'%(df_ch.loc[chnum,"chara"],df_ch.loc[chnum,"main"],df_ch.loc[chnum,"title"],df_ch.loc[chnum,"cv"])
if df_ch.loc[chnum,"title"] in page.text:
note=re.compile('titleset\[".+"\]={".+","%s",".+"}'%df_ch.loc[chnum,"title"])
result=note.findall(page.text)
pattern=re.sub("\[","\[",result[-1])
pattern=re.sub("\]","\]",pattern)
page.text=re.sub(pattern,result[-1]+"\n"+titleset,page.text,count=1)
else:
page.text=re.sub("--如廣播需用未實卡化的角色,請置於本註釋下方",titleset+"\n--如廣播需用未實卡化的角色,請置於本註釋下方",page.text,count=1)
print("添加成功:"+df_ch.loc[chnum,"chara"])
if newchara:
newchara += "、"+df_ch.loc[chnum,"chara"]
else:
newchara += ":"+df_ch.loc[chnum,"chara"]
if not origintext==page.text:
page.save(summary="新角色參戰"+newchara+" //Edit via Pywikibot",tags="Automation tool")
#檢查[[模塊:Kiraraf角色簡介/Title]]並發送補漏提醒
print("\n檢查[[模塊:Kiraraf角色簡介/Title]]並發送補漏提醒")
page = pwb.Page(pwb.Site(), "模塊:Kiraraf角色簡介/Title")
page2 = pwb.Page(pwb.Site(), "Template_talk:Kiraraf角色簡介")
newchara=""
for idn in id:
chnum=math.floor(idn/1000)
if '["%s"]'%df_ch.loc[chnum,"chara"] in page.text:
print("已在列表:"+df_ch.loc[chnum,"chara"])
elif df_ch.loc[chnum,"chara"] in page2.text:
print("已經提醒:"+df_ch.loc[chnum,"chara"])
else:
print("新增參戰:"+df_ch.loc[chnum,"chara"])
if newchara:
newchara += "、"+df_ch.loc[chnum,"chara"]
else:
newchara += ":"+df_ch.loc[chnum,"chara"]
if newchara:
page.text += "\n\n== 提醒:新角色參戰 ==\n新角色參戰"+newchara+"\n\n請及時補充角色簡介哦~ ——~~~~"
page2.save(summary="新參戰提醒 //Edit via Pywikibot",tags="Automation tool")
print("\n本次維護已完成")
|