Przejdź do treści głównej

Prezentacja i formatowanie wyników

Dostępne formaty dla zachowania wyników

Do formatowania wyników w A-Parser stosowany jest system szablonów Template Toolkit, co pozwala łatwo zapisywać wyniki scrapowania w różnych formatach:

  • W plikach tekstowych jako lista: jeden wynik na wiersz, przez separator, w dowolnym formacie
  • W plikach CSV z możliwością dalszego importu do Excel, Google Docs itp.
  • W XML, JSON i innych formatach przechowywania danych
  • W HTML generując strony "w locie"
  • W formacie zrzutów SQL do bezpośredniego importu do bazy danych lub bezpośrednio zapisując do bazy SQLite
  • W formacie binarnym do zapisywania obrazów (jpg, png, gif, ...), dokumentów (pdf, docx, ...), plików wykonywalnych i archiwów (exe, dmg, zip, ...) oraz dowolnych innych typów danych

Edycja formatu wyniku

Result format (Format wyniku) - pozwala formatować wyniki do pożądanego wyglądu przy użyciu szablonów, jest stosowany dla każdej kombinacji zapytanie-wyniki.

Formaty wyników
  • Ogólny format wyniku określa się w polu Result format
  • Format wyniku dla każdego scrapera z osobna można ustawić w ustawieniach scrapera w Result format

A-Parser obsługuje pracę z wieloma scraperami w jednym zadaniu, w ogólnym formacie wyników należy wskazać, z którego scrapera wyprowadzić wynik:

  • $p1 - wyniki z pierwszego scrapera (SE::GoogleSE::Google na zrzucie ekranu), $p2 - wyniki z drugiego scrapera (SE::BingSE::Bing na zrzucie ekranu)
  • Numer porządkowy scrapera wyświetlany jest po lewej stronie pola wyboru scrapera
  • $p1.preset i $p2.preset oznacza, że należy pobrać wartość formatu wyniku z ustawień odpowiednich scraperów
  • W tym przykładzie $p1.preset można zastąpić przez $p1.serp.format('$link\n'), co przyniesie taki sam efekt, przy czym format wyniku z ustawień nie będzie już używany

Result format (Format wyniku) można podać w wygodnym edytorze wielowierszowym, klikając odpowiednią ikonę w polu edycji:

Pole edycji formatu wyniku

W ogólnym formacie wyników dostępne są następujące zmienne:

  • $query - zapytanie po sformatowaniu
  • $query.* - wszystkie zmienne odnoszące się do zapytania, opisane w artykule Szablony w zapytaniach
  • $p1, $p2, ... - zmienne do dostępu do wyników scrapowania dla każdego scrapera z osobna (Podgląd możliwych wyników dla każdego scrapera)
  • $p1.query, $p2.query, ... - zapytania po sformatowaniu z uwzględnieniem formatu zapytania wskazanego w ustawieniach każdego scrapera

Początkowy i końcowy tekst

Dla każdego pliku wyników określa się osobny Początkowy/Końcowy tekst:

  • Do tworzenia nagłówka pliku CSV
  • Dla tagów początkowych i końcowych pliku XML
  • Dla nagłówka (header), sekcji górnej i stopki (footer) plików HTML
  • Dla dowolnych innych zastosowań

Aby aktywować tę funkcję, należy kliknąć przycisk More options (Więcej opcji) w dolnej części Edytora zadań

Pola dla tekstu początkowego i końcowego

W tekście początkowym i końcowym obsługiwane jest użycie systemu szablonów Template Toolkit, dostępne zmienne:

  • $query - zapytanie po sformatowaniu
  • $query.* - wszystkie zmienne odnoszące się do zapytania, opisane w artykule Szablony w zapytaniach
notatka

Ważne! Te zmienne są dostępne tylko przy zapisywaniu każdego zapytania do osobnego pliku lub przy użyciu tych samych zmiennych w Formacie nazwy pliku wyniku.

Format nazwy pliku wyników

A-Parser pozwala używać szablonów również w nazwach plików wynikowych, co umożliwia automatyczne tworzenie plików i folderów na podstawie bieżącej daty, numeru porządkowego zapytania, samego zapytania i w dowolnym innym formacie.

Pole Nazwa pliku

W polu File name (Nazwa pliku) obsługiwane są następujące zmienne:

  • Wszystkie zmienne dostępne dla Ogólnego formatu wyniku
  • $queriesfile - ścieżka i nazwa pliku z zapytaniami, jeśli zapytania podano przez formularz, będzie zawierać queries_from_text.txt
  • $datefile - obiekt wtyczki date systemu szablonów Template Toolkit, skonfigurowany na format daty %b-%d_%H-%M-%S, przy formatowaniu zwraca bieżący czas i datę w postaci May-08_20-08-38, format można zmienić w Ustawieniach dodatkowych

Domyślnie nazwa pliku jest tworzona na podstawie daty i godziny w momencie startu zadania

Kompleksowy przykład

reports/$queriesfile/${query}.txt
  • Zostanie utworzony folder reports
  • Zostanie utworzony podfolder o nazwie pliku zapytań
  • W podfolderze zostanie utworzonych tyle plików, ile zapytań jest używanych w zadaniu, jako nazwa pliku zostanie użyte samo zapytanie z rozszerzeniem .txt
wskazówka

Zmienna $query jest zapisana w formacie ${query}, aby zapobiec interpretacji rozszerzenia .txt jako części zmiennej, więcej szczegółów w dokumentacji systemu szablonów Template Toolkit

⏩ Wideo. Nazywanie plików wyników

W tym filmie przedstawimy kilka przykładów nazywania pliku wyniku:

  1. Numeracja pliku wyniku zgodnie z zapytaniami.
  2. Numeracja pliku wyniku + część nazwy zapytania.
  3. Nazywanie pliku wyniku według zapytania, jeśli zapytanie jest linkiem.

Przegląd dostępnych wyników

Każdy scraper posiada własny zestaw wyników, listę dostępnych wyników można przejrzeć najeżdżając kursorem na scraper, w wyskakującej podpowiedzi zostanie wyświetlona lista prostych wyników oraz tablic, wraz z listą elementów zagnieżdżonych:

Lista dostępnych wyników w podpowiedzi

Na żółto zaznaczono wyniki wspólne dla wszystkich scraperów:

  • $query - zapytanie przekazane do scrapera po sformatowaniu
  • $query.orig - oryginalne zapytanie (w takiej formie, w jakiej było w pliku lub w polu wprowadzania zapytań)
  • $query.first - pierwsze zapytanie przy użyciu opcji zagnieżdżonego scrapowania (Parse all results lub Parse to level)
  • $info.success - informacja o powodzeniu scrapowania danego zapytania
  • $info.retries - liczba wykorzystanych prób dla danego zapytania
  • $info.stats - statystyki pracy scrapera dla danego zapytania
  • $pages.$i.data - tablica z nieprzetworzonymi odpowiedziami od serwera dla możliwości samodzielnego wyodrębnienia dodatkowych informacji
Zielonym zaznaczono wyniki dostępne tylko dla scrapera SE::BingSE::Bing:
  • $totalcount - liczba wyników wyszukiwania
  • $ads z elementami $link, $anchor, $visiblelink, $snippet, $position i $page - tablica z listą reklam
  • $related.$i.key - tablica z listą powiązanych słów kluczowych
  • $serp z elementami $link, $anchor, $snippet, $cache - tablica z głównymi wynikami wyszukiwarki
notatka

Zauważ, że dla tablic jawnie wskazywana jest zmienna $i, co oznacza, że elementów jest kilka i można się do nich odwołać przez indeks (numer pozycji) lub iterować po każdym elemencie w pętli.

wskazówka

Rezultat $pages.$i.data zostanie automatycznie zmieniony na $data dla tych scraperów, które nie "przechodzą po stronach" w ramach jednego zapytania. Na przykład jak DeepL::TranslatorDeepL::Translator.

Prezentacja wyników

A-Parser został stworzony do scrapowania informacji wszelkiego rodzaju, w tym celu wprowadzono 2 typy wyników:

  • Proste wyniki (Flat)
  • Tablice wyników (Array)

Rozważmy każdy typ na przykładzie scrapera SE::GoogleSE::Google, zrzut ekranu wyników:

Zrzut ekranu wyników Google

Proste wyniki

Simple results (Proste wyniki) - gdy jednemu zapytaniu odpowiada jeden wynik, przykłady:

  • Liczba wyników dla zapytania ($totalcount)
  • Czy zapytanie jest literówką ($misspell, nie przedstawiony na zrzucie ekranu)

Inne przykłady:

  • Wartość przetłumaczonego tekstu ($translated) w scraperze DeepL::TranslatorDeepL::Translator
  • Liczba domen odsyłających ($domains), wartość zaufania ($trustflow), linki zwrotne ($backlinks) itp. w scraperze Rank::MajesticSEORank::MajesticSEO

Pojedyncze wyniki są zapisywane w zwykłych zmiennych (prefiks $ + nazwa łacińska)

Tablice wyników

Tablice wyników - gdy jednemu zapytaniu odpowiada lista wyników, każdy element listy z kolei może zawierać kilka zagnieżdżonych elementów. Przeanalizujmy to na przykładzie wyników Google - są one reprezentowane w scraperze przez tablicę $serp, dla przejrzystości użyjemy tabeli, zapiszemy pierwsze 5 wyników:

Link ($link)Anchor ($anchor)Snippet ($snippet)
http://www.speedtest.net/Speedtest.net by Ookla - The Global Broadband Speed TestTest your Internet connection bandwidth to locations around the world with this interactive broadband speed test from Ookla.
http://en.wikipedia.org/wiki/Test_cricketTest cricket - Wikipedia, the free encyclopediaTest cricket is the longest form of the sport of cricket. Test matches are played between national representative teams with "Test status", as determined by the ...
http://www.speakeasy.net/speedtest/Speakeasy Speed TestSaturday 03-May 2014, 11:04:29 AM Your IP: The Speakeasy Speed Test requires Flash v7 or higher. Please update your browser. See Pricing Or Call Today
http://www.humanmetrics.com/cgi-win/jtypes2.aspPersonality test based on C. Jung and I. Briggs Myers type theoryHumanmetrics Jung Typology Test™ instrument uses methodology, questionnaire, scoring and software that are proprietary to Humanmetrics, and shall not be ...
http://test-ipv6.com/Test your IPv6.This will test your browser and connection for IPv6 readiness, as well as show you your current IPV4 and IPv6 address. ... Test your IPv6 connectivity. JavaScript ...

Każda pozycja wyników jest zapisywana w tablicy z 3 zagnieżdżonymi elementami - link ($link), anchor ($anchor), snippet ($snippet)

Inny przykład - lista powiązanych słów kluczowych, która jest zapisywana w tablicy $related:

Słowo kluczowe ($key)
test wwe
depression test
test my speed
wonderlic test
test personality
act test
jiggle test
bipolar test

Jak widać, w tej tablicy jest tylko jeden zagnieżdżony element - słowo kluczowe ($key)

Numeracja elementów tablic zaczyna się od 0, przykład dostępu do poszczególnych elementów tablicy:

  • $serp.0.link - pierwszy link z wyników
  • $serp.3.anchor - czwarty anchor z wyników
  • $related.0.key - pierwsze powiązane słowo kluczowe

Bardziej szczegółowo formatowanie prostych wyników i tablic zostanie opisane poniżej

Zasady formatowania

Po tym, jak scraper zebrał dane w prostych wynikach i tablicach, należy je wyświetlić (zapisać do pliku) w odpowiednim formacie. Dla wygody i funkcjonalności w A-Parser wykorzystywany jest silnik szablonów Template Toolkit. Przeanalizujmy często używane konstrukcje, w tym celu skorzystamy z narzędzia Testowanie szablonów. Wybierzmy projekt dla scrapera SE::GoogleSE::Google:

Testowanie szablonów

Na zrzucie ekranu przedstawiono 3 pola:

  • JSON - wewnętrzna reprezentacja danych w scraperze
  • Template - szablon, według którego odbywa się formatowanie wyniku
  • Result - bezpośrednio przekształcone dane według wskazanego szablonu, właśnie w takiej formie wynik zostanie zapisany do pliku

Zmieniając szablon możemy zmieniać wygląd wyniku, rozważmy następujący szablon:

Przykład

Tekst w polu Template (Szablon):

Raport dla zapytania: $query    
Konkurencja: $totalcount
Lista linków, anchorów i snippetów:
$serp.format('$link $anchor\n$snippet\n\n')

Wyróżnijmy główne zasady:

  • Zwykły tekst jest wyprowadzany do wyniku bez zmian
  • Aby wyprowadzić proste wyniki, należy w odpowiednim miejscu umieścić zmienną zawierającą pożądany wynik z prefiksem $
  • Do formatowania tablic używana jest metoda .format, o której nieco niżej
  • \n odpowiada za przejście do nowej linii

Formatowanie tablic

Przeanalizujmy konstrukcję:

$serp.format('$link $anchor\n$snippet\n\n')

Ten zapis oznacza, że dla tablicy $serp należy wywołać metodę .format z parametrem '$link $anchor\n$snippet\n\n'. Metoda .format łączy w ciąg znaków wszystkie elementy tablicy według szablonu podanego w parametrze, sam szablon oznacza: dla każdego elementu tablicy $serp wyprowadź link i anchor oddzielone spacją, następnie od nowej linii wyprowadź snippet, po czym następują jeszcze dwa przejścia do nowej linii, tworząc w rezultacie pustą linię między wynikami.

Użycie systemu szablonów

Wyprowadzanie zmiennych

Aby skorzystać z systemu szablonów, należy wstawić tagi [% %], a wewnątrz tagów wprowadzić logikę, która ma zostać wykonana.

Wyprowadzanie CMS z użyciem systemu szablonówWynik wyprowadzania CMS z użyciem systemu szablonów

Przejście po tablicy

Do wyprowadzania elementów tablicy należy użyć konstrukcji FOREACH:

[% FOREACH i IN p1.list;    
i.cms _ "\n";
END %]
wskazówka

Więcej informacji i przykładów dotyczących systemu szablonów znajduje się w Cechy pracy szablonów w A-Parser.

Przykłady

Wyprowadzanie konkurencji

Wyświetlanie konkurencji dla zapytania (liczby wyników dla zapytania) dla wszystkich scraperów wyszukiwarek (SE::GoogleSE::Google, SE::YandexSE::Yandex...).

Format wyniku:

$query: $totalcount\n

Przykład wyniku:

test: 3910000000
viagra: 278000000
okna pvch: 3220000
...

Wyprowadzanie linków z wyników wyszukiwarek.

Format wyniku:

$serp.format('$link\n')

Przykład wyniku:

http://www.speedtest.net/
http://www.speakeasy.net/speedtest/
http://en.wikipedia.org/wiki/Test_cricket
http://www.humanmetrics.com/cgi-win/jtypes2.asp
http://html5test.com/
http://test-ipv6.com/
...

Scrapowanie podpowiedzi

Wyprowadzanie podpowiedzi wyszukiwarek.

Format wyniku:

$results.format('$suggest\n')

Przykład wyniku:

testowy serwer tanki online
testy gia z rosyjskiego
przepis na ciasto na naleśniki
testicula
ciasto na pizzę na mleku

Wyprowadzanie danych o zapytaniu

W Net::HTTPNet::HTTP i scraperach na nim opartych dodatkowo dostępne jest wyświetlanie:

  • $proxy - proxy, na którym wykonano zapytanie

  • $headers - nagłówki odpowiedzi

  • $code - kod odpowiedzi

  • $reason - status odpowiedzi

Przykład

Wyprowadzanie wartości zmiennych w JSON

Metoda .json dla obiektów

Wyprowadzanie wszystkich przekierowań zapytania

Dla tego zadania dostępna jest zmienna $response, która pozwala pobierać dowolne zmienne zapytania, w tym wszystkie poprzednie przekierowania.

Format wyniku:

$response.Redirects.format('$URI\n--> ')$response.URI

Wynik pracy scrapera:

Przykład

Wyprowadzanie do JSON z użyciem systemu szablonów do zapisu daty

W przykładzie pokazano wyświetlanie wyników scrapera Net::WhoisNet::Whois w formacie JSON.

Przykład

W rezultacie otrzymamy sprawdzaną domenę, datę w momencie sprawdzenia oraz wynik sprawdzenia. Jak widać w Formacie wyniku, datę pobieramy za pomocą systemu szablonów Template Toolkit.

Format wyniku:

{    
"domain": "$query",
"date": "[% USE d = date(format = '%d.%m.20%y', locale = 'C');d.format() %]",
"expire": "$p1.expire_date",
},

Przykład wyniku:

[{
"domain": "a-parser.com",
"date": "05.05.2021",
"expire": "25.02.2022",
},
{}]
Pobierz przykład

Jak zaimportować przykład do A-Parser

eJxtVG1v2jAQ/ivWCUQrZaxM2pdM+0BRkTYx6ErRPgQ0efWFeXXszHYYVZT/3nMS
EtruQyTf23P33EtK8Nw9uluLDr2DOCkhr98QwxJ9HP/4baRj79jNkWe5QjaBCHJu
HdrgnZw5kUFgygvlYbeLgFDo6ebGZjyglVvNGNuCMBmXegsxvQd/C7RPW4hONu6x
sSRDtlnfMME+s6C8SGsYkkZDMR5m4w9Xw6dRxJR54FQUqWejy09i3LhdXLLhrkfF
Yy5tizvIJ+NG/tkkI6eKPugKXvMD3hsqOJUKe/WcpCXPkAyDEBmsXbqxP3py5UJI
L43mqmEdOtR3YqMl0aV4bcg3MJfo5tZkfa66HaeOJW17gCCKOvZ7EwNxypXDCByV
OucUKl5bpEfLvbGrPNRD+hKMniq1wAOq3q3Gvy6kEjTOaUpBX9rA/7us3mBUHb3z
VAe0/yzVALG3BYHUwvXqWx8kzMLsibj4RbSVzKQn2c1MocOuXJHyETHvWrYMLcuM
xS5LA9zmpvXNUQtyTPqJTfNWV1Y7eEXkxWBeKh+MTuV+RRSsFHjyLPQ93clKz0y4
gsBMF0rRYBze9Qsyde0ggtC18E3wrE4R2Lf3EoE3Rrmva9KF+7KSFvBjKDCjXp5n
bSFp69XmbnFugbOlqrMnJ/F9c3Ku3tLAkNZ3b2ixiFq16865+weU50cdlxWN64+7
bZwCdK2MgDrkaBYQT6pnHsF5pA==

Sprawdzanie witryny pod kątem obecności w Google News według słowa kluczowego

Przykład sprawdzania obecności witryny w Google News według słowa kluczowego

Format wyniku:

[% linksToOneString = p1.serp.format('$link. ');
matches = linksToOneString.match('.+?(' _ p1.query.domain _ ').+?');

IF matches.0;
p1.query.orig _';yes' _ "\n";
ELSE;
p1.query.orig _';no' _ "\n";
END %]

Przykład wyniku:

scraper google|a-parser.com;no
scraper google|forbes.ru;yes
Pobierz przykład

Jak zaimportować przykład do A-Parser

eJylVVFv2jAQ/iuR1YpWo1EQ7UuqaaIMpk6stKV9AoRccqQeju3aCQVR/vvOTkjS
ruNlEoq4u+++O9+dz1uSUrM0txoMpIaE4y1R7j8JyagXhj+kjDl4Z173GeZLL5IJ
ZcLDX2EQ8Go8WNNEcSBNoqg2oC3PuOaOhggWNOMpaW5JulGA7HIFWrPIGlmEsqIx
zGUmEENWlGeIae3+DccwqkIS8WrIATRnYmkUumCQGn9wwCXmNfr7x0Psz3Wozg4m
omtQTkU8O4xXWq43GlLNwNQ8W0EQkN102iTYLKyr6UudUNu08fFEuNM+yKGAETqK
2PvqqZZvK+YvHO6kcWQxvtc4vZwIVMyfwSDqo6PvTCcN/8u3k4Y3sywvGeiNX8zB
DAnQ5lg+CTvzJmSCFuLM132viOQHqCi5pGYIbVxuwDTeufQGo95nQCE/4G6+T8Tx
lJTFGNEVPEgsxoK54dvXCKUbmtj6HUU0BWvdF+TUT9d28mgUsZRJQXleUTvKVZUf
BXvJx00i1maFbelrmaAqBUfgUt13Y0yOnEyQInO+d7kPCReUG2gSg6n2KSYSlZZU
Z2hgKWiaSj1UNh1Ub4kUHc4HsAJe+Tv6q4zxCK9dZ4FO14Xj55DhXxy78nT1UDiG
rxpzKFmcdDX8VXlFciBjPHj0hMfmLGEpyqbrrnBIAlQuAVRZshtbskRqKMMUzEV0
XEEKhJ35qmMdVaneHcMtKiMzPbfUeY2b+ztk3PSNFGe2IQZwKeUFIW8WJG1f9i75
IJPprmpyLQYq51IsWDwsruV+HDLxgGtzKLrSLj5bJpFxjk02cF8NW8cUTbVCdd6P
zl0XwlZyvyQxScnNz1F+cqUZ5nxhE0ywMfWoBeWccv54P6hbSDWgKEyy4Ly9cN/A
fs/zb8tpLnKN54S2E9rV//bTGz3L97o/lwneuf/iwvv2hBsAt55NO4VYYh9sN939
CUkvf0vssoO1oiKCKL8SO9ej4oEp36tt/ZkJtzucy9/mNgfZqlsI6rB9BofOPil/
AGn6WSM=

Wyprowadzanie wartości timestamp w formacie daty

Czasami zdarza się, że w wynikach nie ma zwykłej daty, ale jest wartość timestamp, jak w scraperze Social::Instagram::TagSocial::Instagram::Tag. Tę wartość można przedstawić w formacie daty, używając silnika szablonów Template-Toolkit.

Przykład wyprowadzania wartości timestamp w formacie daty

Format wyniku:

[% USE date;

query.orig _ ": total posts - " _ postscount _ "\nPosts:\n";

FOREACH i IN posts;
d = date.format(i.time, format => '%d.%m.20%y');
i.link _ " - " _ d _ ":\n";
i.text _ "\n";
END %]

Przykład wyniku:

sport: total posts - 96500663
Posts:
https://www.instagram.com/p/COfJHshAkeD/ - 05.05.2021:
Quelques exemples de notre nouvelle campagne de communication personnalisable avec le nom des clubs 😀

Vous préférez quel visuel : 1, 2, 3, 4, 5 ? 🤔

#clubnormand #tennis #padel #beachtennis #tenniscourt #padelcourt #beachtenniscourt #lnt #LigueNormandieTennis #🎾 #sport #normandie #normandietourisme
https://www.instagram.com/p/COfJG7olavg/ - 05.05.2021:
💥 Sau màn lật đổ “Bà già” thành công, Nửa xanh thành Milan chính thức vượt qua Nửa đỏ về số lần lên đỉnh nước Ý nhiều nhất lịch sử.
-----------------------------
➖ Website: https://webthethao247.com/
➖ https://g.page/webthethao247?share
#wtt247 #webthethao247 #thethao #sport #bongda #SerieA #InterMilan #Juventus #ACMilan
https://www.instagram.com/p/COfJG1Hg7ax/ - 05.05.2021:
Which Skill was better 1 or 2? 🤔👇
Follow @ftb4ll for more 💥
Follow @ftb4ll for more 💥
Follow @ftb4ll for more 💥
________________________________________
Leave a Like 👍🏽
Subscribe for more 🔔
Leave your thoughts in the Comments  💬
________________________________________
❌Ignore the Tags ❌
#football #soccer #fussball #futbol #fifa #championsleague #bundesliga #ucl #footballmemes #goal #transfer #sports #penalty #ultimateteam #pacybits #fut #ultras #laliga #freekick #referee #sport #calcio #messi #ronaldo #skills #premierleague #foul #footballseason
https://www.instagram.com/p/COfIlXqhfAa/ - 05.05.2021:
Be Fuckin’ Ready 🤣🤣🤣

Get ready to fly!!!! 🏐🏐🏐🏐

Follow - @crackonkings

#beachball #nalin&kane #trance #music #90s #onyerhead #festival #party #afterparty #love #summer #uk #happy #sesh #crackon #football #sport #festivaloutfit #festivalfashion #sun #dj #dancing #club #festivalgirl #house #techno #rave
...
Pobierz przykład

Jak zaimportować przykład do A-Parser

eJx1VNtuGjEQ/RXLCkoj0VVSqS9bpRKhoFJRNuXyxKLKxQa58dqO7aVBiH/vjPeW
pM0+7RzPzDlzsU80MP/g753wIniark/Uxn+a0oXZSqbSdKJ9YHvHijRdsj15T5ay
EAAVlgRDOAuCiCewlKB9apnzwmGm9RsJwImLHStVoP0TDUcrgMschHOSYwbJwd4Z
V7AASqIbPTBVotu6R1aLUeT8lOtcP5bCHRPj5J78JDlNQVBgiljjgwehOQU4GltT
6hB98lzfI5LCT05jlnE2Hw2GX4kkk1nljnDg5DYyJZWYdzIJUHifVCa5/Uwuezzp
FcmH697x8gpiCHwyUVI/RKpGAa/ENYSVVxBPraAIj2ZfSG9Dz5tNn1aF+3Fkgrov
7E1Sz6U9XLCDWBrslYydb2LAmrECu3WB6vG0qeAqCU+YgXEugzSaqYoBx9WxrrR8
jN3WBnyxxVL4sTMFQKi6Bo+NujW9iDaFFGWM/VHF0HTHlBd96kHqmIEQ/vpEBuFY
MC6zqAfwEzV6oNRUHITq3GL+u1IqDrs12EHQpA78v0v2T45zW95zKti6Pw40tFmi
dZd976K4mZo9VM5/Qd1KFjKA7Ye4T4BeA/gghG17NsOeFcaJlqbOXLPDTbNC44p3
IxvYDnpRxouxvAS3Ru/kPquvTeNZ6iVc50wPDV5HrEuXSsFYvJh36zHw9RjQ6AS+
Dh5GCiy9ua40GKP8t0Ul1ToJ6/cRBRbQyeesdcotU2o1nz4/wUAfjM30yLlX44uL
Qb01Drm2sLx7A2sFpZ037cvSPlWnt96X9HSGuf3291UAFonugEG3PAyFpjfnvwdy
t1Y=

Inne przykłady

Przykłady często używanych szablonów