利用者:芯/サンドボックス/6は、ソースコードを公開するページです。
利用者別バイト数データ更新リクエスト
麻薬:データ#利用者別バイト数データの内容を更新する API リクエストです。全ページのバイト数を利用者別に集計し、代表値を求めてウィキテーブルを作成します。
形式 | Python ファイル (.py) |
---|---|
要件 | Python および Requests ライブラリのインストール |
備考 | 122 行めと 123 行めを適切に修正してください。 |
ソースコード |
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())) |
公序プレイヤー
Sisters:WikiWikiリファレンス/公序ソングに掲載されている音声ファイル群を VLC media player でランダム再生します。
形式 | Python ファイル (.py) |
---|---|
要件 | Python および Python-VLC ライブラリのインストール、ならびに VLC media player のインストール |
ソースコード |
import time import random import vlc def playASong(path, length): vlcInstance = vlc.Instance() media = vlcInstance.media_new(path) p = vlcInstance.media_player_new() p.set_media(media) p.play() time.sleep(length + 1) songsArr = [ ("白人唾棄之歌", "芯", 33, "transcoded/e/e7/%E7%99%BD%E4%BA%BA%E5%94%BE%E6%A3%84%E4%B9%8B%E6%AD%8C.mp3/%E7%99%BD%E4%BA%BA%E5%94%BE%E6%A3%84%E4%B9%8B%E6%AD%8C.mp3.ogg"), ("白人唾棄之歌 (知声版)", "芯", 36, "transcoded/f/f9/%E7%99%BD%E4%BA%BA%E5%94%BE%E6%A3%84%E4%B9%8B%E6%AD%8CBy%E7%9F%A5%E5%A3%B0.mp3/%E7%99%BD%E4%BA%BA%E5%94%BE%E6%A3%84%E4%B9%8B%E6%AD%8CBy%E7%9F%A5%E5%A3%B0.mp3.m4a"), ("White Men", "Shin", 33, "transcoded/5/50/White_Men.mp3/White_Men.mp3.ogg"), ("ヒップホップ老害貶し", "キュアラプラプ", 29, "transcoded/3/3a/%E3%83%92%E3%83%83%E3%83%97%E3%83%9B%E3%83%83%E3%83%97%E8%80%81%E5%AE%B3%E8%B2%B6%E3%81%97.mp3/%E3%83%92%E3%83%83%E3%83%97%E3%83%9B%E3%83%83%E3%83%97%E8%80%81%E5%AE%B3%E8%B2%B6%E3%81%97.mp3.m4a"), ("Homeless", "芯", 9, "transcoded/9/9d/Homeless.mp3/Homeless.mp3.m4a"), ("死神の導き", "芯", 57, "transcoded/9/96/%E6%AD%BB%E7%A5%9E%E3%81%AE%E5%B0%8E%E3%81%8D.mp3/%E6%AD%BB%E7%A5%9E%E3%81%AE%E5%B0%8E%E3%81%8D.mp3.ogg"), ("死神の導き (知声版)", "芯", 60, "transcoded/2/2d/%E6%AD%BB%E7%A5%9E%E3%81%AE%E5%B0%8E%E3%81%8DBy%E7%9F%A5%E5%A3%B0.mp3/%E6%AD%BB%E7%A5%9E%E3%81%AE%E5%B0%8E%E3%81%8DBy%E7%9F%A5%E5%A3%B0.mp3.m4a"), ("障害者に捧げるエチュード", "Notorious", 61, "transcoded/e/ec/%E9%9A%9C%E5%AE%B3%E8%80%85%E3%81%AB%E6%8D%A7%E3%81%92%E3%82%8B%E3%82%A8%E3%83%81%E3%83%A5%E3%83%BC%E3%83%89.mp3/%E9%9A%9C%E5%AE%B3%E8%80%85%E3%81%AB%E6%8D%A7%E3%81%92%E3%82%8B%E3%82%A8%E3%83%81%E3%83%A5%E3%83%BC%E3%83%89.mp3.ogg"), ("ハミング・ザ・アメ公序", "キュアラプラプ", 108, "transcoded/0/01/%E3%83%8F%E3%83%9F%E3%83%B3%E3%82%B0%E3%83%BB%E3%82%B6%E3%83%BB%E3%82%A2%E3%83%A1%E5%85%AC%E5%BA%8F.mp3/%E3%83%8F%E3%83%9F%E3%83%B3%E3%82%B0%E3%83%BB%E3%82%B6%E3%83%BB%E3%82%A2%E3%83%A1%E5%85%AC%E5%BA%8F.mp3.ogg"), ("白昼のクレイジィ", "キュアラプラプ", 27, "transcoded/f/f3/%E7%99%BD%E6%98%BC%E3%81%AE%E3%82%AF%E3%83%AC%E3%82%A4%E3%82%B8%E3%82%A3.mp3/%E7%99%BD%E6%98%BC%E3%81%AE%E3%82%AF%E3%83%AC%E3%82%A4%E3%82%B8%E3%82%A3.mp3.m4a"), ("フラッシュバックナイトメアー", "キュアラプラプ", 56, "transcoded/3/31/%E3%83%95%E3%83%A9%E3%83%83%E3%82%B7%E3%83%A5%E3%83%90%E3%83%83%E3%82%AF%E3%83%8A%E3%82%A4%E3%83%88%E3%83%A1%E3%82%A2%E3%83%BC.mp3/%E3%83%95%E3%83%A9%E3%83%83%E3%82%B7%E3%83%A5%E3%83%90%E3%83%83%E3%82%AF%E3%83%8A%E3%82%A4%E3%83%88%E3%83%A1%E3%82%A2%E3%83%BC.mp3.m4a"), ("FOOL JAPAN", "キュアラプラプ", 142, "transcoded/a/a3/FOOL_JAPAN.mp3/FOOL_JAPAN.mp3.m4a"), ("MidNight&FatWhite", "キュアラプラプ", 135, "transcoded/a/ab/MidNight%26FatWhite.mp3/MidNight%26FatWhite.mp3.m4a"), ("ジェンダー讃歌", "Notorious", 85, "transcoded/d/d8/%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%80%E3%83%BC%E8%AE%83%E6%AD%8C.mp3/%E3%82%B8%E3%82%A7%E3%83%B3%E3%83%80%E3%83%BC%E8%AE%83%E6%AD%8C.mp3.m4a"), ("ばいばい", "キュアラプラプ", 211, "transcoded/9/98/%E3%81%B0%E3%81%84%E3%81%B0%E3%81%84.mp3/%E3%81%B0%E3%81%84%E3%81%B0%E3%81%84.mp3.m4a"), ("小売店民謡", "ケツアゴコロロ", 12, "4/45/%E5%B0%8F%E5%A3%B2%E5%BA%97%E6%B0%91%E8%AC%A1.mp3"), ("或る女が死ぬ間際に聞いた.mp3", "利用者:ケツアゴコロロ", 44, "transcoded/e/e9/%E6%88%96%E3%82%8B%E5%A5%B3%E3%81%8C%E6%AD%BB%E3%81%AC%E9%96%93%E9%9A%9B%E3%81%AB%E8%81%9E%E3%81%84%E3%81%9F.mp3.mp3/%E6%88%96%E3%82%8B%E5%A5%B3%E3%81%8C%E6%AD%BB%E3%81%AC%E9%96%93%E9%9A%9B%E3%81%AB%E8%81%9E%E3%81%84%E3%81%9F.mp3.mp3.ogg"), ("Y-Genocide", "キュアラプラプ", 106, "transcoded/b/b6/Y-Genocide.mp3/Y-Genocide.mp3.m4a"), ("ロートモーダ=オーレ", "キュアラプラプ", 74, "transcoded/2/2b/%E3%83%AD%E3%83%BC%E3%83%88%E3%83%A2%E3%83%BC%E3%83%80%3D%E3%82%AA%E3%83%BC%E3%83%AC.mp3/%E3%83%AD%E3%83%BC%E3%83%88%E3%83%A2%E3%83%BC%E3%83%80%3D%E3%82%AA%E3%83%BC%E3%83%AC.mp3.m4a"), ("グッドナイト", "キュアラプラプ", 108, "transcoded/1/17/%E3%82%B0%E3%83%83%E3%83%89%E3%83%8A%E3%82%A4%E3%83%88.mp3/%E3%82%B0%E3%83%83%E3%83%89%E3%83%8A%E3%82%A4%E3%83%88.mp3.m4a"), ("Wi-Fiエレジー", "Notorious", 72, "transcoded/2/2a/Wi-Fi%E3%82%A8%E3%83%AC%E3%82%B8%E3%83%BC.mp3/Wi-Fi%E3%82%A8%E3%83%AC%E3%82%B8%E3%83%BC.mp3.ogg"), ("ワンオペ・ファイヤー", "芯", 25, "transcoded/6/64/%E3%83%AF%E3%83%B3%E3%82%AA%E3%83%9A%E3%83%BB%E3%83%95%E3%82%A1%E3%82%A4%E3%83%A4%E3%83%BC.mp3/%E3%83%AF%E3%83%B3%E3%82%AA%E3%83%9A%E3%83%BB%E3%83%95%E3%82%A1%E3%82%A4%E3%83%A4%E3%83%BC.mp3.m4a"), ("栃木県・40代・無職", "芯", 9, "transcoded/a/ac/%E6%A0%83%E6%9C%A8%E7%9C%8C%E3%83%BB40%E4%BB%A3%E3%83%BB%E7%84%A1%E8%81%B7.mp3/%E6%A0%83%E6%9C%A8%E7%9C%8C%E3%83%BB40%E4%BB%A3%E3%83%BB%E7%84%A1%E8%81%B7.mp3.ogg"), ("栃木県・40代・無職 (知声版)", "芯", 12, "transcoded/c/c4/%E6%A0%83%E6%9C%A8%E7%9C%8C%E3%83%BB40%E4%BB%A3%E3%83%BB%E7%84%A1%E8%81%B7By%E7%9F%A5%E5%A3%B0.mp3/%E6%A0%83%E6%9C%A8%E7%9C%8C%E3%83%BB40%E4%BB%A3%E3%83%BB%E7%84%A1%E8%81%B7By%E7%9F%A5%E5%A3%B0.mp3.m4a"), ("ワンクリックボーイ", "キュアラプラプ", 175, "transcoded/a/a7/%E3%83%AF%E3%83%B3%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E3%83%9C%E3%83%BC%E3%82%A4.mp3/%E3%83%AF%E3%83%B3%E3%82%AF%E3%83%AA%E3%83%83%E3%82%AF%E3%83%9C%E3%83%BC%E3%82%A4.mp3.m4a"), ("アンサー:近頃の若えモンは", "キュアラプラプ", 80, "transcoded/b/b9/%E3%82%A2%E3%83%B3%E3%82%B5%E3%83%BC%EF%BC%9A%E8%BF%91%E9%A0%83%E3%81%AE%E8%8B%A5%E3%81%88%E3%83%A2%E3%83%B3%E3%81%AF.mp3/%E3%82%A2%E3%83%B3%E3%82%B5%E3%83%BC%EF%BC%9A%E8%BF%91%E9%A0%83%E3%81%AE%E8%8B%A5%E3%81%88%E3%83%A2%E3%83%B3%E3%81%AF.mp3.m4a"), ("大人なのに書けん", "芯", 74, "transcoded/c/c8/%E5%A4%A7%E4%BA%BA%E3%81%AA%E3%81%AE%E3%81%AB%E6%9B%B8%E3%81%91%E3%82%93.mp3/%E5%A4%A7%E4%BA%BA%E3%81%AA%E3%81%AE%E3%81%AB%E6%9B%B8%E3%81%91%E3%82%93.mp3.ogg"), ("大人なのに書けん (知声版)", "芯", 77, "transcoded/6/68/%E5%A4%A7%E4%BA%BA%E3%81%AA%E3%81%AE%E3%81%AB%E6%9B%B8%E3%81%91%E3%82%93By%E7%9F%A5%E5%A3%B0.mp3/%E5%A4%A7%E4%BA%BA%E3%81%AA%E3%81%AE%E3%81%AB%E6%9B%B8%E3%81%91%E3%82%93By%E7%9F%A5%E5%A3%B0.mp3.ogg"), ("部落サンタ", "キュアラプラプ", 97, "transcoded/4/40/%E9%83%A8%E8%90%BD%E3%82%B5%E3%83%B3%E3%82%BF.mp3/%E9%83%A8%E8%90%BD%E3%82%B5%E3%83%B3%E3%82%BF.mp3.ogg"), ("介護医療院の実習生", "芯", 70, "transcoded/d/d4/%E4%BB%8B%E8%AD%B7%E5%8C%BB%E7%99%82%E9%99%A2%E3%81%AE%E5%AE%9F%E7%BF%92%E7%94%9F.mp3/%E4%BB%8B%E8%AD%B7%E5%8C%BB%E7%99%82%E9%99%A2%E3%81%AE%E5%AE%9F%E7%BF%92%E7%94%9F.mp3.ogg"), ("5Gがやってくる", "キュアラプラプ", 219, "transcoded/a/a7/5G%E3%81%8C%E3%82%84%E3%81%A3%E3%81%A6%E3%81%8F%E3%82%8B.mp3/5G%E3%81%8C%E3%82%84%E3%81%A3%E3%81%A6%E3%81%8F%E3%82%8B.mp3.ogg"), ("労働哀歌", "芯", 126, "transcoded/8/87/%E5%8A%B4%E5%83%8D%E5%93%80%E6%AD%8C.mp3/%E5%8A%B4%E5%83%8D%E5%93%80%E6%AD%8C.mp3.ogg"), ("労働哀歌 (知声版)", "芯", 127, "transcoded/a/ab/%E5%8A%B4%E5%83%8D%E5%93%80%E6%AD%8CBy%E7%9F%A5%E5%A3%B0.mp3/%E5%8A%B4%E5%83%8D%E5%93%80%E6%AD%8CBy%E7%9F%A5%E5%A3%B0.mp3.ogg"), ("ふるさと", "芯", 245, "transcoded/7/72/%E3%81%B5%E3%82%8B%E3%81%95%E3%81%A8.mp3/%E3%81%B5%E3%82%8B%E3%81%95%E3%81%A8.mp3.ogg"), ("ふるさと (知声版)", "芯", 242, "transcoded/b/ba/%E3%81%B5%E3%82%8B%E3%81%95%E3%81%A8By%E7%9F%A5%E5%A3%B0.mp3/%E3%81%B5%E3%82%8B%E3%81%95%E3%81%A8By%E7%9F%A5%E5%A3%B0.mp3.m4a"), ("White House Remix", "キュアラプラプ", 233, "d/dd/White_House_Remix.mp3"), ("かよわきハニー", "芯", 82, "transcoded/7/77/%E3%81%8B%E3%82%88%E3%82%8F%E3%81%8D%E3%83%8F%E3%83%8B%E3%83%BC.mp3/%E3%81%8B%E3%82%88%E3%82%8F%E3%81%8D%E3%83%8F%E3%83%8B%E3%83%BC.mp3.ogg"), ("かよわきハニー (知声版)", "芯", 82, "transcoded/3/36/%E3%81%8B%E3%82%88%E3%82%8F%E3%81%8D%E3%83%8F%E3%83%8B%E3%83%BCBy%E7%9F%A5%E5%A3%B0.mp3/%E3%81%8B%E3%82%88%E3%82%8F%E3%81%8D%E3%83%8F%E3%83%8B%E3%83%BCBy%E7%9F%A5%E5%A3%B0.mp3.ogg"), ("栃木県・40名・死傷", "キュアラプラプ", 150, "transcoded/8/8a/%E6%A0%83%E6%9C%A8%E7%9C%8C%E3%83%BB40%E5%90%8D%E3%83%BB%E6%AD%BB%E5%82%B7.mp3/%E6%A0%83%E6%9C%A8%E7%9C%8C%E3%83%BB40%E5%90%8D%E3%83%BB%E6%AD%BB%E5%82%B7.mp3.m4a"), ("He Died So Young", "Shin", 109, "transcoded/1/14/He_Died_So_Young.mp3/He_Died_So_Young.mp3.ogg") ] while True: trgtSong = random.choice(songsArr) print(trgtSong[0] + " // " + trgtSong[1]) playASong("https://ja.wikiwiki.li/images/" + trgtSong[3], trgtSong[2]) |
覚え書き
インストールについて
Python
公式のダウンロード・ページにアクセスし、"Download Python" とあるボタンをクリックしてください。ダウンロードされたファイルを開くとインストーラーが起動するので、その指示に従うことでインストールを完了できます。
各種ライブラリ
Python の各種ライブラリは、Python 本体を OS にインストールしたのちに、それぞれ以下の操作を行うことでインストールできます。
- Requests - コマンドプロンプトで
pip install requests
を実行する - Python-VLC - コマンドプロンプトで
pip install python-vlc
を実行する