Po grubo ponad roku pracy, ponad miesiącu zamkniętych testów, serwis Salenauts w końcu stał się publicznie dostępny. To wciąż beta, wciąż intensywnie nad nim pracujemy i wciąż mamy mnóstwo usprawnień w planach, ale czas najwyższy pokazać nasze dzieło światu i zebrać feedback od użytkowników. 🙂 Serwis bezpośrednio wywodzi się ze Śledź okazje i jest rozwinięciem jego idei. Tutaj też mamy indeksowanie ofert ze sklepów i wyświetlanie ich w porównywarce cenowej, ale to tylko jedna z wielu funkcjonalności serwisu.
Pricetracker
Główną funkcjonalnością serwisu jest oczywiście pricetracker – podobnie jak na Śledź okazje, mamy tutaj mechanizm przeglądający oferty wybranych sklepów i zapisujący je w bazie, dzięki czemu można później przeglądać ich historię i porównywać oferty na takie same tytuły. Tutaj ten mechanizm jest jednak znacznie bardziej zaawansowany – ponieważ serwis jest międzynarodowy, zapisujemy informacje o różnych cenach dla różnych regionów, a wszystkie ceny są też przeliczane na lokalną walutę. Pobieramy też więcej informacji – zapisujemy typ produktu (w końcu można odfiltrować DLC), a obniżka jest obliczana od ceny detalicznej, a nie poprzedniej ceny w sklepie. Ale przede wszystkim, w końcu produkty są pogrupowane na gry, można więc łatwo przejrzeć wszystkie oferty na wybrany tytuł, nawet jeśli produkty mają różne nazwy.
Same indeksery zostały kompletnie przepisane, dzięki czemu są znacznie bardziej wydajne i prostsze w rozwijaniu. Z perspektywy czasu to była chyba najtrudniejsza i najbardziej irytująca część projektu. Indeksery wykorzystują albo stronę sklepu, albo jego API (o ile jest użyteczne), a te z kolei miały tendencję do działania w kompletnie nieprzewidywalny sposób. Po uporaniu się z dziwnymi limitami, ograniczeniami, śmietnikiem w kodzie HTML i kompletnie nieintuicyjnym działaniem niektórych rozwiązań, indeksery działały, ale i tak każdego dnia zaskakiwały czymś nowym. Lekkim zaskoczeniem było dla mnie to, że najwięcej problemów przysporzyły największe sklepy, czyli Amazon i Steam – po takich gigantach spodziewałem się, że od strony IT będą wręcz wzorem, ale okazało się, że jest zupełnie odwrotnie. API Amazona jest bezużyteczne, a strona ich sklepu to koszmar – kod jest przeładowany skryptami i stylami inline, znaczniki HTML są zagnieżdżone w przedziwny sposób i czasami niedomknięte. W dodatku niektóre strony produktów mają kompletnie inną strukturę kodu, a lista produktów dawała dziwne i niekompletne wyniki. Ostatecznie parsowanie tego i wyciąganie z takiej strony przydatnych informacji było koszmarem, jestem pełen podziwu, że ten sklep jeszcze działa. Ze Steam było już lepiej, ale niewiele – ich API działa wolno, brakuje wygodnego mechanizmu do sprawdzania blokad regionalnych oraz innych przydatnych funkcjonalności (np pobranie listy paczek), a okazyjnie zwraca błędne dane. Oba sklepy stosują też limity żądań z jednego IP, tak na wszelki wypadek, żeby nie było zbyt łatwo. Z innymi sklepami było już lepiej, niektóre maja bardzo wygodne feedy z listą wszystkich produktów, ale duet Amazona i Steama wystarczył aby obrzydzić mi tą część projektu.
Gry
Salenauts to nie tylko prosty agregator ofert, ale też baza gier, które te oferty grupują. Brak takiej bazy i pogrupowania ofert ze względu na tytuły, były chyba największą bolączką Śledź okazje. Tutaj to zostało poprawione, a sam mechanizm dał bardzo wiele nowych możliwości. Każda gra ma swoja kartę, na której można zobaczyć podstawowe informacje o tytule, listę ofert oraz statystyki. Gry są połączone relacjami, łatwo można więc znaleźć informację o liście DLC dla wybranej gry. Na dokładkę, na karcie gry można też zobaczyć listę newsów z ofertami na daną grę, a także informację o bundlach, w jakich gra się znalazła. Same gry można przeszukiwać po nazwie, gatunku, dacie premiery, typie a także po metascore.
Kolekcje i listy życzeń
Podział na gry powstał jednak nie tylko z powodu potrzeby pogrupowania produktów. Głównym motywatorem była możliwość obsługi kolekcji oraz listy życzeń. Salenauts obsługuje logowanie do serwisu przez konto Steam, co daje też możliwość synchronizacji swoje kolekcji i wishlisty na Steam z kontem na Salenauts (oczywiście istnieje też możliwość ręcznego zarządzania obiema listami). Po tym wybrane gry są oznaczane w odpowiedni sposób w serwisie, a dla gier na wishliście możemy sobie skonfigurować powiadomienia o obniżkach, także z opcją wysyłania wiadomości email. Na podstawie wystąpień tytułów w kolekcjach/wishlistach budujemy prosty ranking popularności, ale już mamy pomysł jak go lepiej wykorzystać w przyszłości.
Newsy i bundle
Wzorem Łowców, na Salenauts mamy też newsy, które w zamyśle mają informować o najlepszych okazjach. Do newsa redaktor może przypisać dowolną liczbę promocji, z których wygenerowana zostanie tabelka. Podobnie przypisywać może kody zniżkowe, gry oraz sklepy, co pozwala lepiej uporządkować treści i usprawnia filtrowanie. Sama treść newsów korzysta z zaawansowanego systemu cache’owania – doświadczenia zebrane przy pracy na Łowcach wyczuliły nas na kwestie odporności na przeciążenia i nagłe skoki ruchu.
Z newsami dość mocno połączony jest system obsługi bundli. Redaktor może tworzyć bundle, w nich poszczególne progi cenowe (tiery), do których przypisane są gry. Mechanizm pozwala oznaczać systemy DRM, gry bonusowe oraz oczywiście ustalać ceny dla każdego tiera. Tak utworzony bundle można przypisać do newsa – opublikowanie newsa skutkuje upublicznieniem bundla, a news posiada tabelkę z wylistowaną zawartością bundla z podziałem na progi.
Forum
Forum okazało się nie lada wyzwaniem. Bardzo zależało nam na pełnej integracji forum z resztą systemu strony, ale nie mogliśmy sobie pozwolić na pisanie silnika od podstaw. Z kolei istniejące rozwiązania technologicznie zatrzymały się w czasie jakieś 10 lat temu, co znacznie utrudniało jakąkolwiek integrację. Ostatecznie zdecydowaliśmy się na MyBB, które zostało dość mocno zmodyfikowane, tak aby umożliwić lepszą integrację z bazowym systemem. Pozwoliło to na obsługiwanie wszystkich żądań przez główny system CMS Salenauts, który wewnętrznie uruchamia skrypt forum i przekazuje wynik użytkownikowi. Zakładanie kont i logowanie do forum jest więc obsługiwany wewnętrznie i wszystkie mechanizmy są schowane przed użytkownikiem. W przyszłości prawdopodobnie kolejne funkcjonalności forum (jak powiadomienia, ustawienia profilu) będziemy przenosić do głównego systemu Salenauts. Z niemałą nadzieją patrzymy też na zapowiadane MyBB 2, które ma być bardziej nowoczesne i dzięki modularnej budowie znacznie bardziej elastyczne.
Aktualnie forum obsługuje komentarze do newsów, choć planujemy rozszerzyć ten mechanizm również do innych części serwisu. Samo rozwiązanie również wymaga usprawnień – aktualnie trzeba przejść na forum, aby zobaczyć komentarze. Docelowo chcielibyśmy je standardowo wyświetlać pod newsem, z tego miejsca powinno być też możliwe dodawanie nowych komentarzy i odpowiadanie innym użytkownikom. Czas pokaże na ile jest to problematyczne. 🙂
Ogólnie
Serwis został napisany w PHP z wykorzystaniem frameworka Yii 1.1, bazą danych jest MySQL. Layout oparto na twitterowym Bootstrapie, choć niewiele zostało z jego domyślnych ustawień. Tak jak wcześniej pisałem, jako silnik forum wykorzystano zmodyfikowaną wersję MyBB 1.8. Do logowania wykorzystujemy Steam OpenID i dedykowane rozwiązanie do obsługi kont użytkowników i synchronizację z forum.
Poza opisanymi mechanizmami system posiada też wiele dedykowanych widgetów wykorzystywanych w layoucie oraz bardzo zaawansowany backend do zarządzania wszystkimi treściami na stronie. Treści na stronie są dostosowywane do wybranego regionu użytkownika, a całość jest dość mocno zoptymalizowana, aby sprostać nagłym skokom ruchu. Planów na dalszy rozwój jest sporo, więc pewnie co jakiś czas będę zamieszczał aktualizacje. 🙂
2 komentarze do „Otwarta beta Salenauts”