Eksport danych
Oczywiście dane z naszej bazy wyciągnąć nie jest ciężko. Ktokolwiek ma odrobinę zacięcia w dłubaniu w JavaScript i posiada chociażby FireBuga spokojnie znajdzie sobie URL z którego można wyciągnąć wszystkie przemienniki z naszej mapy. Pewnym problemem mogą być ciasteczka z ustawieniami i tym podobne rzeczy, ale dla chcącego nie ma nic trudnego. Więc, aby zaoszczędzić power userom pracy, a pozostałym zrobić frajdę, oficjalnie umożliwiamy dostęp do wyników z naszej bazy danych.
Oczywiście są pewne uwarunkowania.
Po pierwsze: co prawda zabraniać sobie możemy, a i tak zrobisz co zechcesz, prosimy, aby bez uzgodnienia z nami, dane te nie były wykorzystywane do tworzenia innych stron WWW bądź aplikacji opartych o HTML. Jesteśmy otwarci na współpracę, ale w takim wypadku wolelibyśmy dowiedzieć się co chcesz zrobić. Może uda Ci się wykorzystać pozostałe rozwiązania z naszej mapy.
Po drugie: liczymy, że umieścisz w swoim produkcie informację o tym skąd pochodzą dane. Miłe by było pełnoekranowe logo ;-) Ale jak się nie da to wystarczy kilka słów w "about" :-)
Po trzecie: będziemy wdzięczni mimo wszystko jak napiszesz do nas i powiesz co zrobisz z tymi danymi i co-nieco opowiesz o swoim pomyśle. Może i my dorzucimy trzy grosze?
Na chwilę obecną udostępniamy następujące formaty eksportu:
Natywny format XML
Czyli w praktyce opracowany na potrzeby naszej strony format eksportu danych o przemiennikach. Jego konstrukcja jest, mam nadzieję, jasna i zrozumiała. Jeżeli macie jakieś pytania skontaktujcie się z nami. Parę słów o tym formacie poniżej. Format ten obsługuje parametry w URL.RT Systems ADMS
Plik CSV dla ADMS firmy RT Systems - przetestowany z wersją ADMS-4B dla Yaesu FT-857/897. Format ten obsługuje parametry w URL.
Excel
Prawdopodobnie najwygodniejszy do normalnej konsumpcji. Plik jest generowany na żywo, czyli prezentuje dane aktualnie znajdujące się w bazie danych. Format ten obsługuje parametry w URL.Format GPX, sprawdzony na Garminie
Plik GPX m.in. dla urządzeń Garmina, przetestowany przez Pawła SQ9PPT. Format ten obsługuje parametry w URL.Format KML, dla Google Maps i Google Earth
Plik XML akceptowalny zarówno przez stronę Google Maps jak i przez program Google Earth. Format ten obsługuje parametry w URL.Format CSV dla Chirp
Plik CSV poprawnie importowany przez Chirp. Format ten obsługuje parametry w URL.Format XML, dla Repeater Radar
Format użyteczny dla programu Repeater Radar.Znacznik czasu ostatniej zmiany w bazie przemienników
To pozycja dla tych którzy nie chcą ssać całego XMLa i z szacunkiem traktują zarówno pasmo moje jak i użytkowników aplikacji. Opcjonalnie podajemy parametr format, który może przybrać jedną z wartości opisanych tutaj, ewentualnie "unix" dla timestampu uniksowego lub "mysql" dla daty typowej dla baz danych MySQL.
Parametry w URL
Niektóre z powyższych formatów obsługują parametry w URL:
- setlang - język danych eksportu (pl lub en) - w przypadku gdy pobieracie plik ze strony normalnie przeglądarką, dla tekstów które da się przetłumaczyć (kolumny Excela, statusy, itp) zostanie ustawiony ten sam język z jakiego korzystacie na stronie. Natomiast w przypadku pobierania danych automatycznie programem który nie przedstawi się tak ładnie jak przeglądarka, najprawdopodobniej dostaniecie dane w języku angielskim.
- source - dla formatów RXF i GPX: all aby pobrać wszystkie dane, lub puste aby pobrać tylko te przemienniki których danymi my zarządzamy, dla pozostałych formatów pominięcie tego parametru spowoduje podanie wszystkich przemienników z bazy, podanie wartości local spowoduje wyeksportowanie tylko przemienników które my zebraliśmy.
- country - dwuliterowy kod kraju (pl, uk, de, cz, sk, by, lt) z którego mają być pobrane przemienniki. Aby pobrać wszystkie nie ustawiamy tego parametru lub podajemy 'all'.
- band - pasmo z jakiego chcemy pobrać przemienniki (2m, 70cm, itd.).
- mode - typ przemienników jakie chcemy wyksportować (fm, dstar, atv, echolink).
- onlyworking - ustawienie dowolnej wartości tego parametru spowoduje wyeksportowanie tylko przemienników o statusie "działający".
- updatedafter - w celu pobierania danych inkrementowanych, generuje jedynie przemienniki które zostały zmodyfikowane lub utworzone po danej dacie, dzięki czemu nie trzeba zasysać całości za każdym razem. Format - dowolny akceptowalny przez strtotime, czyli: '2011-01-03 12:30:45', '2011/01/03', itp.
- latitude, longitude, range - opcjonalnie możemy podać nasze koordynaty oraz odległość od podanego punktu w kilometrach, żeby pobrać tylko przemienniki znajdujące się w podanej odległości od punktu.
Dla większości z powyższych parametrów można podać więcej niż jedną wartość, oddzielając je przecinkami. Dla przykładu:
http://przemienniki.net/export/przemienniki.xls?country=pl - wygeneruje nam plik XLS tylko z przemiennikami w Polsce.
http://przemienniki.net/export/rxf.xml?country=cz,sk&source=all - wygeneruje nam plik XML z przemiennikami czeskimi i słowackimi
http://przemienniki.net/export/chirp.csv?latitude=52.231957&longitude=21.006129&range=20&band=2m,70cm - wygeneruje nam plik dla Chirpa, z przemiennikami pasm 2m i 70cm znajdujące się w promieniu 20 kilometrów od Pałacu Kultury i Nauki w Warszawie.
Format natywny
Główne drzewo pilku XML zawiera się w tagach <rxf> ... </rxf>. Poza polami opisującymi podstawowe informacje jak data aktualizacji spisu czy data wygenerowania zawiera dwa zestawy informacji: słownik (dictionary) i listę przemienników (repeaters). Słownik zawiera listę atrybutów każdego przemiennika, czyli dostępne wartości pól "status", "band" (pasmo pracy), "mode" (typ przemiennika), "activation" (sposób aktywowania przemiennika). Każdy taki atrybut ma unikalną w ramach typu atrybutów wartość będącą pojedyńczym bitem. Dzięki temu, w polach które mogą mieć na raz kilka wartości (wszystkie poza "status") wstawia się po prostu sumę wartości atrybutów. Dla przykładu, przemiennik będący jednocześnie przemiennikiem DSTAR i FM ma wartość w polu mode 36 (32+4). Wbrew pozorom, wyszukiwanie dzięki takim wartościom z punktu widzenia programistycznego jest banalnie proste i polega na przeprowadzeniu operacji "and" na wartościach. Oczywiście, poza tak skomplikowanym zapisem, w rekordzie przemiennika są także normalne wartości opisowe.
Przykładowa definicja przemiennika w pliku XML wygląda tak:
<repeater> <qra>SR5TEST</qra> <id>8996912</id> <hash>fa7929c5bb73997ed0fe252b8c23e3d9</hash> <created>2012-03-15 13:02:42</created> <updated>2012-03-15 13:02:42</updated> <statusInt>1</statusInt> <status>WORKING</status> <licenseExpiryDate>2017-01-01</licenseExpiryDate> <modeInt>4</modeInt> <mode>FM</mode> <bandInt>4096</bandInt> <band>2M</band> <qrg type="rx">145.100000</qrg> <qrg type="tx">145.700000</qrg> <country>pl</country> <qth><![CDATA[Warszawa PKiN]]></qth> <location> <locator>KO02MF</locator> <latitude>52.231716</latitude> <longitude>21.006031</longitude> <altitudeOverSea>117</altitudeOverSea> <altitudeOverGround>80</altitudeOverGround> </location> <activationInt>16672</activationInt> <activation>1750</activation> <activation>CTCSS</activation> <activation>DTMF</activation> <ctcss type="rx">131.8</ctcss> <ctcss type="tx">146.2</ctcss> <dtmf type="rx">*</dtmf> <trxPower>10.00</trxPower> <operator>SP1ABC</operator> <operator>SP5DEF</operator> <echolink>3183277</echolink> <remarks><![CDATA[Przemiennik klubu SP5XYZ]]></remarks> <link>http://przemienniki.net/przemienniki/2m/SR5TEST</link> <link>http://www.sp5xyz.pl/przemiennik_sr5test</link> <source>http://przemienniki.net</source> <feedback>http://przemienniki.net/zglos/8996912</feedback> </repeater>
Omówmy kolejne pola:
- qra - znamiennik przemiennika.
- id - identyfikator liczbowy w naszej bazie.
- hash - hash danych, generowany w tylko nam znany sposób ;-) Pole w praktyce używane przy imporcie danych z zewnątrz, w celu weryfikacji czy dane o przemienniku się zmieniły. Jeżeli nie ufasz polom z datami, możesz weryfikować czy dane przemiennika się zmieniły także poprzez to pole.
- created, updated - odpowiednio data i godzina kiedy przemiennik został dopisany do bazy jak i kiedy został zmodyfikowany.
- statusInt, status - odpowiednio status przemiennika opisany liczbą lub tekstem, dostępnym ze słownika.
- licenseExpiryDate - data wygaśnięcia pozwolenia, jeżeli została umieszczona w bazie (pole opcjonalne).
- modeInt, mode - odpowiednio typ przemiennika liczbowo, oraz lista typów przypisanych do przemiennika w formie tekstowej.
- bandInt, band - odpowiednio pasma pracy przemiennika liczbowo, oraz lista pasm na których pracuje przemiennik.
- qrgs - lista częstotliwości obsługiwanych przez przemiennik, każda częstotliwość dodatkowo ma atrybut "type" mający wartość "rx" lub "tx". Przemiennik crossband, pracujący pomiędzy dwoma pasmami, posiada cztery częstotliwości, dwie RX na obydwu pasmach i dwie TX.
- country - dwuliterowy kod kraju w jakim pracuje przemiennik.
- qth - QTH przemiennika.
- location - lista lokalizacji przemiennika. Każda lokalizacja zawiera lokator, długość i szerokość geograficzną (obydwie opcjonalnie), wysokość nad poziomem morza i nad poziomem gruntu (również opcjonalnie). Lista zastosowana jest przyszłościowo, w przypadku rozbudowy bazy o przemienniki które mają wejście i wyjście w oddzielnych lokalizacjach.
- activationInt, activation - sposób aktywowania przemiennika liczbowo oraz lista sposób aktywacji przemiennika tekstowo.
- ctcss, dcs, dtmf (opcjonalnie) - wartości tonów CTCSS, DCS i DTMF służących do otwarcia przemiennika (dodatkowy atrybut "type" mający wartość "rx") lub nadawany na wyjściu przemiennika ("type" równe "tx", oczywiście <dtmf type="tx"> nie występuje).
- trxPower - moc nadajnika (opcjonalnie)
- operators - operatorzy przemiennika (opcjonalnie)
- echolink - ID node'a echolink (opcjonalnie)
- remarks - dodatkowe informacje o przemienniku (opcjonalnie)
- link - adresy URL do informacji o przemienniku, pierwszy adres zawsze będzie adresem z informacjami na przemienniki.net.
- source - źródło danych - URL do strony skąd pobraliśmy informacje o przemienniku.
- feedback - URL do strony ze zgłoszeniem raportu (opcjonalnie, występuje tylko dla przemienników lokalnie dodanych).
Gorąco radzę weryfikować wersję pliku w nagłówku i w przypadku zmiany od razu zapoznać się z poniższą stroną ;-)