Come avrete notato nel codice tendo a commentare le linee che non mi servono invece di cancellarle: lo faccio perché così mi restano utili mnemonicamente e, comunque, spesso potrebbero anche riservirmi.
Nelle mie ricerche con Google di solito uso il primo suggerimento che mi viene restituito. Poi ci sono dei siti che ormai conosco come affidabili (tipo StackOverflow) e che quindi catturano prima il mio sguardo. In genere credo che sia molto importante usare le giuste chiavi di ricerca e, forse, sapere cosa aspettarsi: in molti degli esempi di ieri sapevo già cosa cercavo, solamente non mi ricordavo dei dettagli tecnici o non ne conoscevo la specifica sintassi: in questi casi probabilmente qualsiasi collegamento sarebbe andato bene…
Non ricordo se ho già scritto in altri pezzi, magari anche di diversi anni fa, la mia giaculatoria contro l’XML. In breve: incontrai l’XML per la prima volta alla fine degli anni ‘90 (all’epoca credo che fosse abbastanza nuovo) e subito rimasi perplesso dalle complicazioni aggiuntive che ne comporta l’uso. Alcuni miei colleghi però me ne esaltarono le caratteristiche (facilita lo scambio dei dati, essendo un archivio di testo lo si può modificare manualmente, è possibile verificarne formalmente la correttezza strutturale e, probabilmente, altro ancora che non ricordo…). All’epoca era così di moda che veniva usato da tutte le parti: un programma aveva bisogno di un archivio dove memorizzare alcune impostazioni? Lo si faceva in XML…
Devo ammettere che, pur se tutt’altro che convinto, anch’io lo usai per alcuni miei progetti.
Mi accorgo però in questi anni che gli sviluppatori indipendenti che scrivono i giochi che acquisto su Steam ormai non usano praticamente mai l’XML preferendogli in genere JSON (un formato anche questo di testo, molto più leggero e facile da usare che invece ebbe da subito tutta la mia simpatia).
Ci ho ripensato anche stanotte durante un’ora di insonnia e credo che l’unico ambito dove l’XML può avere un suo senso e dove si vogliano poter scambiare dati e metadati fra programmi indipendenti come appunto Wordpress e Blogger: ma anche in questo caso ho qualche dubbio se ne valga la pena oppure se sarebbe più pratico accordarsi su un formato diverso (non in XML)…
Chiaro che il preesistente ormai lo si mantiene in XML.
Pensavo a quali siano state le mie difficoltà a scrivere un programmino di 20 linee:
1. non ricordavo/conoscevo sintassi Python
2. non conoscevo libreria minidom
3. non conoscevo il formato XML con cui viene esportato il ghiribizzo
4. non avevo un editore di XML che mi permettesse di visualizzare facilmente la struttura del mio archivio: avrei risparmiato un po’ di tempo ad esempio evitando di cercare di distinguere fra loro i nodi genitore…
Nel complesso direi quindi di essermela cavata egregiamente e infatti “saper fare le cose senza saperle fare” è stato sempre un mio pregio: molto apprezzato in informatico dove, a causa della continua e frenetica innovazione, non si può mai sapere tutto...
Ieri sera, tornato a casa, ho poi terminato il programmino seguendo la traccia di algoritmo con cui avevo chiuso il pezzo precedente.
Non ho avuto grossi problemi: immaginatevi altre 5 o 6 facili ricerche su Google!
Il risultato è il seguente:
1: from xml.dom import minidom
2: import re
3: xmldoc = minidom.parse('TestiKGB.xml')
4: itemlist = xmldoc.getElementsByTagName('entry')
5: #print(len(itemlist))
6: testi=[]
7: dizio={}
8: for s in itemlist:
9: flag=False
10: for c in s.childNodes:
11: if(c.nodeName=="category" and c.getAttribute("term")=='http://schemas.google.com/blogger/2008/kind#post'):
12: flag=True
13: #if(c.getAttribute("term") in dizio):
14: # dizio[c.getAttribute("term")]=dizio[c.getAttribute("term")]+1
15: #else:
16: # dizio[c.getAttribute("term")]=1
17: if(flag):
18: for c in s.childNodes:
19: if(c.nodeName=="content"):
20: testi.append(c.firstChild.nodeValue)
21: print(len(testi))
22: testi.reverse()
23: #print(testi[1])
24: #dopo=re.sub('<br />', '\n', testi[1])
25: #dopo=re.sub('<[^<]+?>', '', dopo)
26: #print(dopo)
27: with open("PezziKGB.txt", "w") as text_file:
28: for t in testi:
29: dopo=re.sub('<br />', '\n', t)
30: dopo=re.sub('<[^<]+?>', '', dopo)
31: print(dopo, file=text_file)
Ora non ho voglia di commentare linea per linea (chi fosse interessato a qualcosa in particolare può comunque chiedermelo) ma mi limito a far notare le linee commentate dalla 23 alla 26: in pratica prima ho fatto una prova con un singolo pezzo, per verificare che le sostituzioni tramite espressione regolari funzionassero correttamente, e solo successivamente ho riadattato il codice in maniera da trasformare e scrivere su archivio di testo tutti i pezzi.
Alla linea 29 trasformo i <br /> in “ritorni a capo” (cioè ‘\n’) mentre alla 30 rimuovo tutto il restante codice HTML che poteva essere presente nei miei pezzi (come immagini, tabelle, grassetto, etc…). Il codice della linea 30 l’ho copiato da Internet mentre la linea 29 è mia…
La linea 22 è inutile ma mi piaceva avere i miei pezzi ordinati a partire dal primo (anche se poi l’ordine non è proprio corretto e deve seguire qualche altro strano criterio).
Ah, prima di poter usare l’archivio di testo ottenuto dovrò filtrarne via anche i “Corti” perché altrimenti mi ritrovo linee del tipo “TITOLO – DATA” che non hanno senso nell’ottica dell’uso che voglio farne.
Non credo che ripeterò l’esperimento di raccontare passo passo come scrivo un programma perché, come previsto, mi rallenta troppo e mi fa perdere concentrazione passare continuamente da un’attività all’altra. Però questa esperienza è stata comunque divertente e sono contento di averla fatta: mi pare che renda abbastanza bene l’idea di come lavori nella pratica un informatico (sebbene estremamente impreparato come me!) messo di fronte a problemi nuovi.
Conclusione: è triste ammetterlo ma il migliore amico del programmatore non è il cane ma Google.
Nessun commento:
Posta un commento