Archiwum pingera
Nowy mini-blog na moim twitterze już ładnie pracuje, a stary z pingera już wkrótce zniknie z sieci.
Dzięki mojemu skryptowi do pobierania historii z pingera (o nim w kolejnym wpisie) wyeksportowałem wszystkie wpisy razem z komentarzami. Udało mi się już wszystkie przejrzeć i odfiltrować te zbędne, a następnie kolejnym skryptem (o nim na końcu) przetworzyć wygenerowane archiwum z JSON-owej formy na format HTML-owy, aby finalnie zaprezentować w niniejszej notatce.
Jest to wpis archiwizujący całą moją aktywność z serwisu pinger.pl. Powstał głównie dla moich własnych potrzeb dokumentacyjnych. Jest też ciekawym zbiorem opisującym okres czasu, w jakim byłem aktywnym mini-blogerem. Niektóre wpisy i komentarze mogą się wydawać nieco dziwne, ale gdy ktoś z komentujących usunął konto przed moim zrzutem to zniknęły jego wpisy i komentarze. Dlatego niektóre wypowiedzi mogły utracić swój pierwotny kontekst i sens.
Poniżej lista wszystkich wpisów. Miłej lektury!
W tym miejscu znajdowała się lista wszystkich archiwalnych wpisów opublikowanych w serwisie pinger.pl.
Aktualnie, po wprowadzonych zmianach w archiwizacji mini-bloga, wpisy te zostały przeniesione do dedykowanych notatek publikowanych na koniec każdego roku.
Do przetworzenia zbudowanego archiwum na czytelną postać w HTML-u napisałem sobie kolejny bardzo prosty perlowy skrypt. Jako, że plik archiwum zawiera tablicę obiektów JSON-owych, gdzie każda linia reprezentuje jeden obiekt, to przetwarzanie jest bardzo proste i sekwencyjne - linia po linii. Oczywiście z pominięciem kilku specjalnych linijek - komentarzy w nagłówku pliku i otoczki JS-owej tablicy ([
i ]
).
Podobnie, przed parsowaniem trzeba nieco poprawić linię, aby perlowy parser JSON-a nie krzyczał o jakiś niepoprawnych znakach lub złym niewalidującym się formacie. Dlatego z końca linii należy wyciąć ,
rozdzielający poszczególne elementy tablicy archiwum. I dopiero wtedy takim stringiem można nakarmić funkcję dekodującą decode_json
.
Główna logika tego skryptu wygląda następująco:
say '<section class="pinger">';
say '<ol class="posts">';
while (<$fh>) {
next if /^\s*#/; # skip comments
next if /^\[|\]$/; # skip start/end array lines
s/,$//; # remove , from end
s/\\r\\n/\\n\\n/g; # normalize new lines
my $c = decode_json($_);
say '<li><article>';
[...]
say '</articler></li>', "\n";
}
say '</ol>';
say '</section>';
Uwagę może przykuwać normalizacja znaków nowych linii przed dekodowaniem wpisu. Pinger kończył linie w wiadomości standardowo \r\n
, ale JSON-owy praser lub Perl dziwnie je interpretował w tekstach wiadomości. Czasem pozostawał sam znak powrotu karetki, a czasem w towarzystwie nowej linii. Na wszelki wypadek, dla spójności, pozostałem przy gołym \n
, ale w podwójnej wersji, aby WordPress traktował odpowiednio poszczególne akapity w tekście.
Dodatkowo chciałem nieco poprawić formatowanie swoich tekstów…
Na początek warto zamienić wszystkie linki w klikalne odnośniki. Ale, z pominięciem tych skierowanych do youtube’a, bo to już zadanie dla samego WordPresa, który ładnie zamieni takie adresy na emebedowany kod z odtwarzaczem video. Łatwa sprawa do zrobienia przez nieco rozbudowane wyrażenie regularne:
# replace url to html link
# except youtube / wp will try embed text url to video
s!(http(?:s)?://([^\s]+))! $_=$1; \
$2 =~ /^(www\.youtube\.com)/ ? $_ : '<a href="'.$_.'">'.$_.'</a>' !xeg;
Często też linki wrzucałem do nowej linii w wiadomościach, przez co teraz w wielu przypadkach odnośnik taki wyląduje w nowym akapicie. Dlatego postanowiłem to zniwelować już w kodzie skryptu, aby później ręcznie tego nie poprawiać:
# remove empty line before link
s/\n\n<a/\n<a/gi;
Te wszystkie regexp-owe potworki wrzuciłem do prostej funkcji make_links
, ponieważ oprócz wpisów, także komentarze powinny zostać sformatowane w ten sam sposób.
Po uruchomieniu skryptu otrzymałem HTML-owe archiwum pingerowych wpisów, wpakowane w odrębną sekcję, którą można bezpośrednio wkleić do kodu strony lub wpisu na dzienniku. Wraz z małą szczyptą CSS-a idealnie współgra to z pozostałą częścią wpisu. Szczegóły formatowania i styli do obczajenia w źródle niniejszego wpisu ;)
Pełny kod skryptu pewnie wrzucę do sieci wraz ze skryptem do pobierania wpisów z pingera w kolejnej notatce ;)
Komentarze (0)