Shyde
Bandeira de bot
editarOla Gallaecio.
Xa tes bandeira de bot.
Podes meterlle man á Categoría:Categorías pendentes de ser movidas?
Graciñas. --. HombreDHojalata.conversa 4 de novembro de 2014 ás 21:58 (UTC)
import re
from pywikibot.page import Category
from pywikibot.pagegenerators import CategorizedPageGenerator, PreloadingGenerator, \
SubCategoriesPageGenerator
targetCategoryTemplateRe = re.compile(u"\{\{ *Redirección de categoría *\| *([^}]+) *\}\}")
categoryReTemplate = u"\[\[ *Categoría *: *{} *(?:\| *([^]|]+) *)?\]\]"
# Por cada categoría en «Categoría:Categorías pendentes de ser movidas»:
category = Category(self.site, u"Categorías pendentes de ser movidas")
generator = PreloadingGenerator(SubCategoriesPageGenerator(category))
for sourceCategory in generator:
sourceCategoryName = sourceCategory.title(withNamespace=False)
categoryRe = re.compile(categoryReTemplate.format(re.escape(sourceCategoryName)))
# Ler o contido da páxina da categoría.
sourceCategoryContent = sourceCategory.get()
# Obter a categoría de destino do uso do modelo «Redirección de categoría».
match = targetCategoryTemplateRe.search(sourceCategoryContent)
targetCategoryName = match.group(1)
# Se a categoría de destino non existe:
targetCategory = Category(self.site, targetCategoryName)
if not targetCategory.exists():
# Partir do contido da categoría actual.
# Eliminar o modelo «Redirección de categoría» e maila súa liña se queda baleira tras eliminar o modelo.
targetCategoryContent = u""
for line in sourceCategoryContent.splitlines():
match = targetCategoryTemplateRe.search(line)
if match:
line = line.replace(match.group(0), u"")
line = line.strip()
if not line:
continue
targetCategoryContent += line + u"\n"
# Crear a nova categoría co contido restante.
comment = u"Categoría creada a partir do contido de «{}».".format(sourceCategoryName)
self.userPut(page=targetCategory, oldtext=u"", newtext=targetCategoryContent,
comment=comment, show_diff=True)
# Por cada subcategoría na categoría vella:
subcategoryGenerator = PreloadingGenerator(SubCategoriesPageGenerator(sourceCategory))
for subcategory in subcategoryGenerator:
# Cambiar a categoría vella pola categoría nova.
subcategoryContent = subcategory.get()
match = categoryRe.search(subcategoryContent)
if match:
if len(match.groups()) > 1:
replacement = u"[[{}|{}]]".format(
targetCategory.title(withNamespace=True),
match.group(1))
else:
replacement = u"[[{}]]".format(targetCategory.title(withNamespace=True))
newSubcategoryContent = subcategoryContent.replace(match.group(0), replacement)
comment = u"Cambiouse a categoría «{}» pola categoría «{}».".format(
sourceCategoryName,
targetCategoryName)
self.userPut(page=subcategory, oldtext=subcategoryContent,
newtext=newSubcategoryContent, comment=comment, show_diff=True)
# Por cada artigo na categoría vella:
pageGenerator = PreloadingGenerator(CategorizedPageGenerator(sourceCategory))
for page in pageGenerator:
# Cambiar a categoría vella pola categoría nova.
pageContent = page.get()
match = categoryRe.search(pageContent)
if match:
if len(match.groups()) > 1:
replacement = u"[[{}|{}]]".format(
targetCategory.title(withNamespace=True),
match.group(1))
else:
replacement = u"[[{}]]".format(targetCategory.title(withNamespace=True))
newPageContent = pageContent.replace(match.group(0), replacement)
comment = u"Cambiouse a categoría «{}» pola categoría «{}».".format(
sourceCategoryName,
targetCategoryName)
self.userPut(page=page, oldtext=pageContent, newtext=newPageContent,
comment=comment, show_diff=True)
# Substituír o modelo «Redirección de categoría» polo modelo «Lixo» na categoría vella.
newCategoryLink = u"[[:{}|{}]]".format(targetCategory.title(withNamespace=True),
targetCategoryName)
comment = u"O contido desta categoría moveuse á categoría «{}».".format(newCategoryLink)
newSourceCategoryContent = u"{{{{Lixo|{}}}}}".format(comment)
self.userPut(page=sourceCategory, oldtext=sourceCategoryContent,
newtext=newSourceCategoryContent, comment=comment, show_diff=True)
Retirar "Ligazón AB|xx" e "Link GA|xx"
editarOla.
Agora faise en Wikidata a indicación de se un artigo é "bo" noutra lingua.
Poderías por o bot a retirar {{Ligazón AB|??}} e {{Link GA|??}}
(onde "??" é o código dunha lingua) dos case 1.500 artigos que os inclúen?
Graciñas. --. HombreDHojalata.conversa 5 de novembro de 2014 ás 17:28 (UTC)
import re
from pywikibot.page import Link, Page
from pywikibot.pagegenerators import PreloadingGenerator, \
ReferringPageGenerator
templateReModel = u"[ \r\n\t]*\r?\n\{{\{{ *{template} *(?:\| *[^}}|]+)?\}}\}}|\{{\{{ *{template} *(?:\| *[^}}|]+)?\}}\}}\r?\n[ \n\r\t]*"
for templateName in [u"Link GA", u"Ligazón AB"]:
templateRe = re.compile(templateReModel.format(template=re.escape(templateName)))
generator = ReferringPageGenerator(
Page(Link(
templateName,
defaultNamespace=10,
source=self.site)),
onlyTemplateInclusion=True)
generator = PreloadingGenerator(generator)
for page in generator:
oldPageContent = page.get()
newPageContent = templateRe.sub(u"", oldPageContent)
comment = u"Eliminouse o modelo «{}».".format(templateName)
self.userPut(page=page, oldtext=oldPageContent,
newtext=newPageContent, comment=comment,
show_diff=True)
*minusválidos -> discapacitados
editarPodes facer a mudanza en Especial:Páxinas que ligan con esta/Modelo:Praia?
Graaazas. --. HombreDHojalata.conversa 8 de novembro de 2014 ás 12:50 (UTC)
Regra no ficheiro user-fixes.py
:
fixes['discapacidade'] = {
'regex': True,
'msg': {
'_default':u'*minusválidos → discapacitados',
},
'replacements': [
(ur'\bMinusválid([ao]s?)\b', ur'Discapacitad\1'),
(ur'\bminusválid([ao]s?)\b', ur'discapacitad\1'),
(ur'\bMinusvalidez\b', ur'Discapacidade'),
(ur'\bminusvalidez\b', ur'discapacidade'),
]
}
Orde:
python2 core/scripts/replace.py -transcludes:"Praia" -fix:discapacidade -always
[[adega (de viño)]] → [[adega (industria)]]
editarOla, Gallaecio! Teño unha solicitude para o teu bot; poderías corrixir na Galipedia as ligazóns existentes cara a [[adega (de viño)]] e modificalas por [[adega (industria)]]? Cando estea avisa, para borrar a redirección co nome erróneo.
Un saúdo, e mil grazas!! --Estevoaei (conversa) 20 de novembro de 2014 ás 11:04 (UTC)
#!/usr/bin/env python2
# -*- coding:utf-8 -*-
"""
Este guión elimina todas as ligazóns a unha redirección e a continuación marca
dita redirección para borrado.
Debe pasárselle o nome da redirección como parámetro.
"""
from pywikibot import Bot
class ShydeNaGalipedia(Bot):
def __init__(self, redirect_page_name, **kwargs):
super(ShydeNaGalipedia, self).__init__(**kwargs)
from pywikibot import Site
self.site = Site("gl", "wikipedia", "Shyde")
self.redirect_page_name = redirect_page_name
def run(self):
import re
from pywikibot.page import Link, Page
from pywikibot.pagegenerators import PreloadingGenerator, \
ReferringPageGenerator
# Get redirect target.
redirect_page = Page(Link(self.redirect_page_name, source=self.site))
assert(redirect_page.isRedirectPage())
redirect_target = redirect_page.getRedirectTarget()
page_name_pattern = u"{}{}".format(
u"[{}{}]".format(
self.redirect_page_name[0].lower(),
self.redirect_page_name[0].upper()),
re.escape(self.redirect_page_name[1:])) \
.replace(u"\ ", u"[ _]")
link_re = re.compile(ur"\[\[ *{} *(\||\]\])".format(page_name_pattern))
# Get list of links to the specified page.
generator = ReferringPageGenerator(redirect_page)
generator = PreloadingGenerator(generator)
# Update links.
for page in generator:
old_page_content = page.get()
new_page_content = link_re.sub(ur"[[{}\1".format(
redirect_target.title()), old_page_content)
comment = u"As ligazóns a «{}» apuntan agora a «{}».".format(
self.redirect_page_name, redirect_target.title())
self.userPut(page=page, oldtext=old_page_content,
newtext=new_page_content, comment=comment,
show_diff=True)
# Assert that there are no more links.
generator = ReferringPageGenerator(redirect_page)
generator = PreloadingGenerator(generator)
remaining_links = list(generator)
if len(remaining_links) != 0:
print(u":: As seguintes páxinas aínda conteñen ligazóns a "
u"«{}»:".format(self.redirect_page_name))
print(u"\n".join([u"• {}".format(page.title())
for page in remaining_links]))
print(u":: Corrixa as páxinas da lista manualmente antes de "
u"marcar a redirección para borrado.")
from sys import exit
exit()
# Mark redirection page for removal.
comment = u"Esta páxina moveuse a «[[{}]]».".format(
redirect_target.title())
new_redirect_page_content = u"{{{{Lixo|{}}}}}".format(comment)
self.userPut(page=redirect_page,
oldtext=redirect_page.get(get_redirect=True),
newtext=new_redirect_page_content, comment=comment,
show_diff=True)
def main(argv):
bot = ShydeNaGalipedia(argv[0].decode(u"utf-8"))
bot.run()
if __name__ == "__main__":
from sys import argv
main(argv[1:])
Concellos de → Concellos da provincia de
editarNas subcategorías da Categoría:Concellos de España habería que mover tódolos artigos das categorías Concellos de ...
a Concellos da provincia de ...
. --. HombreDHojalata.conversa 25 de outubro de 2014 ás 18:19 (UTC) @ Conversa usuario:Gallaecio
Para marcar as categorías co modelo Redirección de categoría:
#!/usr/bin/env python2
# -*- coding:utf-8 -*-
"""
Engade o modelo {{Redirección de categoría}} ás categorías de concellos por
provincia.
"""
import re
from pywikibot import Bot
class ShydeNaGalipedia(Bot):
def __init__(self, **kwargs):
super(ShydeNaGalipedia, self).__init__(**kwargs)
from pywikibot import Site
self.site = Site("gl", "wikipedia", "Shyde")
self.category_name_regex = re.compile(u"^Concellos (d.*)$")
def run(self):
import re
from pywikibot.page import Link, Category
from pywikibot.pagegenerators import PreloadingGenerator, \
SubCategoriesPageGenerator
root_category = Category(Link(u"Categoría:Concellos de España",
source=self.site))
generator = SubCategoriesPageGenerator(root_category)
generator = PreloadingGenerator(generator)
for category in generator:
if category.title(withNamespace=False).startswith(u"Concellos d"):
subcategory_generator = SubCategoriesPageGenerator(category)
subcategory_generator = PreloadingGenerator(
subcategory_generator)
for subcategory in subcategory_generator:
category_content = subcategory.get()
if u"{{Redirección de categoría|" in category_content:
continue
category_name = subcategory.title(withNamespace=False)
if category_name.startswith(u"Concellos da provincia d") \
or category_name.startswith(
u"Concellos galegofalantes da provincia d"):
continue
match = self.category_name_regex.match(category_name)
if match:
new_category_name = u"Concellos da provincia {}" \
.format(match.group(1))
else:
print(u"Saltouse «{}».".format(category_name))
continue
new_category_content = \
u"{{{{Redirección de categoría|{}}}}}\n{}".format(
new_category_name,
category_content)
comment = u"Marcada para mover a «{}».".format(
new_category_name)
self.userPut(page=subcategory, oldtext=category_content,
newtext=new_category_content, comment=comment,
show_diff=True)
def main(argv):
bot = ShydeNaGalipedia()
bot.run()
if __name__ == "__main__":
from sys import argv
main(argv[1:])
- Nota: Non é perfecto, foi necesario desfacer cambios feitos co guión.
Unha vez marcadas as categorías, non houbo máis que executar o guión de mantemento, que entre as súas tarefas inclúe a de mover categorías marcadas co modelo Redirección de categoría e mailo contido das categorías.
- Como sabes, agora as categorías teñen a opción de "Mover" (igual que os artigos). Iso está ben porque move o historial e automaticamente modifica o wikidata.
- A cousa é que o bot non moveu. Creou unha categoría nova e branqueou a vella, por iso as categorías novas non aparecen coas ligazóns interlingüísticas de Wikidata.
- Poderías revisar iso?
- Moitas grazas. --. HombreDHojalata.conversa 14 de decembro de 2014 ás 14:37 (UTC)
- Pois non tiña nin idea. Queda modificado o guión de mantemento para utilizar a funcionalidade de mover. Moitas grazas! ─ GallaecioE logo? 14 de decembro de 2014 ás 18:28 (UTC)
Importar datos do IGE
editarSe se collen os datos de poboación dos concellos de Galicia do IGE, non se poderían actualizar de forma automática e doada os artigos dos concellos (habería que actualizar a poboación e o ano dos datos de poboación)? E si se pode facer cos concellos, poderá facerse tamén coas parroquias, non? ;) Saúdos, --Elisardojm (conversa) 26 de outubro de 2014 ás 21:14 (UTC) @ Wikipedia:Bots/Peticións de aprobación
- Facer isto é certamente posíbel e moi interesante, pero ademais gustaríame meter os datos en Wikidata e usar os datos de Wikidata na Galipedia. Pasará algún tempo ata que me poña con isto, pero farase. ─ GallaecioE logo? 14 de decembro de 2014 ás 11:25 (UTC)
- Home, tes toda a razón en que o ideal sería que eses datos estiveran en Wikidata, e que os artigos recibisen esa información dese repositorio de forma automática engadindo tamén a referencia primaria desa información, o que pasa é que de Wikidata eu aínda non mirei nada máis que o dos interwikis.
- E isto aplicaría tamén para a superficie dos concellos e outros datos fixos das caixas de información. Cando te poñas a mirar isto se che apetece avísame e vou botándolle eu tamén un ollo por se che podo axudar nalgo, tamén teño colegas na wiki-es e wiki-cat que ó mellor poderían botarnos unha man con algunha dúbida. Saúdos, --Elisardojm (conversa) 15 de decembro de 2014 ás 13:48 (UTC)
non se gañou nunha hora
editarOlla, Gallaecio! Como vai?
Podes dicirlle ao bot que mude as ligazóns cara a Zamora, España por Zamora?
Mil grazas!! --Estevo(aei)pa o que queiras... 21 de decembro de 2014 ás 00:53 (UTC)
Para cubrir a maioría dos casos:
python2 core/scripts/replace.py "[[Zamora, España|Zamora]]" "[[Zamora]]" -ref:"Zamora, España" -family:wikipedia -lang:gl -summary:"Zamora, España → Zamora" -always
O resto (2) editeinos a man.
parroquias galegas
editarOla de novo!
Vou facer a categoría:Parroquias de Galicia por advocación, e quería pedirche unha axudiña. O asunto é que agora as parroquias pertencen, por exemplo a categoría:Parroquias de Abadín, e estas á súa vez pertencen directamente a Categoría:Parroquias de Galicia, pero quería crear a subcategoría Categoría:Parroquias de Galicia por concello. Podería Shyde facer estes 315 cambios? Sería facer que "categoría:Parroquias de tal concello" pasase de estar en "Categoría:Parroquias de Galicia" a "Categoría:Parroquias de Galicia por concello".
Se me expliquei mal, avisa.
Mil grazas, e un saúdo! --Estevo(aei)pa o que queiras... 26 de decembro de 2014 ás 01:23 (UTC)
#!/usr/bin/env python2
# -*- coding:utf-8 -*-
"""Este guión move as subcategorías de [[Categoría:Parroquias de Galicia]] que
corresponden a unha categoría de parroquias por concello á categoría
[[Categoria:Parroquias de Galicia por concello]]."""
from pywikibot import Bot
class ShydeNaGalipedia(Bot):
def __init__(self, **kwargs):
super(ShydeNaGalipedia, self).__init__(**kwargs)
from pywikibot import Site
self.site = Site("gl", "wikipedia", "Shyde")
def run(self):
import re
from pywikibot.page import Link, Category
from pywikibot.pagegenerators import \
PreloadingGenerator, \
SubCategoriesPageGenerator
parroquias_de_galicia = Category(Link(
u"Categoría:Parroquias de Galicia", source=self.site))
generator = SubCategoriesPageGenerator(parroquias_de_galicia)
generator = PreloadingGenerator(generator)
# Update links.
for subcategory in generator:
subcategory_name = subcategory.title(withNamespace=False)
if re.match(u"^Parroquias d(e|[ao]s?) ", subcategory_name) and \
not subcategory_name.startswith(u"Parroquias de Galicia"):
old_content = subcategory.get()
new_content = re.sub(
ur"(?<=\[\[) *[cC]ategor(ía|y) *: *[pP]arroquias de "
u"Galicia *(?=[]\|])",
u"Categoría:Parroquias de Galicia por concello",
old_content)
comment = u"Cambiouse a categoría [[:Categoría:Parroquias " \
u"de Galicia|Parroquias de Galicia]] pola " \
u"categoría [[:Categoría:Parroquias de Galicia " \
u"por concello|Parroquias de Galicia por concello]]."
self.userPut(page=subcategory, oldtext=old_content,
newtext=new_content, comment=comment,
show_diff=True)
def main(argv):
bot = ShydeNaGalipedia()
bot.run()
if __name__ == "__main__":
from sys import argv
main(argv[1:])
Contra o reloxo
editarOla.
Podes mudar *contrarreloxo
e *contrareloxo
por contra o reloxo
[1] ?
Graciñas! --. HombreDHojalata.conversa 28 de decembro de 2014 ás 20:23 (UTC)
Empreguei a seguinte configuración de substitución no ficheiro «user-fixes.py»:
fixes['contra_o_reloxo'] = {
'regex': True,
'msg': {
'_default':u'*contrarreloxo → contra o reloxo',
},
'replacements': [
(ur"\b([Bb])omba contrarr?eloxo\b", ur"\1omba de reloxaría"),
(ur"\bBomba Contrarr?eloxo\b", ur"Bomba de Reloxaría"),
(ur"\[\[ *[Cc]ontrarr?eloxo *\| *([Cc])ontrarr?eloxista *\]\]", ur"\1orredor de [[contra o reloxo]]"),
(ur"(?u)\b([cC])ontrarr?eloxistas\b", ur"\1orredores de contra o reloxo"),
(ur"(?u)\b([cC])ontrarr?eloxista\b", ur"\1orredor de contra o reloxo"),
#(ur'\bA contrarr?eloxo\b', ur'Contra o reloxo'),
#(ur'\ba contrarr?eloxo\b', ur'contra o reloxo'),
(ur'(?u)(?<=\w )Contrarr?eloxos?\b', ur'Contra o Reloxo'),
(ur'(?u)\[\[ *([Cc])ontrarr?eloxo *\]\]s\b', ur'[[\1ontra o reloxo]]'),
(ur'(?u)\b([Cc])ontrarr?eloxos?\b', ur'\1ontra o reloxo'),
]
}
A aplicación das substitucións foi sempre mediante revisión manual, a configuración de substitución orixinal non tiña máis de dúas liñas e funa expandindo a medida que aparecían novos casos.
Para a aplicación das substitucións executei o guión «replace.py» do seguinte xeito:
python2 scripts/replace.py -fix:contra_o_reloxo -search:"contrarreloxo" -family:wikipedia -lang:gl -ns:0
Capitanía *Xeral -> Capitanía Xeneral
editarOla Gallaecio.
capitanía substantivo feminino 1 Cargo de capitán. Aspiraba á capitanía. FRASES E EXPRESIÓNS CON capitanía Capitanía xeneral 1 Cargo de capitán xeneral. Tomou posesión da capitanía xeneral. 2 Residencia e oficinas do capitán xeneral. Nesta cidade está a capitanía xeneral |
Podes facer a mudanza?
Moitas grazas e bo ano. --. HombreDHojalata.conversa 1 de xaneiro de 2015 ás 10:59 (UTC)
Empreguei a seguinte configuración de substitución no ficheiro «user-fixes.py»:
fixes['capitania'] = {
'regex': True,
'msg': {
'_default':u'capitanía *xeral → capitanía xeneral',
},
'replacements': [
(ur'\b([Cc])apitanía ([Xx])eral\b', ur'\1apitanía \2eneral'),
]
}
Para a aplicación das substitucións executei o guión «replace.py» do seguinte xeito:
python2 scripts/replace.py -fix:capitania -search:"capitanía" -family:wikipedia -lang:gl -ns:0
Algo non foi ben (Especial:Páxinas_que_ligan_con_esta/Capitanía_Xeral_de_Galicia). --. HombreDHojalata.conversa 1 de xaneiro de 2015 ás 13:35 (UTC)
- Non debín fiarme da busca da Wikipedia para buscar páxinas que necesitasen cambios, tocará aplicar os cambios a todas as páxinas do wiki. Tardará o seu, aviso. ─ GallaecioE logo? 1 de xaneiro de 2015 ás 14:09 (UTC)
- Agora si. En realidade AMPERIO fixo todos os cambios que faltaban manualmente antes de que o bot puidese facelos, todos salvo un que afectaba a Historia do viño. Agora non debería poñer "Capitanía xeral" máis que en Capitanía Xeneral de Galicia, onde aparece a expresión con esa forma dentro dun <ref> en maiúsculas]] (entendo que será mellor non cambialo aí, pero cámbiao se che parece). ─ GallaecioE logo? 1 de xaneiro de 2015 ás 16:40 (UTC)
Volvín aplicar as substitucións executando o guión «replace.py» do seguinte xeito:
python2 scripts/replace.py -fix:capitania -xml:glwiki-20141224-pages-articles.xml -family:wikipedia -lang:gl -ns:0
O dump XML ao que apunta a orde descargueino de dumps.wikimedia.org.
Sudáfrica
editarGrazas! Podes darlle a *Suráfrica -> Sudáfrica (segundo [2])? --. HombreDHojalata.conversa 12 de xaneiro de 2015 ás 12:17 (UTC)
Feito, grazas! Agora que está amañado o topónimo, habería que facer o propio co xentilicio. Ollo, ó contrario do topónimo o xentilicio correcto é con "r".
Os xentilicios masculino singular e masculino plural xa están amañados á man. Quedan por amañar os xentilicios femininos, singular e plural:
sudafricana- > surafricana (e tamén en maiúsculas cando vai no nome de organizacións...)sudafricanas- > surafricanas --. HombreDHojalata.conversa 13 de xaneiro de 2015 ás 22:32 (UTC)
- Por certo, deberías excluír da acción correctora do bot tódalas páxinas que comecen por
Wikipedia:A Taberna ...
, para que non desvirtúe as conversas. --. HombreDHojalata.conversa 13 de xaneiro de 2015 ás 22:41 (UTC)
- Por certo, deberías excluír da acción correctora do bot tódalas páxinas que comecen por
- Feito! (só foron necesarios 5 cambios) ─ GallaecioE logo? 23 de xaneiro de 2015 ás 07:04 (UTC)
No user-fixes.py
:
fixes['sudafricana'] = {
'regex': True,
'msg': {
'_default':u'*sudafricana → surafricana',
},
'replacements': [
(ur'\b([Ss]u)d(african[ao]s?)\b', ur'\1r\2'),
]
}
E para aplicar os cambios:
python2 scripts/replace.py -fix:sudafricana -family:wikipedia -lang:gl -ns:0 -xml:glwiki-20141224-pages-articles.xml
O dump XML ao que apunta a orde descargueino de dumps.wikimedia.org.