コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

利用者: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
_