コンテンツにスキップ

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

利用者:Bcxfubot/BOT作業依頼/log/20210213/prog

# [orig] replace.py
# URL張替
# 先頭
# ↓
# {{改名提案|新ページ名|{{subst:DATE}}|t=ノート:スポーツ 最近の出来事 2005年8月}}

import re
import time
import pywikibot
from urllib.parse import urlparse

replace_ato = "{{改名提案|新ページ名|{{subst:DATE}}|t=ノート:スポーツ 最近の出来事 2005年8月}}"
#max = 10
#max = 10
max = 120
sleepsec = 60

######################################################
# 処理モード
#procmode = 0
procmode = 1
######################################################

def get_domain(target):
    url = ""
    result = re.search ( "(http[^  ]+)", target)
    if result:
        url = result.group(1)
    else:
        return target
    parsed_uri = urlparse(url )
    result = '{uri.netloc}'.format(uri=parsed_uri)
    return result

def replace_page(pagetitle):
    site = pywikibot.Site()
    page = pywikibot.Page(site, pagetitle)
    #text = page.text
    #print(text)
    pagetext = page.text
    #print(linelist)

    newline = replace_ato
    newpagetitle = pagetitle.replace( ":スポーツ 最近の出来事 ", "Portal:最近の出来事/スポーツ/")
    print("newpagetitle=" + newpagetitle)
    if not "Portal" in newpagetitle:
        if not "利用者:Bcxfubot/bottest" in newpagetitle:
            raise Exception

    newline = newline.replace( "新ページ名", newpagetitle)
    print("newline=" + newline)
    if "新ページ名" in newline:
        raise Exception

    outtext = newline + "\n" + pagetext
    #print("outtext=" + outtext)
    #modflag = 0 # テスト中
    modflag = 1

    if modflag == 1:
        page.text = outtext
        if procmode == 1:
            #page.save("外部リンクの修正 " + target_https + " ([[Wikipedia:Bot|Bot]]による編集)")
            #page.save("外部リンクの修正 http:// -> https:// ([[Wikipedia:Bot|Bot]]による編集)")
            #page.save("外部リンクの修正 http:// -> https:// (" + get_domain( target ) + ") ([[Wikipedia:Bot|Bot]]による編集)")
            page.save("[[Wikipedia:Bot作業依頼#スポーツにおける最近の出来事の改名提案テンプレート貼り]] ([[Wikipedia:Bot|Bot]]による編集)")

# 処理対象のページ名をひとつ返す
# 処理対象がない場合は""を返す
def get_pagetitle():
    path = "list"
    with open(path) as f:
        for s_line in f:
            s_line = s_line.rstrip("\n")
            #print(s_line)
            #if not re.search(",sumi", s_line):
            if not s_line.endswith(",sumi"):
                return s_line
    return ""

# 処理した行にsumiをつける
def done_pagetitle(pagetitle):
    path = "list"
    alltext = ""
    with open(path) as f:
        for s_line in f:
            s_line = s_line.rstrip("\n")
            #print(s_line + "\n")
            #if re.search(pagetitle, s_line):
            if pagetitle == s_line:
                s_line = s_line + ",sumi"
            alltext += s_line + "\n"
    with open(path, mode='w') as f:
        f.write(alltext)
    return ""

def sub():
    num = 0
    for i in range(max):
        num = num + 1
        pagetitle = get_pagetitle()
        print("[" + str(num) + "/" + str(max) + "]" + ":" + "pagetitle=" + pagetitle)
        if pagetitle == "":
            break
        replace_page(pagetitle)
        done_pagetitle(pagetitle)
        
        if ( i < (max - 1) ):
            print("sleep(" + str(sleepsec) + ")")
            time.sleep(sleepsec)

def main():
    sub()
    print("done.")

if __name__ == '__main__':
    main()