Kad sam 2006. prelazio s Blog.hr servisa na WordPress blog na vlastitoj domeni obećao sam kako ću napisati neki WP plugin s kojim ću prepisati stare postove. Ako budem imao vremena. Ali najvjerojatnije ne.
Puno je kiše palo od tog dana, u međuvremenu sam napustio WordPress, vrtio nekoliko svojih aplikacija da bi završio na trenutnoj Django aplikaciji na kojoj se i danas vrti. Aplikaciju sam započeo s Djangom inačice 1.8, a s današnjim updateom sam došao do zadnje LTS inačice. Iako mi se tada činilo da je super pisati postove u Markdown formatu ipak danas naginjem tome da se vratim vizualnom uređivanju HTML dokumenta. Markdown je zgodan za bilješke, može se pisati u običnom editoru, na bilo čemu, ali prečeste su mi situacije da se pitam kako ono ide sintaksa za... i ne mili mi se više taj asketizam. Tako da u planu opet imam migraciju bloga, ovaj put na Wagtail koji je jedan odličan CMS, koristim ga već na nekoliko manjih web stranica, a njegova StreamField funkcionalnost omogućava puno bolji unos strukturiranog sadržaja. Ali to će se dogoditi u nekom od budućih kišnih dana.
Današnji kišni dan iskoristio sam za konačnu migraciju objava sa starog Blog.hr servisa. Bilo je i prije takvih pokušaja, zadnji je išao tragom toga da to bude generička Python aplikacija, ali kako je ispalo da više vremena treba za organizaciju koda za objavu nego za samu funkcionalnost pa se prašina uhvatila na tom pokušaju.
Raščlanjivanje starog weba
Za raščlanjivanje (parsanje) sadržaja neke web stranice Python ima dosta zgodnih alata, ali svi su nekako specifični i za bilo koji složeniji zadatak na kraju uvijek shvatite da morate poznavati lxml.
Ja sam za početak odabrao requests-HTML jer sam se nadao da je to alat koji će mi cijeli zadatak pojednostavniti. Smanjio mi je količinu potrebnog koda, ali s njim nisam mogao dobiti sve što mi je trebalo, a i u nekim slučajevima mi je vraćao čudne rezultate. Kad sam želio dobiti HTML kod dohvaćenog elementa vratio mi je njegov kod, ali i sav kod koji je slijedio do kraja stranice. Kako on vraća i HTMLElement
posegnuo sam za lxml.etree.tostring
metodom da bi otkrio da je problem tj. bug baš u toj metodi koju koristi i requests-HTML. Za očekivani rezultat potrebno je proslijediti parametar method='html'
i još dodati encoding='unicode'
kako umjesto nekih znakova ne bi pojavile njihove escape sekvence. Nakon rješavanja tog problema sve ostalo je bilo trivijalno. U arhivi se nalaze svi stari postovi. Neke teme i neki postovi su danas pomalo smiješni, ali ipak potiču na malo učestalije objave nego što je to bilo u zadnje vrijeme. Dosta linkova o kojima pišem dana više nisu živi, ali uvijek možete probati Wayback Machine, možda je pospremljen. Za .hr web stranice provjerite i Hrvatski arhiv weba.
Na naslovnoj stranici bloga dodao sam mali widget "Na današnji dan" da se vidi o čemu sam još pisao istog dana.
I još jedan bug za kraj
Kad sam lokalno pokrenuo blog nisu se prikazivale slike pa sam najprije mislio da je do konfiguracije ili načina na koji django-versatileimagefield sprema podatke o varijacijama, ali nije bilo to. Problem je uzrokovao bug i promjena u Pillow paketu zbog kojega se slike ne generiraju. Ako koristite verstaileimagefield spustite Pillow na inačicu 9.5 kako bi generiranje varijacija i dalje radilo.