利用者:Yaakiyu.jp/エスケープ転載ツール修正版

出典: 謎の百科事典もどき『エンペディア(Enpedia)』
ナビゲーションに移動 検索に移動
# coding: UTF-8
import requests
import json

session = requests.Session()
url = "https://ja.wikipedia.org/w/api.php"
input_title = input("記事名を入力>>")
if input_title == "":
    input_title = "メインページ"

version_settings = input("必要な場合、何版前を取得するか指定(通常無視)>>")
if version_settings == "":
    version_settings = 0
else:
    version_settings = int(version_settings)

#記事ゾーン
article_params = {
    "action":"query",
    "prop":"revisions",
    "titles":input_title,
    "rvprop":"content",
    "rvlimit": version_settings + 1,
    "format":"json"
}
# https://phabricator.wikimedia.org/T400119 に基づき、適切なUser-Agentを指定
headers = {
    "User-Agent": "ArticleEscapeBot/1.0 (https://enpedia.org/;)"
}

article_response = session.get(url=url,params=article_params,headers=headers)
article_data = article_response.json()

#IDぞーん
af_id = list(article_data["query"]["pages"].keys())[0]
content = str(article_data["query"]["pages"][af_id]["revisions"][0+version_settings]["*"])#記事

#履歴ゾーン
history_params = {
    "action":"query",
    "prop":"revisions",
    "titles":input_title,
    "rvprop":"timestamp",
    "rvlimit": version_settings+1,
    "format":"json"
}

article_history_response = session.get(url=url,params=history_params,headers=headers)
article_history_data = article_history_response.json()

#タイムスタンプ
time_stamp = article_history_data["query"]["pages"][af_id]["revisions"][0+version_settings]["timestamp"]

#版の総数
total_params = {
    "action": "query",
    "prop": "revisions",
    "titles": input_title,
    "rvprop": "ids",
    "rvlimit": "max",
    "format": "json"
}

total_response = requests.get(url, params=total_params, headers=headers)
total_data = total_response.json()
total_revisions = len(total_data["query"]["pages"][af_id]["revisions"])
if total_revisions == 500:
    input("版が多すぎるため、正確に移入できません。動作を中止します。>>")
    exit()
else:
    print(total_revisions - version_settings)
    print("-"*30)
#利用者ゾーン
users_params ={
    "action":"query",
    "prop":"revisions",
    "rvprop":"user",
    "format":"json",
    "titles":input_title,
    "rvdir":"newer",
    "rvlimit":total_revisions - version_settings
}

users_response = requests.get(url=url,params=users_params,headers=headers)
users_data = json.loads(users_response.text)
user_list = []
for page in users_data["query"]["pages"].values():
    if "revisions" in page:
        for revision in page["revisions"]:
            if "user" in revision:
                user_list.append(revision["user"])

#重複した利用者名を削除する
user_list = list(set(user_list))

user_result = ",".join(map(str, user_list))#利用者

sentence = "[[jawp:{}]]の{}(UTC)の版より全文をエスケープ転載。投稿者:{}。".format(input_title,time_stamp,user_result)

print(content)
print("-"*30)
if len(sentence) >= 500:
    print("以下、移入元情報を記載する。\nこの記事は [[jawp:{}]] の {} (UTC) 時点の版から転記された。\n*著作者一覧:{}\n*改変点:{}\n以上。".format(input_title,time_stamp,user_result,"修正内容を入力."))
else:
    print(sentence)