#!/usr/bin/env python
# -*- coding: utf-8 -*-
import re, wikipedia
def main():
args = wikipedia.handleArgs()
site = wikipedia.getSite('it', 'wikiquote')
genPage = wikipedia.Page(site, "Utente:Nemo bis/Elenco titoli")
for i in genPage.linkedPages():
iText = i.get()
#Prendo i titoli dei paragrafi dedicati a un'opera che contengano anche un incipit:
opereconincipit = re.findall(r"(?m)^==\s*(''|''''')\s*(.*?)\s*\1\s*==(?:\s*\n)+===\s*(\[\[)?[Ii]ncipit(\]\])?\s*===", iText)
#Prendo il titolo dell'opera dai paragrafi dedicati a una sola opera di cui c'è solo l'incipit [non bisogna eliminare il primo gruppo perché se ce n'è solo una restituisce una lista di caratteri[:
# incipitsingoli = re.findall(r"(?m)^==(\[\[)?[Ii]ncipit(\]\])? di ''([^']+)''==", iText)
incipitsingoli = re.findall(r"(?m)^==\s*\[\[[Ii]ncipit\]\]\s*d(i|e|el|ello|ella|ei|egli|elle)\s*''\s*(.*)\s*''\s*==", iText)
#Prendo tutto il testo del paragrafo che contiene un elenco di incipit. Il contenuto del paragrafo è definito come tutto ciò che è l'apertura o chiusura di un'intestazione di terzo livello oppure non è un = (sono quindi escluse le intestazioni di quarto livello). Butto via tutto ciò che viene prima e tutto ciò che viene dopo a partire dalla prima intestazione di secondo livello, il primo === e il contenuto dell'ultimo paragrafo di terzo livello a partire dalla chiusura dell'intestazione.
paragrafoincipitmultipli = re.subn(r"(?m)\A[\w\W]+^==\s*\[\[[Ii]ncipit\]\] di alcune opere\s*==\n===(?P<paragrafo>(===|[^=])+)===(?:\s*\n)[^=]+(?:^==[^=]+==(?:\s*\n)+)[\w\W]+\Z", r"\g<paragrafo>", iText, 1)
#Estraggo i titoli dalle intestazioni di terzo livello, separati da tutto ciò che sta fra la chiususra di un'intestazione e l'apertura della successiva (comprese).
incipitmultipli = ['Vuoto']
if paragrafoincipitmultipli[1] > 0:
incipitmultipli = re.split(r"(?m)===(?:\s*\n)*[^=]+^===", paragrafoincipitmultipli[0])
#(?<=\s*''\s*.*\s*''\s*) sre_constants.error: look-behind requires fixed-width pattern
#Stampo i titoli trovati, se ce ne sono.
if (len(opereconincipit) > 0 or len(incipitsingoli) > 0 or len(incipitmultipli) > 1):
wikipedia.output("*[[" + i.title() + "]]")
for j in opereconincipit:
wikipedia.output("**''" + j[1] + "''")
for k in incipitsingoli:
wikipedia.output("**''" + k[1] + "''")
#Solo se ci sono almeno due elementi ho trovato un paragrafo e ne ho estratto dei titoli.
if len(incipitmultipli) > 1:
for l in incipitmultipli:
wikipedia.output("**" + l)
if __name__ == "__main__":
try:
main()
finally:
wikipedia.stopme()