Pokaż innym swoje nowości

czyli jak powiedzieć użytkownikom o nowych materiałach na stronie

Przeglądanie codziennie wszystkich interesujących stron w Internecie nie jest raczej możliwe. Jeśli tworzymy stronę WWW i chcielibyśmy, aby użytkownicy reagowali na każdy nowy materiał, który na niej zamieszczamy mamy dwa wyjścia. Albo nowe, interesujące treści będą się pojawiały bardzo często, albo musimy ułatwić użytkownikom życie, wyręczając ich z regularnego sprawdzania. Ten drugi pomysł wydaje się całkiem kuszący, ale jak to zrobić? Może newsletter, ale czy na pewno? Kto z was lubi sterty maili codziennie zapychających skrzynkę? Ja nie - nie wpisuję sie więc na listy do rozsyłania poczty. Znacznie lepszym pomysłem jest syndykacja treści. Co to takiego? Za pomocą odpowiednich narzędzi informujemy użytkowników o nowościach na naszej stronie. Krótko opisujemy te nowości, podajemy link jeśli ktoś chce zobaczyć więcej. Wszystko w formie na tyle sformalizowanej, by informacje mógł wyłowić nie tylko człowiek ale i komputer.

Dzięki kanałom Atom, którymi właśnie się zajmiemy będziemy mogli dać użytkownikom narzędzie do stałego śledzenia zawartości naszej strony i reagowania na nowości od razu po ich publikacji. Ponadto automaty zamieszczone w różnych miejscach - na przykład na innych stronach internetowych - będą mogły prezentować nowości z naszego serwisu.

Atom - co to takiego

Powiedzieliśmy sobie do czego mogą służyć kanały Atom, ale nie powiedzieliśmy jeszcze czym tak na prawdę są. Kanały Atom zawierają informacje dotyczące naszej strony opisane za pomocą znaczników XML. Jeśli budowaliśmy jakaś stronę internetową w HTML-u, a jeszcze lepiej w XHTML-u, to nie będziemy mieli problemów z opanowaniem składni języka. Elementów nie jest wiele.

Pliki z kanałami Atom zwyczajowo zapisuje sie z rozszerzeniem .atom, albo .xml. Na mojej stronie kanały Atom mieszczą się w specjalnym folderze dostępnym pod adresem http://www.wilga.net.pl/FEED/ATOM/ i mają rozszerzenie .atom.xml. Na przykład główny kanał strony dostępny jest pod adresem http://www.wilga.net.pl/FEED/ATOM/index.atom.xml a kanał dotyczący tylko tworzenia stron WWW pod adresem http://www.wilga.net.pl/FEED/ATOM/tworzeine-www.atom.xml.

Nasz link do kanału ATOM zaopatrzmy jeszcze w atrybuty określające typ zasobu. Ja dodałem jeszcze ikonkę, która ułatwia znalezienie kanału. Mój kod wygląda więc następująco:

<a href="http://www.wilga.net.pl/FEED/ATOM/tworzenie-www.atom.xml" rel="alternate" type="application/atom+xml">
	<img src="IMG/feed.png" alt="" />http://www.wilga.net.pl/FEED/ATOM/tworzeine-www.atom.xml
</a>

Do tworzenia kanałów wystarczy nam dowolny edytor tekstu - na przykład notatnik z Windowsa. Lepiej jednak posłużyć sie czymś, co ułatwia pisanie plików XML, na przykład Notepad++. Ja używam Eclipse, bo programuje też między innymi w PHP i Javie, ale wam nie potrzebne jest takie ciężkie narzędzie.

W tym kursie stworzymy kanał Atom "z palca". Można do tego oczywiście zaprząc skrypt PHP, program w ASP.NET lub dowolny inny automat. Nie będziemy się jednak wgłębiać w takie szczegóły - pokażemy co powinno znaleźć się w pliku i do czego służą poszczególne elementy.

Przygotowania

Zanim zaczniemy tworzyć nasz pierwszy kanał Atom, musimy przygotować do tego serwer. Domyśla konfiguracja powoduje, że programy za każdym razem będą pobierały kanał nie zależnie od tego, czy został on zmodyfikowany czy nie. Obciąży to łącze naszego serwera co może zwiększyć koszty. Łączę użytkownika też będzie sie niepotrzebnie wysilało, aby sprawdzić, że nie ma nic nowego.

Drugi powód, dla którego zmiany są potrzebne to kodowanie. Nasze kanały zakodowane są w UTF-8 a Apache domyślnie nie dodaje informacji o tym w nagłówkach HTTP. Konsekwencją byłyby niemiłe "krzaczki" w miejscu polskich znaków.

W naszym przypadku - kanału robionego ręcznie - wystarczy drobna zmiana w konfiguracji serwera Apache. Można tej zmiany dokonać na przykład w pliku .htaccess. Wystarczy dodać jedną linijkę.

AddType application/atom+xml .atom

Oczywiście jeśli planujemy używać innego rozszerzenia, w miejscu .atom powinniśmy wstawić właśnie to rozszerzenie, na przykład .xml albo .atom.xml tak jak jest u mnie. Nie mniej oczywisty jest fakt, że .xml działałoby z plikami .atom.xml - ten drugi zapis jest tylko nieco bardziej dokładny.

OK. skoro nasz serwer jest już gotowy do wysyłania kanałów Atom, zabierzmy się do ich tworzenia.

Anatomia kanału ATOM

Jak już wspomniałem na początku, kanał Atom to tak na prawdę odpowiednio napisany plik XML. Skoro plik XML, to w pierwszej linijce powinien znaleźć się prolog XML. Ponadto wszystkie elementy muszą znajdować się wewnątrz jednego elementu nadrzędnego. Dla Atom jest to element feed z odpowiednią deklaracją przestrzeni nazw.

<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<!-- tu znajdą się elementy naszego kanału -->
</feed>

Elementy kanału

Skoro zaczęliśmy już budowę naszego kanału, nie warto zmniejszać tempa. Dodajmy kilka elementów, które nasz plik musi zawierać. Po pierwsze identyfikator kanału wewnątrz znaczników id. Identyfikator musi być niepowtarzalny i nie może sie zmieniać. Jeśli nie mamy dobrego pomysłu, umieśćmy tam po prostu adres URL naszego kanału, albo inny ciąg znaków, którego nikt inny nie umieścił na przykład uid:wilga.net.pl:123123.

Kolejny element bardzo potrzebny to tytuł. Umieszcza sie go w znacznikach title. Może nim być dowolny tekst. W zależności od tego, do czego kanał ma służyć dobre nazwy to na przykład "Strona Pawła Wilgi" dla całej strony, "Tworzenie stron WWW - strona Pawła Wilgi" dla jednej kategorii wpisów, albo "Tworzenie kanałów Atom - komentarze" dla komentarzy do artykułu, które niestety na tej stronie póki co nie są dostępne.

Następny ważny element to data ostatniej zmiany kanału umieszczona w znaczniku updated. Data w formacie rok-miesiąc-dzieńTgodzina:minuta:sekunda+strefa_czasowa, czyli na przykład 2011-04-09T02:18:33+01:00 - mniej więcej wtedy pracowałem nad tym kawałkiem artykułu.

Ponadto powinien znaleźć się tam adres samego kanału w znaczniku link. Mamy więc już taką strukturę:

<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<id>uid:wilga.net.pl:przykladowy_kanal</id>
	<title>Paweł Wilga - przykŁadowy kanał Atom</title>
	<updated>2011-04-09T02:27:17+01:00</updated>
	<link rel="self" href="http://www.wilga.net.pl/FEED/przykladowy_kanal.atom">
</feed>

Wstawiamy treść

Ktoś może powiedzieć: "Hola Hola! Na początku szumne zapowiedzi, że będziemy wysyłać naszą treść w świat, a tu co? Na razie żadnej treści nie widziałem!". Miałby oczywiście rację. Wszystkie te znaczniki na razie nie przekazują żadnej konkretnej treści chyba, że za treść uważamy nazwę kanału. Szybko jednak nadrobimy te zaległości.

Każda jednostka treści - na przykład artykuł, wpis na blogu, komentarz - w kanale Atom znajduje się oddzielnym w znaczniku entry. Każda ma swój tytuł i unikalny identyfikator, podobnie jak miał go cały kanał. Znaczniki i zasady ich stosowania są takie same i nie będziemy ich jeszcze raz omawiać. Jedyna uwaga dotyczy tak zwanych dynamicznych zakładek w Firefoxie. Pokazywany jest w nich tylko tytuł. Użytkownik nie może przeczytać na przykład streszczenia artykułu.

Podobnie jak cały kanał, każdy wpis może zawierać datę ostatniej aktualizacji. Umieszczamy ją, jak sie słusznie domyślacie w znaczniku updated. Ale każda jednostka treści została kiedyś opublikowana po raz pierwszy. Możemy umieścić datę pierwszej publikacji w znaczniku published. Daty są w takim samym formacie, jak data ostatniej aktualizacji w znaczniku updated kanału.

Jeśli chcemy umieścić w kanale całą treść, służy do tego znacznik content. Jeśli jednak umieszczamy tylko streszczenie, użyjmy znacznika summary. W tym przypadku musimy również umieścić link do całej treści, również w znaczniku link. Lepsze jest to drugie rozwiązanie - cała treść nie potrzebnie obciąża łącze a użytkownik, który przeczyta wszystko w przeglądarce kanałów nie koniecznie będzie chciał jeszcze odwiedzić naszą stronę. Dobre streszczenie na pewno zachęci go do lektury całości o ile temat leży w jego kręgu zainteresowań. Cała treść wewnątrz znacznika content nadaje się nieźle do wymiany krótkich informacji - na przykład o zmianie parametrów serwara naszej firmy albo przerwie w dostępie do usług.

Nasz kanał może mieć już na przykład taką postać:

<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
	<id>uid:wilga.net.pl:przykladowy_kanal</id>
	<title>Paweł Wilga - przykŁadowy kanał Atom</title>
	<updated>2011-04-09T02:27:17+01:00</updated>
	<link rel="self" href="http://www.wilga.net.pl/FEED/przykladowy_kanal.atom">
		<entry>
		<title>Atomowa rewolucja</title>
		<link rel="alternate" type="text/html" href="http://www.wilga.net.pl/atomowa-rewolucja.html" />
		<id>uid:wilga.net.pl:artykuly:atomowa-rewolucja</id>
		<updated>2011-04-09T02:29:01+01:00</updated>
		<published>2011-04-09T02:26:01+01:00</published>
		<summary>Czyli jak stworzyć dobry, działający i przydatny kanał Atom w kilka chwil.</summary>
	</entry>
</feed>

Dodajemy kanał na stronę

Nasz kanał stał się właśnie pełnoprawnym, dorosłym członkiem społeczności kanałów Atom. Ma już wszystko, co powinien mieć. Co prawda wpis tylko jeden, ale po co więcej w przykładach? Więcej, to wasza rola drodzy czytelnicy. Nasuwa sie jednak pytanie: "Zrobiłem kanał, ale czy wie o tym ktoś oprócz mnie?". Dobre pytanie. Nikt o naszym kanale nie wie. Powiedzmy więc o nim zarówno maszynom, jak i ludziom.

Informacja o kanale przeznaczona dla różnego rodzaju automatów znajduje się w sekcji head naszej strony WWW. Do poinformowania na przykład przeglądarki, że nasza strona obsługuje kanały informacyjne użyjemy znacznika link - tego samego, którego używaliśmy miedzy innymi do dołączania do strony arkuszy styli. Nasz znacznik będzie wyglądał jakoś tak:

<link rel="alternate" type="application/atom+xml" href="http://www.wilga.net.pl/przykladowy_kanal.atom" title="Tytuł kanału" />

Wszystko dobrze - maszyny już wiedzą - ale co z ludźmi. Przecież ludzie mają to czytać. Oczywiście. Dla ludzi zrobimy zwykły link do klikania. Zrobimy go w taki sposób:

<a rel="alternate" type="application/atom+xml" href="htttp://www.wilga.net.pl/przykladowy_kanal.atom"><img src="/IMG/feed.png" alt="" />Przykładowy kanał Atom</a>

Jak widzicie, oprócz nazwy do linku dodałem też standardową ikonkę. Można je pobrać ze strony projektu. Ikonka powie bardziej doświadczonym użytkownikom sieci do czego służy link.

To koniec naszej przygody z energią atomu. W kolejnym artykule rozbudujemy nasz kanał, dodając do niego dodatkowe informacje. Ale to nie dziś. Zadanie na dziś - zmontujcie własne kanały i cieszcie sie ich funkcjonalnością.