利用者:Yaakiyu.jp/エスケープ転載ツール修正版
ナビゲーションに移動
検索に移動
# 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)