Archiwum pingera

tech, life • 598 słów • 3 minuty czytania

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)

Dodaj komentarz

/dozwolony markdown/

/nie zostanie opublikowany/