Szerkesztő:BinBot/-countries.py
Alkalmi bot, amit a Kategória:Csonkok (település) felosztására használtam. Megpróbált országot rendelni a csonkokhoz, és kilistázta őket, illetve ellenőrzés után elvégezte a cserét. Ez az első botom a „core” keretrendszerben.
Forráskód szerkesztés
"""Ideiglenes vacak a települési csonkok szétdobálására."""
USA = ['Alabama', 'Alaszka', 'Arizona', 'Arkansas', 'Colorado', 'Connecticut',
'Delaware', 'Dél-Dakota', 'Dél-Karolina', 'Észak-Dakota', 'Észak-Karolina',
'Florida', 'Georgia', 'Hawaii', 'Idaho', 'Illinois', 'Indiana', 'Iowa',
'Kalifornia', 'Kansas', 'Kentucky', 'Louisiana', 'Maine', 'Maryland',
'Massachusetts', 'Michigan', 'Minnesota', 'Mississippi', 'Missouri',
'Montana', 'Nebraska', 'Nevada', 'New Hampshire', 'New Jersey', 'New York',
'Nyugat-Virginia', 'Ohio', 'Oklahoma', 'Oregon', 'Pennsylvania',
'Rhode Island', 'Tennessee', 'Texas', 'Új-Mexikó', 'Utah', 'Vermont',
'Virginia', 'Washington', 'Wisconsin', 'Wyoming', 'Puerto Rico',]
MO = ['Bács-Kiskun', 'Baranya', 'Békés', 'Borsod-Abaúj-Zemplén',
'Csongrád-Csanád', 'Fejér', 'Győr-Moson-Sopron', 'Hajdú-Bihar', 'Heves',
'Jász-Nagykun-Szolnok', 'Komárom-Esztergom', 'Nógrád', 'Pest', 'Somogy',
'Szabolcs-Szatmár-Bereg', 'Tolna', 'Vas', 'Veszprém', 'Zala',]
SK = ['Besztercebánya', 'Eperjes', 'Kassa', 'Nagyszombat', 'Nyitra', 'Pozsony',
'Trencsén', 'Zsolna',]
RO = ['Arad', 'Argeș', 'Bákó', 'Beszterce-Naszód', 'Bihar', 'Botoșani',
'Brăila', 'Brassó', 'Buzău', 'Călărași', 'Constanța', 'Dâmbovița', 'Dolj',
'Fehér', 'Galați', 'Giurgiu', 'Gorj', 'Hargita', 'Hunyad', 'Iași',
'Ialomița', 'Ilfov', 'Kolozs', 'Kovászna', 'Krassó-Szörény', 'Máramaros',
'Maros', 'Mehedinți', 'Neamț', 'Olt', 'Prahova', 'Suceava', 'Szatmár',
'Szeben', 'Szilágy', 'Teleorman', 'Temes', 'Tulcea', 'Vâlcea', 'Vaslui',
'Vrancea',]
TR = ['Adana', 'Ankara', 'Antalya', 'Çorum', 'Edirne', 'Kırıkkale', 'Kırşehir',
'Muğla', 'Sakarya',]
CH = ['Aargau', 'Appenzell Innerrhoden', 'Basel-Landschaft', 'Basel-Stadt',
'Bern', 'Freiburg', 'Genf', 'Glarus', 'Graubünden', 'Jura', 'Luzern',
'Neuchâtel', 'Nidwalden', 'Obwalden', 'Sankt Gallen', 'Schaffhausen',
'Schwyz', 'Solothurn', 'Thurgau', 'Ticino', 'Uri', 'Valais', 'Vaud',
'Zug', 'Zürich',]
stubSettlementList = [
'albán', 'ausztrál', 'belga', 'brazil', 'brit', 'cseh', 'dán', 'észt',
'észak-macedón', 'finn', 'francia', 'görög', 'holland', 'horvát', 'ír',
'iráni', 'izlandi', 'izraeli', 'japán', 'kanadai', 'kínai', 'lengyel',
'lett', 'magyar', 'német', 'norvég', 'olasz', 'orosz', 'osztrák',
'romániai', 'skót', 'spanyol', 'svájci', 'szerb', 'szlovák', 'szlovén',
'török', 'tunéz', 'USA', 'vietnámi', 'gambiai', 'bolgár', 'svéd', 'ukrán',
'kolumbiai', 'andorrai', 'argentin', 'chilei', 'togói', 'indiai', 'nepáli',
'zöld-foki', 'portugál', 'Srí Lanka-i', 'tanzániai', 'malajziai',
'Bissau-guineai', 'Costa Rica-i', 'egyenlítői-guineai', 'egyiptomi',
'gaboni', 'grönlandi', 'grúziai', 'guineai', 'kameruni', 'kirgizisztáni',
'kongói demokratikus köztársasági', 'kubai', 'marokkói', 'moldovai',
'nicaraguai', 'nigériai', 'örmény', 'panamai', 'San Marinó-i', 'benini',
'venezuelai', 'Fülöp-szigeteki', 'líbiai', 'mauritiusi', 'ománi',
'bangladesi', 'bosznia-hercegovinai', 'elefántcsontparti', 'guatemalai',
]
import re
import pywikibot
from pywikibot.pagegenerators import CategorizedPageGenerator
site = pywikibot.Site()
INFrex = re.compile(r'\{\{ *([^{]+?) település infobox')
USArex = re.compile(r'%s (települései|városai|megyeszékhelyei)' % '|'.join(USA))
ROrex = re.compile(r'%s megye (települései|városai)' % '|'.join(RO))
CHrex = re.compile(r'%s kanton (települései|városai)' % '|'.join(CH))
TRrex = re.compile(r'%s tartomány körzetei és települései' % '|'.join(TR))
UNKNOWNrex = re.compile(r'Kategória:(.+?) települései')
def create_country_pairs():
global countries
countries = dict()
rex = re.compile(r'Kategória:(.*?) települései')
for nation in stubSettlementList:
name= 'Csonkok (%s település)' % nation
cat = pywikibot.Category(site, name)
print(cat)
supercats = list(cat.categories())
for supercat in supercats:
try:
country = rex.search(supercat.title()).group(1)
# if country == 'Törökország körzetei és':
# country = 'Törökország'
countries[country] = nation
break
except AttributeError:
pass
print(countries)
def process():
cat = pywikibot.Category(site, 'Csonkok (település)')
i = 0 # ideiglenes a tesztelés idejére
scat = None
global lista, esetleg, kuka, selejt
lista = []
esetleg = []
kuka = []
selejt = []
for page in CategorizedPageGenerator(cat):
if page.title() == 'Újfalu (Dunaszerdahely)':
continue
country = None
supercat = None
# i += 1
# if i > 350:
# break # ideiglenes
print(page.title())
text = page.get()[:100]
if INFrex.search(text):
_c = INFrex.search(text).group(1).lower()
if _c =='kirgiz':
_c = 'kirgizisztáni'
print(_c)
try:
country = list(countries.keys())[list(countries.values()).index(_c)]
print('______________'+country)
except ValueError:
if _c not in ['amerikai', 'román', 'török', 'svájci']:
kuka.append((page, page.title(), _c, text))
if not country:
cats = page.categories()
for supercat in cats:
sct = supercat.title()
if USArex.search(sct):
country = 'Az Amerikai Egyesült Államok'
break
if ROrex.search(sct):
country = 'Románia'
break
if CHrex.search(sct):
country = 'Svájc'
break
if TRrex.search(sct):
country = 'Törökország körzetei és'
break
try:
country = GENrex.search(sct).group(1)
break
except AttributeError:
pass
try:
country = UNKNOWNrex.search(sct).group(1)
if country not in countries:
countries[country] = None
break
except AttributeError:
pass
if country:
print(country)
try:
scat = supercat.title()
except AttributeError:
scat = ''
if countries[country]:
lista.append((page, page.title(), country, scat, countries[country], text))
else:
esetleg.append((page, page.title(), country, scat, text))
else:
selejt.append(page.title())
def replacetemplates():
"""Végrehajtja a korábban vizuálisan ellenőrzött cseréket."""
templ = 'Településcsonkok rendezése; [[Sablon:csonk-település]] → ' \
'[[Sablon:csonk-%s település]] bottal'
for article in lista:
page = article[0]
nation = article[4]
text = page.get()
text= text.replace('sonk-település', ('sonk-%s település' % nation))
summary = templ % nation
pywikibot.output(text)
pywikibot.output(summary)
page.put(text, summary)
def listatable():
text = "'''A listában nem szerepelnek azok a csonkok, amiket se kategória, se jellemző infobox alapján nem tudtam besorolni.'''\n\n"
text += '== Megtaláltam az országot és a sablont ==\n'
text += '{| {{széptáblázat-r}}\n'
text += '! Lap !! Talált ország !! Kategória !! ' \
'Javasolt sablon !! A szöveg eleje\n'
for article in lista:
text += '|-\n| [['
text += article[1] + ']] || ' + ' || '.join(article[2:4])
text += ' || {{sl|csonk-%s település}} || ' % article[4]
text += '<nowiki>' + article[5] + '</nowiki>'
text += '\n'
text += '|}\nDarabszám:%d\n\n' % len(lista)
return text
def esetlegtable():
text = '== Megtalálni vélem az országot kategória alapján, de nincs sablon ==\n'
text += '{| {{széptáblázat-r}}\n'
text += '! Lap !! Talált ország !! Kategória !! A szöveg eleje\n'
for article in esetleg:
text += '|-\n| [['
text += article[1] + ']] || ' + ' || '.join(article[2:4])
text += ' || <nowiki>' + article[4] + '</nowiki>'
text += '\n'
text += '|}\nDarabszám:%d\n\n' % len(esetleg)
return text
def kukatable():
text = '== Infoboxból kinyert ország nem létező sablonnal ==\n'
text += '{| {{széptáblázat-r}}\n'
text += '! Lap !! Talált ország !! Javasolt sablon !! A szöveg eleje\n'
for article in kuka:
text += '|-\n| [['
text += article[1] + ']] || '+ article[2]
text += ' || {{sl|csonk-%s település}} || ' % article[2]
text += '<nowiki>' + article[3] + '</nowiki>'
text += '\n'
text += '|}\nDarabszám:%d\n\n' % len(kuka)
return text
def selejttable():
text = '== Nem sikerült azonosítani az országot ==\n* [['
text += ']]\n* [['.join(selejt)
text += ']]\n'
text += 'Darabszám:%d\n' % len(selejt)
return text
create_country_pairs()
r1 = '|'.join(countries.keys())
r2 = 'tagállamai|megyéi|települései|városai|megyeszékhelyei|kerületei|tartományai'
print(r'(%s) (%s)' % (r1, r2))
GENrex = re.compile(r'(%s) (%s)' % (r1, r2))
process()
# A lista kiírása a képernyőre
# print(lista)
# print(kuka)
text = listatable() + esetlegtable() + kukatable() + selejttable()
# pywikibot.output(text)
# A lista kiírása a munkapadra (kell a fenti text = sor is)
target = pywikibot.Page(site,
'Szerkesztő:Bináris/Tervek/Csonkok és csonksablonok/munkapad')
summary = 'Javasolt szubcsonksalonok a településekre'
target.put(text, summary)
# A tényleges csere elvégzése az első táblázat lapjain, ellenőrzés után!
# replacetemplates()