User:Botgo50/Weekly summary

From Tardis Wiki, the free Doctor Who reference

Archive and examples of past summaries at User talk:Botgo50/weekly summaries.

Signup at User:Botgo50/Signup!

Code[[edit] | [edit source]]

# update_links.py
# version 1.0.0
# written by User:Bongolium500 for use on User:Botgo50 at tardis.fandom.com

import pywikibot
from pywikibot import Timestamp
from pywikibot import pagegenerators
from datetime import date
from datetime import timedelta

today = date.today()
site = pywikibot.Site()

edits = len([edit for edit in site.recentchanges(reverse=True, start=Timestamp.fromtimestampformat((today - timedelta(days=7)).strftime('%Y%m%d')), changetype="edit")])
newPages = len([page for page in site.recentchanges(reverse=True, start=Timestamp.fromtimestampformat((today - timedelta(days=7)).strftime('%Y%m%d')), changetype="new")])
stats = f"There have been {edits + newPages} edits in the last week, including {newPages} new pages."
print("Stats generated")

newForums = [page for page in site.recentchanges(reverse=True, start=Timestamp.fromtimestampformat((today - timedelta(days=7)).strftime('%Y%m%d')), namespaces="Forum", changetype="new", redirect=False) if "/" not in page["title"]]
newForumsList = ""
for page in newForums:
    categories = [category for category in pywikibot.Page(site, page["title"]).categories()]
    categories += "The Cloisters|Uncategorised"
    newForumsList += f"* [[{page['title']}]] by [[User:{page['user']}]] in [[Forum:{categories[0].title(with_ns=False)}]]\n" 
print("New forums list generated")
    
closedForums = [page["title"] for page in site.recentchanges(reverse=True, start=Timestamp.fromtimestampformat((today - timedelta(days=7)).strftime('%Y%m%d')), namespaces="Forum", changetype="edit", top_only=True, redirect=False) if "/" not in page["title"] and ("Archive" in [template.title(with_ns=False) for template in pywikibot.Page(site, page["title"]).itertemplates()] or "Closingpostpending" in [template.title(with_ns=False) for template in pywikibot.Page(site, page["title"]).itertemplates()])]
closedForumsList = ""
for page in closedForums:
    extra = ""
    if "Closingpostpending" in [template.title(with_ns=False) for template in pywikibot.Page(site, page).itertemplates()]:
        extra = " (closing post pending)"
    closedForumsList += f"* [[{page}]]{extra}\n"
print("Closed forums list generated")
    
editedTalks = [page["title"] for page in site.recentchanges(reverse=True, start=Timestamp.fromtimestampformat((today - timedelta(days=7)).strftime('%Y%m%d')), namespaces="Talk|Tardis talk|File talk|MediaWiki talk|Template talk|Help talk|Category talk|Forum talk|Howling talk|Theory talk|Transmat talk|Thread talk|Property talk|Form talk|Concept talk|smw/schema talk|Rule talk|GeoJson talk|Blog talk|Module talk|Gadget talk|Gadget definition talk|Map talk", changetype="edit", top_only=True, redirect=False) if "/Archive" not in page["title"]]
editedTalksList = ""
for page in editedTalks:
    editedTalksList += f"* [[{page}]]\n"
print("Edited talks list generated")

message = f'''
== Tardis weekly summary - {today.strftime('%Y-%m-%d')} ==
Here is your automated weekly summary for {today.strftime('%Y-%m-%d')}, showing changes since {(today - timedelta(days=7)).strftime('%Y-%m-%d')}:

{stats}

=== New forums threads ===
{newForumsList}
=== Closed forum threads ===
<small>May include false positives.</small>
{closedForumsList}
=== Talk page activity ===
<small>May include false positives.</small>
<div style="{{{{Column-count|3}}}}">
{editedTalksList}</div>
[[User:Botgo50/Signup|Signup]]! - ~~~~

'''

print(message)

archivePage = pywikibot.Page(site, 'User talk: Botgo50/weekly summaries')
print(f"Handling {archivePage.title()}")
text = archivePage.get()
text += message
archivePage.put(text, f"Weekly summary for {today.strftime('%Y-%m-%d')}")

for talk in pagegenerators.LinkedPageGenerator(pywikibot.Page(site, 'User:Botgo50/Signup')):
    if talk.namespace() == pywikibot.site._namespace.Namespace(3):
        print(f"Handling {talk.title()}")
        text = talk.get()
        text += message
        talk.put(text, f"Weekly summary for {today.strftime('%Y-%m-%d')}")