1年4月28日 (黃)に参加
1,760 バイト追加 、 3年1月27日 (I)
編集の要約なし
編集の要約なし
1行目: 1行目:
{{#ifeq:{{REVISIONUSER}}|芯||<span style="font-size:7.5vw; font-weight:bold;">私の利用者ページに何をしたのですか、<span style="color:#ff0000">{{REVISIONUSER}}</span>さん?</span>}}
{{#ifeq:{{REVISIONUSER}}|芯||<span style="font-size:7.5vw; font-weight:bold;">私の利用者ページに何をしたのですか、<span style="color:#ff0000">{{REVISIONUSER}}</span>さん?</span>}}
__FORCETOC__
__FORCETOC__
==お知らせなど==
<p style="display:none">
{{#switch:{{#expr:{{CURRENTHOUR}}!=0}}|0=おはようございます、気持ちのよい朝ですね! 一件のお知らせがあります。|1={{#switch:{{#expr:{{CURRENTHOUR}}>=9}}|0=こんにちは、調子はいかがですか? 一件のお知らせがあります。|1={{#switch:{{#expr:{{CURRENTHOUR}}>=14}}|0=こんばんは、夕食はお済みですか。一件のお知らせがあります。|1={{#switch:{{#expr:{{CURRENTHOUR}}>=19}}|0=いい加減お眠りになられたらどうですか! 一件のお知らせがありますけど、夜が明けてからにしてくださいね!|1=おはようございます。いい朝ですね! 一件のお知らせがあります。}}}}}}}}
{| class="wikitable" style="background-color:#ffffff"
|
*
|}
</p>
==自己紹介==
==自己紹介==
===平凡===
===平凡===
174行目: 166行目:
※リダイレクトは除く
※リダイレクトは除く


==暇つぶし、あるいは悪趣味==
==API リクエスト==
===記事「[[はす]]」の内部リンクを追加できる文字列===
[[麻薬:データ]]のために書いた、Python による API リクエストのソース。誰かが実行しない限りデータが更新されることはないので、最新のデータを享受したいときは勝手に保存して実行してほしい。
*それ[[はす]]なわち、~。
{{格納|名前=<span style="font-size: 1.2em; font-weight: bold;">「利用者別バイト数データ」</span>|中身=
*それ[[はす]]べきでない。
<pre>
*それ[[はす]]くなくとも、~。
import requests
*それ[[はす]]ごく~。
import time
*それ[[はす]]でに~。
import datetime
*[[スジンハスガーク|スジン]][[はす|ハス]][[スジンハスガーク|ガーク]][[はす]]くなくとも~。
 
*
S = requests.Session()
*
 
*
URL = "https://ja.wikiwiki.li/api.php"
*
 
*
def getLogs(usr=False, action=False, ns=None):
*
    PARAMS = [{
*
        "action": "query",
*
        "list": "logevents",
*
        "leprop": "title|type|user",
        "lelimit": 500,
        "format": "json"
    }]
    if usr:
        PARAMS[0]["leuser"] = usr
    if action:
        PARAMS[0]["leaction"] = action
    if ns != None:
        PARAMS[0]["lenamespace"] = ns
    R = [S.get(url=URL, params=PARAMS[0])]
    DATA = [R[0].json()]
    output = DATA[0]["query"]["logevents"]
    flg = False
    if "continue" in DATA[0]:
        flg = True
    while flg:
        PARAMS.append({
            "action": "query",
            "list": "logevents",
            "lecontinue": DATA[-1]["continue"]["lecontinue"],
            "leprop": "title|type|user",
            "lelimit": 500,
            "format": "json"
        })
        if usr:
            PARAMS[-1]["leuser"] = usr
        if action:
            PARAMS[-1]["leaction"] = action
        R.append(S.get(url=URL, params=PARAMS[-1]))
        DATA.append(R[-1].json())
        output += DATA[-1]["query"]["logevents"]
        if "continue" not in DATA[-1]:
            flg = False
    return output
 
def isRedir(page):
    PARAMS = {
    "action": "parse",
    "page": page,
    "prop": "wikitext",
    "format": "json"
    }
    R = S.get(url=URL, params=PARAMS)
    DATA = R.json()
    cont = DATA["parse"]["wikitext"]["*"].lower()
    if "#転送" in cont or "#redirect" in cont:
        return True
    else:
        return False
 
def getSize(page):
    PARAMS = {
        "action": "query",
        "prop": "revisions",
        "titles": page,
        "rvprop": "size",
        "format": "json"
    }
    R = S.get(url=URL, params=PARAMS)
    DATA = R.json()
    pageid = list(DATA["query"]["pages"])[0]
    return DATA["query"]["pages"][pageid]["revisions"][0]["size"]
 
IPUsers = {
    "172.70.223.86": "ひしょう", "60.145.16.169": "芯"
}


===非自己叙述的===
createLogs = getLogs(action="create/create",ns=0)
 君「<big>'''非自己叙述的'''</big>(heterological)」という言葉を知っているか? 知らないとな? 仕方のないやつめ、教えてやろう。非自己叙述的とは、「''ある言葉の意味がその言葉自体と矛盾していること''」だ。たとえば"long"という言葉は「長い」を意味するが、この言葉の綴りはわずか4文字と、'''長くない'''。したがって"long"という言葉は'''非自己叙述的だ'''といえる。
createLogsLen = len(createLogs)
pageDataByUser = {"Yuito": [], "MediaWiki default": [], "キュアラプラプ": [], "せうゆ": [],
    "Mapilaplap": [], "芯": [], "Popbob": [], "Notorious": [], "しんたろう": [], "Long谷": [],
    "神座麟": [], "ケツアゴコロロ": [], "ひしょう": [], "いせ": [], "デデ二オン": [],
    "MagnoliaWoolery": [], "210.151.113.170": []
}
processed = 0
for lg in createLogs:
    creator = lg["user"]
    if creator not in pageDataByUser:
        if creator in IPUsers:
            creator = IPUsers[creator]
        else:
            raise Exception("An unknown IP user.")
    if not isRedir(lg["title"]):
        pageDataByUser[creator].append({"title": lg["title"], "size": getSize(lg["title"])})
    time.sleep(0.5)
    processed += 1
    print("\rpageDataByUser: {:.2f}%".format(processed/createLogsLen*100), end="")


 君この話は飽きたか。面白くないか。けども{{underline|文字列=しばし待て}}。ここからだ、面白くなるのは。さあ君、この問題について考えようじゃないか。
byteCnt = {}
for usr, data in pageDataByUser.items():
    byteCnt[usr] = []
    for page in data:
        byteCnt[usr].append(page["size"])


<blockquote>
minMaxTtlAvg = {}
<span style="font-size:larger">「非自己叙述的」という言葉は非自己叙述的であるか?''</span>
for usr, data in byteCnt.items():
</blockquote>
    if data:
        ttl = sum(data)
        avg = round(ttl/len(data),2)
        sortedData = sorted(data)
        minim, maxim = sortedData[0], sortedData[-1]
        minMaxTtlAvg[usr] = [
            "{:,}".format(minim) + "バイト",
            "{:,}".format(maxim) + "バイト",
            "{:,}".format(ttl) + "バイト",
            "{:,}".format(avg) + "バイト"
        ]
    else:
        minMaxTtlAvg[usr] = None


 これを解くにあたって、重要なことがある。「'''すべての言葉は非自己叙述的であるか非自己叙述的でないかのどちらかである。'''」ということだ。おっと、当たり前だといって笑っちゃいけないぞ君。これはほんとうに大切なことだ。何せ……{{粛清されました}}
wTable = "{| class=\"wikitable sortable\" style=\"text-align: right;"
wTable += "\"\n! 利用者名 !! style=\"width:7em;\" | 最小値 !! style=\"width:7em;\" | 最大値 !! style=\"width:7em;\" | 合計値 !! style=\"width:7em;\" | 平均値"
for usr, data in minMaxTtlAvg.items():
    wTable += "\n|-\n! [[利用者:" + usr + "|" + usr + "]]"
    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()
revision = "最終更新日時: " + str(now.year) + "/" + str(now.month) + "/" + str(now.day) + "/" + str(now.hour) + ":" + str(now.minute) + " 頃"


 むむ? いま、「非自己叙述的」は非自己叙述的だ、として話を進めたはずだ。しかしそこから、それを否定する結論が得られた。なぜだろうか? うーん。
wText = "==利用者別バイト数データ==\n本節では、各々の利用者が作成してきた標準記事(リダイレクトを除く)のバイト数について、その代表値を表示する。\n"
wText += wTable + "\n" + revision


 あるいは、最初の仮定が間違っていた、と考える方が自然であろう。今度は{{underline|文字列=他の可能性}}にかけるのだ――ところで先ほど、「'''すべての言葉は非自己叙述的であるか非自己叙述的でないかのどちらかである。'''」と述べた。となると{{underline|文字列=他の可能性}}とは、「『非自己叙述的』は非自己叙述的でない」ということじゃあないか!
PARAMS_0 = {
    "action": "query",
    "meta": "tokens",
    "type": "login",
    "format": "json"
}
R = S.get(url=URL, params=PARAMS_0)
DATA = R.json()
LOGIN_TOKEN = DATA["query"]["tokens"]["logintoken"]


 では、そう仮定するとどうなるのだろうか? 「非自己叙述的」は非自己叙述的でない。つまり「非自己叙述的」はその言葉自体と矛盾した意味を持っていない。ゆえに、「非自己叙述的」は'''非自己叙述的である'''。
myname = (自分の利用者名を引用符で囲って置換せよ)
mypass = (自分の利用者アカウントのパスワードを引用符で囲って置換せよ)
PARAMS_1 = {
    "action": "login",
    "lgname": myname,
    "lgpassword": mypass,
    "lgtoken": LOGIN_TOKEN,
    "format": "json"
}
R = S.post(URL, data=PARAMS_1)


 またもや仮定と矛盾する結論を導いてしまった。やあ君、どうしてこうなったのだ? 僕たちはすべての可能性を検討しきったのに、そのどれにおいても矛盾が生まれるだなんて……。
PARAMS_2 = {
    "action": "query",
    "meta": "tokens",
    "format": "json"
}
R = S.get(url=URL, params=PARAMS_2)
DATA = R.json()
CSRF_TOKEN = DATA["query"]["tokens"]["csrftoken"]


 はっ! 君君、これ、'''パラドックスじゃないか!'''
PARAMS_3 = {
    "action": "edit",
    "title": "麻薬:データ",
    "section": 1,
    "text": wText,
    "summary": "利用者別バイト数データを更新",
    "token": CSRF_TOKEN,
    "format": "json"
}
R = S.post(URL, data=PARAMS_3)
print(R.json())
</pre>}}


==メモ==
==メモ==
3,314

回編集