Fet-Fe

2024年11月8日 (金)に参加
>Fet-Fe
>Fet-Fe
48行目: 48行目:
ROOT: Final[str] = "https://krsw-wiki.org"
ROOT: Final[str] = "https://krsw-wiki.org"
ARCHIVE: Final[str] = "https://archive.ph"
ARCHIVE: Final[str] = "https://archive.ph"
yobi: re.Pattern = re.compile(r'\([日月火水木金土]\)')
YOBI: Final[re.Pattern] = re.compile(r'\([日月火水木金土]\)')
archive_wip_url_re: re.Pattern = re.compile(r'document\.location\.replace\(\"(https:\/\/archive\.ph\/wip\/\S+)\"\)')
ARCHIVE_WIP_URL_RE: Final[re.Pattern] = re.compile(r'document\.location\.replace\(\"(https:\/\/archive\.ph\/wip\/\S+)\"\)')


# curlコマンドでリクエストを送る
# curlコマンドでリクエストを送る
def curl(arg: str) -> str:
def curl(arg: Final[str]) -> str:
   sleep(1) # DoS予防
   sleep(1) # DoS予防
   return subprocess.run('curl -sSL ' + arg, stdout=subprocess.PIPE, shell=True).stdout.decode('utf-8')
   return subprocess.run('curl -sSL ' + arg, stdout=subprocess.PIPE, shell=True).stdout.decode('utf-8')
64行目: 64行目:


# ページが最後に編集された時間を取得
# ページが最後に編集された時間を取得
def last_edit(page_href: str) -> datetime:
def last_edit(page_href: Final[str]) -> datetime:
   info_page_url = f"{ROOT}/index.php?title={page_href[6:]}&action=info"
   info_page_url = f"{ROOT}/index.php?title={page_href[6:]}&action=info"
   page_obj = fetch_page(info_page_url)
   page_obj = fetch_page(info_page_url)
   time_text = page_obj.select_one('#mw-pageinfo-lasttime > td > a').get_text(strip=True)
   time_text = page_obj.select_one('#mw-pageinfo-lasttime > td > a').get_text(strip=True)
   # 2022年3月3日 (木) 15:40 みたいな形式からdatetimeに
   # 2022年3月3日 (木) 15:40 みたいな形式からdatetimeに
   time_text = yobi.sub('', time_text)
   time_text = YOBI.sub('', time_text)
   timestamp = datetime.strptime(time_text, '%Y年%m月%d日  %H:%M')
   timestamp = datetime.strptime(time_text, '%Y年%m月%d日  %H:%M')
   return timestamp
   return timestamp


# ページのソースが最後に魚拓された時間を取得
# ページのソースが最後に魚拓された時間を取得
def last_archive(page_href: str) -> datetime:
def last_archive(page_href: Final[str]) -> datetime:
   source_page_url = f"{ROOT}/index.php?title={page_href[6:]}&action=edit"
   source_page_url = f"{ROOT}/index.php?title={page_href[6:]}&action=edit"
   archive_page_url = f"{ARCHIVE}/{source_page_url}"
   archive_page_url = f"{ARCHIVE}/{source_page_url}"
92行目: 92行目:


# 1つのページの魚拓をとる
# 1つのページの魚拓をとる
def archive_page(page_href: str):
def archive_page(page_href: Final[str]):
   source_page_url = f"{ROOT}/index.php?title={page_href[6:]}&action=edit"
   source_page_url = f"{ROOT}/index.php?title={page_href[6:]}&action=edit"
   print(f"{unquote(source_page_url)} の魚拓を取るナリ")
   print(f"{unquote(source_page_url)} の魚拓を取るナリ")
   response = curl(f"-X POST -A 'Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0' -H 'Host:archive.ph' {ARCHIVE}/submit/ --data-raw 'anyway=1&submitid={quote(fetch_submitid())}&url={quote(source_page_url)}'")
   response = curl(f"-X POST -A 'Mozilla/5.0 (Windows NT 10.0; rv:78.0) Gecko/20100101 Firefox/78.0' -H 'Host:archive.ph' {ARCHIVE}/submit/ --data-raw 'anyway=1&submitid={quote(fetch_submitid())}&url={quote(source_page_url)}'")
   print(f"{archive_wip_url_re.search(response)[1]} で魚拓を取っているナリ\n")
   print(f"{ARCHIVE_WIP_URL_RE.search(response)[1]} で魚拓を取っているナリ\n")


# ページ一覧の各ページで最新の魚拓をとる
# ページ一覧の各ページで最新の魚拓をとる
116行目: 116行目:
     archive_each_page(f"{ROOT}{pagination_url.get('href')}")
     archive_each_page(f"{ROOT}{pagination_url.get('href')}")


def main(namespace_list: list[int]):
def main(namespace_list: Final[list[int]]):
   for i in namespace_list:
   for i in namespace_list:
     # 名前空間のページ一覧のURL
     # 名前空間のページ一覧のURL
124行目: 124行目:


if __name__ == '__main__':
if __name__ == '__main__':
   namespace_list = [
   namespace_list: Final[list[int]] = [
     0,    # (標準)
     0,    # (標準)
     4,    # Wiki
     4,    # Wiki
匿名利用者