6.2 Katalog publiczny
Każda sieć dowolnego, współczesnego komunikatora posiada miejsce, gdzie przechowywane są ogólnodostępne dane o użytkownikach. Każdy użytkownik ma możliwość edycji swoich danych oraz och usunięcia, jeśli w takowym katalogu nie chce się znajdować.
W tym rozdziale opowiemy o katalogu publicznym dostępnym w sieci komunikatora Tlen.pl.
Z uwagi, że w całej funkcjonalności katalogu publicznego niektóre elementy będą ciągle wykorzystywane, dlatego poniżej przedstawiono znaczenie tych tagów wraz z wartościami, jakie mogą one przyjąć.
Elementy last
, first
, nick
i email
chyba nie wymagają wyjaśnienia, c
określa miejscowość, a tag e
szkołe/uczelnie, zawartość wymienionych tu tagów kodowana jest algorytmem urlencode.
Element b
zawiera rok urodzenia.
Element s
określa płeć, może on przyjmować jeden z trzech wartości:
wartość | opis |
0 | nieustawione |
1 | mężczyzna |
2 | kobieta |
Tag r
– poszukuję:
wartość | opis |
0 | nieustawione |
1 | kogoś do rozmowy |
2 | przyjaźni |
3 | flirtu/romansu |
4 | miłości |
5 | niczego nie szukam |
Element j
określa wykonywany zawód:
wartość | opis |
0 | nieustawione |
1 | uczeń |
2 | student |
3 | rolnik |
4 | menedżer |
5 | specjalista/wolny zawód |
6 | urzędnik/usługi/administracja |
7 | bezrobotny |
8 | emeryt/rencista |
9 | gospodyni domowa |
10 | nauczyciel |
11 | lekarz |
12 | inny |
Element p
- "Dziś mam ochotę na..." lub "Moje plany na dziś...":
wartość | opis |
0 | nieustawione |
1 | mam ochotę wyjść do miasta |
2 | mam ochotę wyjść do kina |
3 | mam ochotę wyjść na spacer |
4 | mam ochotę wyjść na dyskotekę |
5 | mam ochotę wyjść na randkę w ciemno |
6 | czekam na propozycję |
7 | nie mam na nic ochoty |
Element ten jest poniekąd deprecated, a dokładniej - istnieje specjalna funkcja do ustalania tylko tej wartości, ale nie jest ona używana już w oficjalnym kliencie, więcej informacji w rozdziale Deprecated.
Element v
określa, czy pokazywać mój stan w katalogu użytkowników, tag g
- mam możliwość rozmowy głosowej, a k
, czy mam podłączoną kamerkę video. Elementy te przyjmują wartości:
wartość | opis |
0 | nie |
1 | tak |
6.2.1 Odczyt danych
Odczyt swoich danych dokonujemy wysyłając żądanie:
<iq type="get" id="tr" to="tuba">
<query xmlns="jabber:iq:register"/>
</iq>
Serwer zwróci nam dane o jakie prosiliśmy:
<iq type="result" to="malcom@tlen.pl" from="tuba" id="tr">
<query xmlns="jabber:iq:register">
<item>
<first>imie</first><last>nazwisko</last>
<nick>nick</nick><email>email</email>
<c>miesjcowosc</c><b>1984</b><s>1</s><e>szkola</e>
<r>1</r><j>12</j><p>0</p><v>0</v><g>1</g><k>1</k>
</item>
</query>
</iq>
Elementy puste lub zerowe, mogą zostać pominięte w odpowiedzi.
6.2.2 Zapis danych
Zapis danych w katalogu dokonujemy wysyłając pakiet:
<iq type="set" id="tw" to="tuba">
<query xmlns="jabber:iq:register">
<first>imie</first><last>nazwisko</last><nick>nick</nick>
<email>email</email><c>miesjcowosc</c><b>1984</b><s>1</s>
<e>szkola</e><r>1</r><j>12</j><v>0</v><g>1</g><k>1</k>
</query>
</iq>
Elementy, które mają zostać puste lub przyjąć wartości zerowe można pominąć.
Potwierdzenie otrzymane od serwera:
<iq type="result" to="malcom@tlen.pl" from="tuba" id="tw">
<query xmlns="jabber:iq:register"/>
</iq>
6.2.3 Usuwanie danych
Chcąc usunąć z katalogu publicznego nasze dane wysyłamy do serwera pakiet:
<iq type="set" id="tc" to="tuba">
<query xmlns="jabber:iq:register">
<remove/>
</query>
</iq>
Serwer potwierdza usuniecie naszych danych:
<iq type="result" to="malcom@tlen.pl" from="tuba" id="tc">
<query xmlns="jabber:iq:register"/>
</iq>
Usuniecie danych skutkuje tym, że przy próbie pobierania naszych danych otrzymamy puste i zerowe wartości elementów.
Taki sam efekt można uzyskać wysyłając pakiet taki pakiet zapisania danych:
<iq type="set" id="tw" to="tuba">
<query xmlns="jabber:iq:register"/>
</iq>
6.2.4 Szukanie kontaktów
Czym byłby katalog publiczny bez możliwości szukania i przeglądania w nim danych.
Szukanie kontaktów w katalogu publicznym możliwe jest na dwa sposoby. Podając login tlenowy lub nick, wiek, miejscowość, itd..
Szukanie podając login dokonujemy wysyłając pakiet:
<iq type="get" id="src" to="tuba">
<query xmlns="jabber:iq:search">
<i>malcom</i>
</query>
</iq>
Login szukanej osoby zawarty jest w tagu i
, dokładniej to sam identyfikator, bez @ tlen.pl.
Szukanie w katalogu przy podaniu informacji typu: nick, wiek, miejscowość, itd., realizowane jest podobnym pakietem:
<iq type="get" id="src" to="tuba">
<query xmlns="jabber:iq:search">
<first>imie</first><last>nazwisko</last><nick>nick</nick>
<email>email</email><c>miejscowosc</c><d>1</d><u>2</u>
<e>szkola</e><m>2</m><g>1</g><k>1</k>
</query>
</iq>
Znaczenie większości elementów jest nam znane, prócz kilku nowych, które używane są w procesie szukania.
Elementy d
i u
, określają przedział wieku szukanego kontaktu, odpowiednio od i do, czyli dolną i górną granice wieku.
Tag m
określa stan szukanego kontaktu:
wartość | opis |
brak | wszyscy ludzie |
0 | j/w (nigdy nie wysyłana) |
1 | j/w (nigdy nie wysyłana) |
2 | tylko ludzie on-line |
Jeśli znaleziono w katalogu kontakty spełniające podane przez nas kryteria otrzymamy wynik:
<iq type="result" to="malcom@tlen.pl" from="tuba" id="src">
<query xmlns="jabber:iq:search">
<item jid="andrej2">
<first>Andrzej</first><last>Kowalski</last>
<nick>andrej</nick><email>andrej@domena.com</email>
<a>6</a><c>Warszawa</c><b>47</b><s>1</s><r>3</r>
<j>4</j><k>1</k>
</item>
<item jid="ala210s">
<a>6</a><g>1</g>
</item>
<item jid="civic-77">
<first>Darek</first><nick>Majk</nick><a>6</a>
<c>Krak%F3w</c><b>15</b><s>1</s>
<e>Gimnazjum+Nr.+77+</e><j>1</j><g>1</g>
</item>
</query>
</iq>
W przypadku, gdy nie znaleziono żadnego kontaktu otrzymamy pakiet:
<iq type="result" to="malcom@tlen.pl" from="tuba" id="src">
<query xmlns="jabber:iq:search"/>
</iq>
W wynikach pojawia się dwa nowe elementy – a
i b
Tag a
mówi o statusie danego kontaktu:
wartość | opis |
brak | niedostępny |
0 | j/w (nigdy nie odebrana) |
1 | j/w (nigdy nie odebrana) |
2 | dostępny |
3 | wrócę później |
4 | zaraz wracam |
5 | zajęty |
6 | porozmawiajmy |
Element b
zawiera wiek danego kontaktu.
Standardowo serwer zwraca w wyniku maksymalnie 20 pozycji. Odebranie kolejnej paczki kontaktów (przejście do następnej "strony") uzyskujemy wysyłając powtórnie pakiet szukania wzbogacony o element j
, który określa liczbowo, od którego kontaktu chcemy otrzymać wyniki.
Na przykład, pobranie listy wyników dla szukania kontaktu o nicku "ala" poczynając od 20 pozycji, będzie wyglądało tak:
<iq type="get" id="src" to="tuba">
<query xmlns="jabber:iq:search">
<nick>ala</nick><f>20</f>
</query>
</iq>
6.2.5 Wizytówka
Wizytówka, funkcja dostępna spod menu kontaktu, pobierającą informacje publicznego danym kontakcie z katalogu publicznego. Taki sam efekt można uzyskać wysyłając pakiet szukania przy podaniu logiku tlenowego. Kiedyś tak to się odbywało, ale od wersji 8/9
protokołu wprowadzono małe modyfikacje - id
przyjmuje "specjalną" wartość.
Podobnie zrobiono w przypadku pobierania danych kontaktu do ToolTipa, przy najechaniu kursorem na dany kontakt. Tutaj tak samo używany jest "specjalny" id
.
Wyniki otrzymywane od serwera są takie jak w zwykłym szukaniu, tylko id
przyjmuje inna wartość.
Przykład pobierania wizytówki dla kontaktu o loginie abcd@tlen.pl:
<iq type="get" id="src3@abcd" to="tuba">
<query xmlns="jabber:iq:search">
<i>malcom</i>
</query>
</iq>
Dane otrzymane od serwera:
<iq type="result" to="malcom@tlen.pl" from="tuba" id="src3@abcd">
<query xmlns="jabber:iq:search">
<item jid="abcd">
<first>Andrzej</first><a>6</a>
<c>Warszawa</c><b>23</b><s>1</s>
</item>
</query>
</iq>