Usuari:KRLS/codi/importaCommonscatAWikidata.py
Aparença
Passos a seguir:
- Executar el codi principal. "importaCommonscatAWikidata.py"
- Copiar "llistatelements.txt" (està en mode append, així que abans d'executar elimineu l'arxiu llistatelements.txt" anterior)
- Executar codi pywikipedia segons necessitat per afegir el commonscat als articles que no tenien item a wikidata:
python pwb.py replace.py -cat:"Pàgines amb enllaç commonscat igual que Wikidata" -regex "\{{2}[c|C]ommonscat\s*\|(.*?)\}{2}" "{{commonscat}}" "\{{2}[c|C]ommonscat-inline\s*\|(.*?)\}{2}" "{{commonscat-inline}}" "\{{2}[c|C]ommons\s*\|\s*[c|C]ategory:(.*?)\}{2}" "{{commonscat}}" "\|\s*[c|C]ommonscat\s*=(.*?)\|" "|" "\|\s*[c|C]ommonscat\s*=(.*?)\}{2}" "}}" "\{{2}[c|C]ommons category\s*\|(.*?)\}{2}" "{{commonscat}}" "\{{2}[c|C]ommons cat\s*\|(.*?)\}{2}" "{{commonscat}}" "\{{2}[c|C]ommons_cat\s*\|(.*?)\}{2}" "{{commonscat}}" -summary:"Elimino camp perque l'agafi de Wikidata al ser igual."
python pwb.py replace.py -subcats:"Categories amb enllaç commonscat igual que Wikidata" -regex "\{{2}[c|C]ommonscat\s*\|(.*?)\}{2}" "{{commonscat}}" "\{{2}[c|C]ommonscat-inline\s*\|(.*?)\}{2}" "{{commonscat-inline}}" "\{{2}[c|C]ommons\s*\|\s*[c|C]ategory:(.*?)\}{2}" "{{commonscat}}" "\|\s*[c|C]ommonscat\s*=(.*?)\|" "|" "\|\s*[c|C]ommonscat\s*=(.*?)\}{2}" "}}" "\{{2}[c|C]ommons category\s*\|(.*?)\}{2}" "{{commonscat}}" "\{{2}[c|C]ommons cat\s*\|(.*?)\}{2}" "{{commonscat}}" "\{{2}[c|C]ommons_cat\s*\|(.*?)\}{2}" "{{commonscat}}" -summary:"Elimino camp perque l'agafi de Wikidata al ser igual."
#!/usr/bin/python
# -*- coding: utf-8 -*-
import pwb
import pywikibot
import sys
import re
import codecs
itemspendentsdecrear = []
llistatPatronsCercaEstandard = [
u'\{{2}[c|C]ommonscat\s*\|(.*?)\|',
u'\{{2}[c|C]ommonscat\s*\|(.*?)\}{2}',
u'\{{2}[c|C]ommonscat-inline\s*\|(.*?)\|',
u'\{{2}[c|C]ommonscat-inline\s*\|(.*?)\}{2}',
u'\{{2}[c|C]ommons cat\s*\|(.*?)\|',
u'\{{2}[c|C]ommons cat\s*\|(.*?)\}{2}',
u'\{{2}[c|C]ommons_cat\s*\|(.*?)\|',
u'\{{2}[c|C]ommons_cat\s*\|(.*?)\}{2}',
u'\{{2}[c|C]ommons category\s*\|(.*?)\|',
u'\{{2}[c|C]ommons category\s*\|(.*?)\}{2}',
u'\{{2}[c|C]ommons\s*\|\s*[c|C]ategory:(.*?)\|',
u'\{{2}[c|C]ommons\s*\|\s*[c|C]ategory:(.*?)\}{2}',
u'\|\s*[c|C]ommonscat\s*=(.*?)\|',
u'\|\s*[c|C]ommonscat\s*=(.*?)\}{2}'
]
llistatPatronsCercaSenseCamps = [
u'\{{2}[c|C]ommonscat\s*\}{2}',
u'\{{2}[c|C]ommonscat-inline\s*\}{2}',
u'\{{2}[c|C]ommons cat\s*\}{2}',
u'\{{2}[c|C]ommons_cat\s*\}{2}',
u'\{{2}[c|C]ommons category\s*\}{2}',
]
llistatPatronsEliminacio = [
u'\{{2}[c|C]ommonscat\s*\}{2}',
u'\{{2}[c|C]ommonscat\s*\|(.*?)\}{2}',
u'\{{2}[c|C]ommonscat-inline\s*\}{2}',
u'\{{2}[c|C]ommonscat-inline\s*\|(.*?)\}{2}',
u'\{{2}[c|C]ommons cat\s*\}{2}',
u'\{{2}[c|C]ommons cat\s*\|(.*?)\}{2}',
u'\{{2}[c|C]ommons_cat\s*\|(.*?)\}{2}',
u'\{{2}[c|C]ommons_cat\s*\}{2}',
u'\{{2}[c|C]ommons category\s*\|(.*?)\}{2}',
u'\{{2}[c|C]ommons category\s*\}{2}',
u'\{{2}[c|C]ommons\s*\|\s*[c|C]ategory:(.*?)\}{2}',
u'\|\s*[c|C]ommonscat\s*=(.*?)\}{2}',
u'\{{2}[c|C]ommonscat\s*\|\s*\}{2}'
]
try:
f = codecs.open('llistatelements.txt', 'ab', 'utf8')
except (OSError, IOError) as e:
print u'Problemes per obrir l\'arxiu %s' % arxiu
exit(0)
#CREATE (new line) LAST Lca "Cementiri de Sant Gervasi"(new line) LAST Scawiki "Cementiri de Sant Gervasi"
def crearLlistatItemsNous (nomArticle):
linia = "LAST\tLca\t\"%s\"\n" % nomArticle
linia2 = "LAST\tScawiki\t\"%s\"\n" % nomArticle
f.write("CREATE\n")
f.write(linia)
f.write(linia2)
def SetDataString(repo, item, literal):
claim = pywikibot.Claim(repo, u'P373') #commonscat
imported = pywikibot.Claim(repo, u'P143') # importat de
source = pywikibot.ItemPage(repo, u'Q199693') #wikipedia in catalan
if source.exists():
imported.setTarget(source)
claim.setTarget(literal)
item.addClaim(claim)
claim.addSources([imported])
def trySetDataString(repo, item, literal):
if item.claims: #Si no tens dades al Claims
if u'P373' in item.claims:
print u"Element Commonscat: %s ja hi és al sistema" % (literal)
else:
print "Guardo %s" % (literal)
SetDataString(repo, item, literal)
else:
print "Guardo %s" % (literal)
SetDataString(repo, item, literal)
def main():
site = pywikibot.Site("ca", "wikipedia")
repo = site.data_repository()
category_page = pywikibot.Category(site, u'Pàgines sense enllaç commonscat a Wikidata')
count = 0
for articlepagina in category_page.articles():
print "--------------------------------------------"
EsPaginaUsuari = re.findall(u':',articlepagina.title())
titol = ""
print articlepagina.title()
if not EsPaginaUsuari:
contingut = articlepagina.get()
titol = re.findall(u'\{{2}[c|C]ommonscat\s*\|\s*\}{2}', contingut)
if titol:
titol = [articlepagina.title()]
if not titol:
for patro in llistatPatronsCercaEstandard:
titol = re.findall(patro,contingut)
if titol:
break
if not titol:
for patro in llistatPatronsCercaSenseCamps:
titol = re.findall(patro,contingut)
if titol:
titol = [articlepagina.title()]
break
site2 = pywikibot.Site("commons", "commons")
for index in range(0,len(titol)):
if index == 0:
categoriaACommons = u'Category:'+titol[index]
titolauxiliar = titol[index]
if titolauxiliar == u'{{PAGENAME}}':
titolauxiliar = articlepagina.title()
categoriaACommons = u'Category:'+titolauxiliar
print titolauxiliar
existeixCategoria = pywikibot.Category(site2, categoriaACommons)
print existeixCategoria
if existeixCategoria.exists():
print existeixCategoria
try:
item = pywikibot.ItemPage.fromPage(articlepagina)
if item.exists():
if titolauxiliar:
print "L'article %s existeix" % articlepagina
titolauxiliar = titolauxiliar.strip()
trySetDataString(repo, item, titolauxiliar)
else:
print "No l'he sabut caçar" % articlepagina
except:
crearLlistatItemsNous(articlepagina.title())
count = count + 1
print count
else:
print "No exsiteix l'element"
trobat = False
for patro in llistatPatronsEliminacio:
if not trobat:
contingutvec=re.subn(patro,'', contingut)
if contingutvec[1] > 0:
trobat = True
print "Contingut eliminat"
articlepagina.put(contingutvec[0],u'Elimino plantilla commonscat perque no enllacen a cap categoria existent a Commons')
if not trobat:
contingutvec=re.subn(u'\|\s*[c|C]ommonscat\s*=(.*?)\|','|', contingut)
if contingutvec[1] > 0:
articlepagina.put(contingutvec[0],u'Elimino plantilla commonscat perque no enllacen a cap categoria existent a Commons')
if __name__ == '__main__':
main()
f.close()
print itemspendentsdecrear