Usuari:KRLS/codi/importaCommonscatAWikidata.py

Passos a seguir:

  1. Executar el codi principal. "importaCommonscatAWikidata.py"
  2. Copiar "llistatelements.txt" (està en mode append, així que abans d'executar elimineu l'arxiu llistatelements.txt" anterior)
  3. 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