Page MenuHomePhabricator
Paste P20226

unlink-wikis.py
ActivePublic

Authored by LucasWerkmeister on Feb 7 2022, 9:19 PM.
Referenced Files
F34944795: unlink-wikis.py
Feb 7 2022, 9:19 PM
Subscribers
None
#!/usr/bin/env python3
import json
import mwapi
import random
bot_username = 'Lucas Werkmeister@unlink-incubatorwiki_(T284211)'
bot_password = 'redacted'
edit_group_hash = '372610210a06'
edit_group = f'[[:toolforge:editgroups/b/CB/{edit_group_hash}|details]]'
session = mwapi.Session('https://www.wikidata.org',
user_agent='unlink-incubatorwiki (mail@lucaswerkmeister.de; T284211)',
formatversion=1) # mwapi assumes error contents are in '*'
lgtoken = session.get(action='query',
meta='tokens',
type='login')['query']['tokens']['logintoken']
session.post(action='login',
lgname=bot_username,
lgpassword=bot_password,
lgtoken=lgtoken)
token = session.get(action='query',
meta='tokens',
type=['csrf'])['query']['tokens']['csrftoken']
def unlink_wikis(item_id, site_ids):
item = session.get(action='wbgetentities',
ids=[item_id])['entities'][item_id]
baserevid = item['lastrevid']
del item['pageid'], item['ns'], item['title'], item['lastrevid'], item['modified']
removed = []
for site_id in site_ids:
try:
del item['sitelinks'][site_id]
except KeyError:
print(f'No {site_id} sitelink found in {item_id}.')
else:
removed.append(site_id)
if not removed:
return
revid = session.post(**{
'action': 'wbeditentity',
'id': item_id,
'baserevid': baserevid,
'clear': '',
'data': json.dumps(item),
'summary': f'removing broken {"/".join(removed)} sitelink{"s" if len(removed) > 1 else ""} ([[phabricator:T284211|T284211]], {edit_group})',
'assert': 'user',
'token': token,
})['entity']['lastrevid']
print(f'Edited {item_id}, revision {revid}.')
unlink_wikis('Q148', ['incubatorwiki', 'pflwiki'])
unlink_wikis('Q4847311', ['incubatorwiki', 'avwiktionary'])