no siema.
lubię społeczność @hejto , ale strasznie mnie irytuje brak różnych funkcji albo działanie inne niż to którego bym chciał. Narzekałem, tagowałem, nic z tego nie wyszło. Tak więc przedstawiam Wam alternatywę-WIP-chyba-że-mi-się-znudzi-#opensource i pierwszy merytoryczny wpis w serii.
Repozytorium: https://github.com/wombatDaiquiri/lajko
Permalink do commita o którym piszę: https://github.com/wombatDaiquiri/lajko/tree/v0.0.2
Nie ma nawet README, ale nie od razu Rzym zbudowano. Ma za to dwa pliki które napisałem ja i cztery których nie napisałem (kto ma wiedzieć ten wie #pdk kto nie wie ten widocznie jeszcze nie potrzebuje).
Kod jest napisany w JavaScript. To taki język którego kiedyś się używało żeby robić fajne przejścia między obrazkami w przeglądarce. Teraz dostępny też w formie języka programowania z silnikiem który po prostu wykonuje kod na kompie jak np. Pythona albo C++ (nie do końca, ale to nie praca naukowa tylko edutainment)
Żeby sobie odpalić te programy, to musicie np. zainstalować NodeJS: https://nodejs.org/en/download następnie ściągnąć repozytorium z linka (można kliknąć przycisk <> Code i wybrać Download ZIP a potem rozpakować, jak nie macie gita)
no i teraz możecie poczuć się jak hacker - odpalić terminal. Może być windowsowy (wpiszcie `cmd` w wyszukaj i uruchom czy coś takiego). Poniżej szybki tutorial "chodzenia po systemie plików". W sensie klikania w foldery w formie tekstowej.
-
`ls` pokazuje pliki w folderze w którym jesteś
-
`cd <nazwa_folderu>` przechodzi do folderu o nazwie `<nazwa_folderu>` który MUSI się znajdować w folderze w którym jesteś (czyli pokazywać się w komendzie `ls`) - ten krok będziemy nazywać KROKIEM W DÓŁ
-
, `cd ../` przechodzi do "folderu który zawiera folder w którym jesteś" - taki "KROK DO GÓRY" - czyli przeciwieństwo kroku w dół
-
a jak się zamotasz albo sprawdzasz jak działają komendy to `pwd` pokaże tak zwaną "ścieżkę" - trudniej mi będzie wyjaśnić niż Tobie sprawdzić i skumać eksperymentując
no i jak będziecie w folderze z kodem, to najpierw musicie napisać `npm install` żeby pobrać tak zwane ZALEŻNOŚCI, a potem to możecie sobie np. odpalić zaciągnięcie pierwszej strony "najnowszych" i zapisanie jej jako JSON (jak nie wiesz co to to wygoogluj) kopiując, wklejając do terminala i wciskając enter;
nodejs scrape.js
stworzy Wam się wtedy plik `data-snapshots/{czas_w_ktorym_odpaliliscie_scrapejs}.json` a w środku będzie TABLICA zawierająca OBIEKTY - jak sprawdzicie co to JSON i otworzycie taki plik to myślę że intuicyjnie skumacie co to tablice i obiekty.
no ale taki plik to jest w sumie do dupy, bo to to samo co hejto.
tutaj wkracza drugi plik - `process.js`. Odpalić go można następująco;
opcja pierwsza - sortowanie po sumie lajków komentarzy (nie patrząc na lajki samego wpisu)
nodejs process.js --cmd=comment_likes_sum --source=data-snapshots/{czas_w_ktorym_odpaliliscie_scrapejs}.json
opcja druga - tak samo, tylko z komendą `likes_total` zamiast `comment_likes_sum` da Wam wpisy posortowane po sumie lajków posta i komentarzy.
liczę, że foldery znajdziecie sami.
UWAGA! z łaski swojej nie napierdalajcie za często `scrape.js` - po to zapisuje wpisy, żeby nie zepsuć hejto. nie spierdolcie tego. do adminów @hejto - myślę że filtrowanie useragent wystarczy żeby największy plankton zablokować.
A na jutro postaram się przygotować wpis jak sobie napisać taki scraper samemu, chociaż starałem się żeby kod był łatwy do czytania. Sam praktycznie nie znam JavaScriptu, więc nie będę używał żadnych mega magicznych narzędzi i skomplikowanych konstrukcji językowych.
jeśli coś Wam nie działa, to zapraszam do komentowania też. z fartem wariaty.
kurde zapomniałem zapisywać linka do posta xD grupa obniżania poziomu.
nie mniej gratuluję @adam_photolive @Cris80 i @smierdakow za posty pod którymi komentarze były najbardziej plusowane, oraz @adam_photolive @Cris80 i @smierdakow za posty które razem z komentarzami zgromadziły najwięcej lajków do spółki z komentarzami.
a sobie gratuluję dobrania fantastycznych metryk na start. mam nadzieję że w przyszłości efekty będą bardziej spektakularne
@wombatDaiquiri
Jak można Ci postawić kawę?
@Yossarian absolutnie nie trzeba, w przyszłości jeśli mi starczy cierpliwości to zrobię swoją bramkę płatności w ramach tej serii. Ale bardzo dziękuję za wyrazy uznania.
@wombatDaiquiri ale żeby nodejs? (☉__☉”)
@VonTrupka ostatnio kupiłem NAS i 2x1TB dysk. Potrzebuję motywacji żeby go skonfigurować.
A tak serio, w pythonie nie rozumiem envów i nie chce mi się ich chwilowo poznawać. W go będziemy pisać trochę później, bo na tym etapie nie ma sensu się bawić w statyczne typowanie. No i będę chciał zrobić UI, to gdyby ktoś chciał się uczyć programowania na podstawie moich postów, to nie będzie musiał się uczyć ośmiu języków na raz.
Dorzucam do listy "tematów do poruszenia". A obrazek klasyk
>ostatnio kupiłem NAS i 2x1TB dysk. Potrzebuję motywacji żeby go skonfigurować.
@wombatDaiquiri na mocy danej mi słowem honoru motywuję cię do konfiguracji NASa ku lepszemu życiu, łatwiejszym taskom i bezpieczeństwu danych.
Idźcie zatem i ... jedzcie vontrupke s cebulko ( ͡~ ͜ʖ ͡°)
Ja to cokolwiek opartego na nodejs mógłbym dopiero od niedawna odpalić, czego nie zrobiłbym na talerzowcu 5400.
Niemniej jednak idea całego nodejs jest dla mnie tak samo niepojęta, jak prawa fizyki zachodzące w czarnych dziurach (´・‸・ ` )
@VonTrupka zgadzam się, jest to pojebane do produkcji. Ale pewien walor edukacyjny mam nadzieję będzie miało. No i wszystko jest w npm to można samemu robić duże rzeczy szybko. Wydaje mi się, że tak mogło powstać samo hejto xD
@wombatDaiquiri na tym to chyba lurker powstał :}
@wombatDaiquiri z czystej ciekawosci zajrzalem w kod, bo sam temat scrapowania mnie nie interesuje. Robisz .catch na main
main().
then(() => console.log('posts length in main promise:' + posts.length)).
catch(err => console.log(err));
ale to nic ci nie da jak wysypie sie w funkcji savePosts bo ona uzywa callbackow - nie zlapiesz bledu.
@666 ok, a co powinienem zrobić zamiast tego? Ten catch to jest głównie na 500 z hejto. A tematyka z czasem będzie się zmieniała - ale gdzieś trzeba zacząć. Dzięki a komentarz!
@wombatDaiquiri Wiadomka ze jakos trzeba zaczac a potem iteracyjnie rozwijac i ulepszac. Kip goin
Fix: jesli to jakas w miare nowa wersja node.js, tak 14+ to uzyj https://nodejs.org/docs/latest-v14.x/api/fs.html#fs_promises_api
Czyli troche inaczej robisz require/import ("fs" -> "fs/promises"), a potem zamiast callbacka dajesz
await fs.jakasfunkcja()
Dodaj testy w Jest to takie problemy mozna latwo wykryc
Zaloguj się aby komentować