「
利用者:芯/サンドボックス/6
」を編集中 (節単位)
ナビゲーションに移動
検索に移動
警告:
ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。
ログイン
または
アカウントを作成
すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。
スパム攻撃防止用のチェックです。 けっして、ここには、値の入力は
しない
でください!
== 利用者別バイト数データ更新リクエスト == [[麻薬:データ#利用者別バイト数データ]]の内容を更新する API リクエストです。全ページのバイト数を利用者別に集計し、代表値を求めてウィキテーブルを作成します。 {| class="wikitable" ! 形式 | Python ファイル (.py) |- ! 要件 | [[#Python|Python]] および [[#Requests|Requests]] ライブラリのインストール |- ! 備考 | 122 行めと 123 行めを適切に修正してください。 |} {{格納|名前='''ソースコード'''|中身= <pre> import requests import time import datetime import os import sys S = requests.Session() URL = "https://ja.wikiwiki.li/api.php" def getSize(page): params = { "action": "query", "prop": "revisions", "titles": page, "rvprop": "size", "format": "json" } data = S.get(url=URL, params=params).json() return list(data["query"]["pages"].items())[0][1]["revisions"][0]["size"] params = { "action": "query", "list": "logevents", "leprop": "title|user|timestamp", "leaction": "create/create", "lenamespace": 0, "lelimit": 500, "format": "json" } data = S.get(url=URL, params=params).json() logEvents = data["query"]["logevents"] while "continue" in data: time.sleep(0.5) params["lecontinue"] = data["continue"]["lecontinue"] data = S.get(url=URL, params=params).json() logEvents.append(data["query"]["logevents"]) logEventsLen = len(logEvents) IPUsers = { "172.70.223.86": "ひしょう", "60.145.16.169": "芯" } byteCntArrsByUser = { "Yuito": [], "MediaWiki default": [], "キュアラプラプ": [], "せうゆ": [], "Mapilaplap": [], "芯": [], "Popbob": [], "Notorious": [], "しんたろう": [], "Long谷": [], "神座麟": [], "ケツアゴコロロ": [], "ひしょう": [], "いせ": [], "デデ二オン": [], "MagnoliaWoolery": [], "210.151.113.170": [] } processed = 0 for le in logEvents: creator = le["user"] if creator not in byteCntArrsByUser: if creator in IPUsers: creator = IPUsers[creator] else: raise Exception("An unknown IP user.") byteCntArrsByUser[creator].append(getSize(le["title"])) time.sleep(0.5) processed += 1 print("\rlogEvents to byteCntArrsByUser: {:.2f}%".format( processed / logEventsLen * 100), end="") minMaxTtlAvg = {} for user, data in byteCntArrsByUser.items(): if data: ttl = sum(data) avg = round(ttl/len(data), 2) sortedData = sorted(data) min, max = sortedData[0], sortedData[-1] minMaxTtlAvg[user] = [ str(min) + " バイト", str(max) + " バイト", str(ttl) + " バイト", str(avg) + " バイト" ] else: minMaxTtlAvg[user] = None wTable = "{| class=\"wikitable sortable\" style=\"text-align: right;\"\n! 利用者名 !! style=\"width:7em;\" | 最小値 !! style=\"width:7em;\" | 最大値 !! style=\"width:7em;\" | 合計値 !! style=\"width:7em;\" | 平均値" for user, data in minMaxTtlAvg.items(): wTable += "\n|-\n! [[利用者:" + user + "|" + user + "]]" if data: wTable += "\n| " + data[0] + "\n| " + \ data[1] + "\n| " + data[2] + "\n| " + data[3] else: for i in range(4): wTable += "\n| style=\"text-align: center;\" | -" wTable += "\n|}" now = datetime.datetime.now() revisionNote = "最終更新日時: " + str(now.year) + "/" + str(now.month) + "/" + str( now.day) + "/" + str(now.hour) + ":" + str(now.minute) + ":" + str(now.second) + " 頃" wText = "==利用者別バイト数データ==\n本節では、各々の利用者が作成してきた標準記事(リダイレクトを除く)のバイト数について、その代表値を表示する。ソース: [[利用者:芯/サンドボックス/6#利用者別バイト数データ]]\n" + \ wTable + "\n" + revisionNote params = { "action": "query", "meta": "tokens", "type": "login", "format": "json" } LOGIN_TOKEN = S.get(url=URL, params=params).json()[ "query"]["tokens"]["logintoken"] params = { "action": "login", "lgname": [ここを自分のボット利用者名で置換], "lgpassword": [ここを自分のボットパスワードで置換], "lgtoken": LOGIN_TOKEN, "format": "json" } if S.post(URL, data=params).json()["login"]["result"] == "Failed": choice = input( "\rLogin faild. Still continue with your IP? [y/N]: ").lower() if choice in ["yes", "ye", "y"]: pass elif choice in ["no", "n"]: print("\nProcessing has been aborted.") sys.exit() params = { "action": "query", "meta": "tokens", "format": "json" } CSRF_TOKEN = S.get(url=URL, params=params).json()[ "query"]["tokens"]["csrftoken"] params = { "action": "edit", "title": "麻薬:データ", "section": 1, "text": wText, "summary": "利用者別バイト数データを更新", "bot": True, "token": CSRF_TOKEN, "format": "json" } print("\n" + str(S.post(URL, data=params).json())) </pre>}}
編集内容の要約:
WikiWikiへの投稿はすべて、クリエイティブ・コモンズ・ゼロ(パブリックドメイン) (詳細は
WikiWiki:著作権
を参照)のもとで公開したと見なされることにご注意ください。 自分が書いたものが他の人に容赦なく編集され、自由に配布されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください。
著作権保護されている作品は、許諾なしに投稿しないでください!
編集を中止
編集の仕方
(新しいウィンドウで開きます)
案内メニュー
個人用ツール
ログインしていません
トーク
投稿記録
アカウント作成
ログイン
名前空間
利用者ページ
議論
日本語
表示
閲覧
編集
ソースを編集
履歴表示
その他
検索
案内
メインページ
最近の更新
おまかせ表示
MediaWikiについてのヘルプ
ツール
リンク元
関連ページの更新状況
利用者の投稿記録
ログ
利用者グループの表示
特別ページ
ページ情報