Gówniane ficzery alegro cz.1
Nonstop wdrażane gównoficzery na allegro utrudniają korzystanie z tej platformy. W pierwszym odcinku biorę na warsztat ukrytą datę zakończenia aukcji, zamiast której pokazywane jest odliczanie do końca.
PROLOG
Nienawidzę polskiego menedżmentu średniego szczebla. Bo to skończone durnie, a w bardzo wielu przypadkach czystej wody s*syny. Muszą się wykazać jakimś osiągnięciem, najczęściej gównianym, ale takim co mocno wkrwi docelowego odbiorcę i/lub podwładnego, przez co będzie o tym _na językach_. W tym nieodosobnionym przypadku jakaś bulwa wpadła na super duper kurwupel pomysł funkcji, która na 24h przed zakończeniem aukcji nie będzie już pokazywała dokładnej daty i godziny zakończenia.
O tu wdupimy coś czego nikt jeszcze nie ma:
odliczanie do końca aukcji xD
iks.de
Pamiętam, że było to wybiórcze, na początku nie we wszystkich aukcjach, a poza odliczaniem widniała też małym fontem gdzieś obok data zakończenia.
Było ale się zmyło.
Wspaniały to pomysł, nie zapomnę go nigdy
A teraz to już tylko JPRDL (-‸ლ)
Hui ci w doope staaaary jeśli chcesz ustawić sobie jakiś alercik na słuchawie, albo w kalendarzu gdy jakiś item warty byłby wzięcia udziału w aukcji a kończy się tego samego dnia.
Coś się jednak musi dać zrobić. Przecież liczyk nie stoi w miejscu czekając aż odświeżysz stronę. Zatem ktoś musiał sklepać na kolanie jawaskrypcik do dynamicznego odliczania żebyś ty sam musiał się pałować w poszukiwaniu daty zakończenia aukcji.
Już w zeszłym roku, albo i dwa(?), zerknąłem co nasrały programisty alegrosza w kodzie źródłowym aby znaleźć interesującą mnie informację, bo gównianych funkcji i zmian na gorsze wprowadzono dosyć dużo. Btw. HTML5 w allegro? Wolne żarty, może za 20 lat. Ta gnojówa jest oparta na serializowanych danych json, obrabianych javascriptem. Dzięki czemu w połączeniu z adblockiem działa to koszmarnie wolno, przeładowuje okno nawet dwukrotnie co w międzyczasie wkrrrrrw do białości resetując zawartość inputów, w których już zdążyłem wpisać szukaną frazę wraz z wyjątkami.
Pisał sobie Pierre do Lony o alegro
DO BRZEGU
W kodzie źródlanym widnieje interesująca mnie informacja. Nawet elegancko sformatowana przez co nie trzeba pamiętać o żadnych strefach czasowych czy przeliczaniu timestamp-a na polskie CET, lub GMT. Oczywiście nie trafiłem na te info ani za pierwszym wyszukiwaniem, ani za piątym, bo kodu na kilometry i H wi czego w ogóle szukać. Ot taka jedna wisienka na torciku wiadomo z czego.
Przykladem
formattedEndingDate":"(czw., 29 wrz 2022, 19:00:00)
Aukcji w których fucktycznie chciałem wziąć udział nie było dużo. Może jedna tygodniowo, choć zgoła dużo rzadziej. Dlatego wystarczało podglądnąć kod, wyszukać formattedEndingDate, ustawić alert na daną godzinę i można rundkę w CS-a #pdk. Niemniej jednak z aukcji na aukcję zaczęło mnie to wkurzać i nadszedł czas ułatwić sobie życie, gdy inni tylko próbują je utrudniać.
Przydałoby się jakieś jednokliczkowe rozwiązanie żeby wyłuskać tę informację
Prześledziłem kod, pogłówkowałem co by można zrobić i zakasałem rękawy.
Wdroży się bookmarklet, czyli zakładkę w przeglądarce zawierającą skrypt js zamiast url-a do strony internetowej i fajrant. Proste, jednoklikowe rozwiązanie.
Ot, wskażę skrypt w kodzie zawierający potrzebne info, przytnę zawartość żeby nie przebijać się przez niepotrzebny gąszcz danych i wyświetlę sobie alercikiem w popupie.
W dupie sobie wyświetlę a nie w popupie.
Krw, po kilku latach szczęśliwy, że rzuciłem programowaniem wpizdu przypomnialem sobie w trymiga jakaż to jest kaka z tego javascriptu.
Oczywiscie kod aukcji alegro uja tam ułatwił. Ilość skryptów nie jest stała, zmienia się per aukcja, więc nie wskażę tego konkretnego jako stały "wskaźnik" (nie wiem nawet jak to nazwać, liczba?); identyfikatora nie mają więc najprostszym getElementById() o kant pięty; zawartość w json, więc operacje na stringach bo co mam z tym zrobić, wrzucić do macierzy?
jprdl
Nie, nie chce mi się, wystarczy już grzebania w tym gównie.
No ale co zrobić gdy już pół godzinki zmarnowane?
Otóż najpierw należy zrobić sobie drinczunia (⌐ ͡■ ͜ʖ ͡■) 🍹
Jakoś poszło, mozolnie ale do przodu. Po kilku próbach i ślepych zaułkach wyplułem z siebie ten oto programistyczny majstersztyk.
javascript: (() => { var scripts = document.getElementsByTagName('script'); for(var i = 0, l = scripts.length; i < l; i++) { if(scripts[i].innerHTML.indexOf("formattedEndingDate") !== -1) { alert(scripts[i].innerHTML.substring(scripts[i].innerHTML.indexOf("formattedEndingDate")).substring(0,113)); break; } } })();
Coś o kodzie na przyszłość, bo za tydzień nie będę nawet pamiętał o co w tym chodzi i dlaczego właśnie tak. Notabene html-owy tag [code] jest inline i muszę używać [pre] w CMS-ie. Ehh, vanitas.
Zapraszam cwaniaków do komentowania używanych "sztandarowych" zmiennych w liczyku :>
Dobra, przede wszystkim dodajemy zakładkę w przeglądarce, najlepiej do paska zakładek aby mieć go pod ręką zamiast przeklikiwać menu. Edytujemy ponownie, copypaste kodzia i voilla. Zastrzeżenie jest takie, że kod JS w bookmarklet...cie(?) musi być jednolinijkowy, choć podczas wklejania powinien zostać "spłaszczony" bez potrzeby pałowania sie z tym. Przynajmniej we frajerfoksie.
bookmarklet we frajerfoksie
O samym kodzie.
Takie skrypty trzeba okraszać
javascript: (() => { var uj; //tutaj jakieś bazgroły })();
Taki mus, nawet nie pamiętałem.
Co dalej? Wciągamy wszystkie javascript-y używając getElementsByTagName aby przeorać je i sprawdzić, który z nich zawiera datę. Oramy - bo te gówno się ora, a nie orze - klasyczną pętelką for. Jeśli dany skrypt zawiera poszukiwany string formattedEndingDate, wyłuskujemy jego zawartość do alercika pokazując w popupie i przerywamy dalsze rzeźbienie.
Co do wyłuskiwania:
scripts[i].innerHTML.substring(scripts[i].innerHTML.indexOf("formattedEndingDate")).substring(0,113);
Pierwszym substring-iem wycinam zawartość tekstową skryptu zaciąganą funkcją .innerHTML do wskazanego miejsca. A indexOf wskaże owo miejsce, od którego zaczyna się poszukiwana data. Drugi substring obcina pozostałość kodu z dalszych bazgrołów pozostawiając interesujące mnie dane. Toporne i przycina na sztywno 113 znaków.
Działa? Działa!
I HDWP w dupe wszystkim, którzy czują potrzebę wprowadzania takich gówien utrudniających korzystanie z zazwyczaj dobrze przemyślanych rozwiązań w dotychczas wdrożonych mechanizmach.
proof of concept
POSŁOWIE
Jest jeszcze jeden niuans z tym gównianym javascriptowym liczykiem jakie wprowadziło alegro. Niewskazane jest przeskakiwanie po zakładkach przeglądarki podczas odliczania sekund do końca aukcji. Timer w JS - czyli wszelkie funkcje dot. odliczania czasu w javascript - jest zawodny i po powrocie do zakładki z aukcją można się przykro zdziwić.
Trochę o timerach w JS tutaj:
https://abhi9bakshi.medium.com/why-javascript-timer-is-unreliable-and-how-can-you-fix-it-9ff5e6d34ee0
Ilość "gówna" jakie przelałem w tekście jest porażająca. Szorując jednak po dnie w tym bezbrzeżnym morzu smrodu jak nie ująć tego dosadnie i stanowczo?
Za to zmniejszona illość .l. cellowa i zamierzona.