利用者:Atmark-chan-Bot/scripts/checkDiff
表示
差分表示を行い、編集するかどうか確認する関数です。
注意
[編集]- このページは、万一スクリプトのデータが失われた際に支障をきたさないよう、Atmark-chanが使うバックアップとしても使用しています(それが主です)。
- 参考になさったりコピペしたり等は自由ですが、動作の保証はございません。
- 環境によっては動作しない可能性があります。
- Pywikibotが正常に設定されていることが前提です。
スクリプト
[編集]import pywikibot as pwb
from pywikibot import editor as editarticle
from pywikibot.tools.formatter import color_format
import subprocess as subp
def checkDiff(pageName, oTxt, nTxt):
eTxt = nTxt
editorExe = r"c:\windows\system32\notepad.exe" # 甲
txtFile = r"C:\hoge\fuga\piyo.txt" # 乙
while True:
print("------------------------------------------------------------")
pwb.output(color_format(
'<< {lightyellow}{0}{default} >>', pageName))
if oTxt == eTxt:
print(u"(相違点なし)")
else:
pwb.showDiff(oTxt, eTxt)
print(u"この変更を投稿しますか?")
print("> <Y>es" "\n" "> <N>o" "\n" "> <E>dit from new text" "\n" "> Edit from <o>riginal text" "\n" "> Abort: Ctrl+C")
choice = input().lower()
if choice == "y":
break
if choice == "n":
eTxt = None
break
if choice == "e":
with open(txtFile, mode='w') as f:
f.write(nTxt)
editor = subp.Popen([editorExe, txtFile])
editor.wait()
with open(txtFile) as f:
as_edited = f.read()
eTxt = as_edited
continue
if choice == "o":
with open(txtFile, mode='w') as f:
f.write(oTxt)
editor = subp.Popen([editorExe, txtFile])
editor.wait()
with open(txtFile) as f:
as_edited = f.read()
eTxt = as_edited
continue
pwb.output(color_format(
"{lightyellow}{0}{default}", "入力した内容が無効です。"))
return eTxt
使い方
[編集]事前設定
[編集]- 9行目(
#甲
の行)のr"c:\windows\system32\notepad.exe"
の中身は、テキストエディタの実行ファイルのフルパスにかえてください(最初のr
は除去しないでください)。 - 10行目(
#乙
の行)のr"C:\hoge\fuga\piyo.txt"
の中身は、テキストファイル(手動での編集時に使います、後述)の保存場所・ファイル名のフルパスにかえてください(r
については同様)。
使用方法
[編集]- 引数:
- 第一引数にはページ名を指定します。
- 第二引数には元の文字列を指定します。
- 第三引数には変更後の文字列を指定します。
なお、この関数では実際に編集・投稿は行いません。あくまで差分を「確認する」だけです。
使用例
[編集]import pywikibot as pwb
### ここで関数 checkDiff を定義します ###
oldTxt \
= 'hogehogefugafuga' \
+ '\n\n' \
+ 'piyopiyo' \
+ '\n\n' \
+ '{{foo}}'\
+ '\n' \
+ '{{bar}}' \
+ '\n\n' \
+ '{{DEFAULTSORT:baz}}' \
+ '\n' \
+ u'[[Category:甲]]' \
+ '\n' \
+ u'[[Category:乙]]' \
+ '\n' \
+ u'[[Category:丙]]'
newTxt \
= u'hogefugafuga123' \
+ '\n\n' \
+ 'piyopiyo456' \
+ '\n\n' \
+ '{{foo}}'\
+ '\n' \
+ '{{foobar}}' \
+ '\n' \
+ '{{template1}}' \
+ '\n\n' \
+ '{{DEFAULTSORT:baz}}' \
+ '\n' \
+ u'[[Category:甲]]' \
+ '\n' \
+ u'[[Category:丙]]'
ans = checkDiff('pagename', oldTxt, newTxt)
### ans の内容に従って動作させてください ###
この場合、以下の文字列の差分を比較します。
元の文字列 | 変更後の文字列 |
---|---|
hogehogefugafuga piyopiyo {{foo}} {{bar}} {{DEFAULTSORT:baz}} [[Category:甲]] [[Category:乙]] [[Category:丙]] |
hogefugafuga123 piyopiyo456 {{foo}} {{foobar}} {{template1}} {{DEFAULTSORT:baz}} [[Category:甲]] [[Category:丙]] |
操作方法
[編集]上記の場合を例にして説明します。
実行すると、以下のように表示されるはずです(色は必ずしも正確とは限りません)。
------------------------------------------------------------
<< page >>
@@ -1 +1 @@
- hogehogefugafuga
+ hogefugafuga123
@@ -3 +3 @@
- piyopiyo
+ piyopiyo456
@@ -6 +6,2 @@
- {{bar}}
+ {{foobar}}
+ {{template1}}
@@ -10 +10,0 @@
- [[Category:乙]]
この変更を投稿しますか?
> <Y>es
> <N>o
> <E>dit from new text
> Edit from <o>riginal text
> Abort: Ctrl+C
_
この解説は、書きかけの解説です。この解説を加筆・訂正などするのはAtmark-chanが行います。 |