Wpis z mikrobloga

Hej,
Potrzebuję pobrać plik ze strony i to nie jeden raz ale cyklicznie co jakiś okres czasu.
Tą cykliczność chcę osiągnąć za pomocą harmonogramu zadań i skryptu, który będzie pobierał plik z danymi ze strony i to z nim jest największy problem bo javascript znam tylko z widzenia(czyli prawie w ogóle).

Muszę pobrać plik ze strony http://oferty.praca.gov.pl/portal/index.cbop#/listaOfert , tam na dole jest przycisk eksportuj i należy wybrać csv a potem ok.
Na początku próbowałem zapisać stronę i znaleźć funkcję w javascript odpowiadającą za pobieranie tego pliku, ale niestety nie udało mi się znaleźć tego i okazało się, że strona nie działa po pobraniu przez co nie udało mi się wyodrębnić takiej funkcji.

Potem za pomocą F12(Zbadaj Element) w Firefoxie w zakładce sieć odkryłem, że strona wysyła sobie jakieś żądania json z "przyczyną" xhr, na początku wykonajEksport.cbop, później co 1 sekundę sprawdzStatus.cbop a na końcu pobierzPlik.cbop.
I tu jest moje pytanie, czy da się w prosty sposób pobrać ten plik, za pomocą jakiegoś prostego skryptu? I jeśli tak, to z jakich funkcji/bibliotek powinienem skorzystać?

#webdev #javascript #programowanie
  • 7
@qarmin: możesz na przykład:
1) porzeźbić trochę "inżynierii wstecznej" i krok po kroku odtworzyć wszystkie niezbędne zapytania (może nie wszystkie są potrzebne) i spróbować odtworzyć to potem na przykład curlem albo wgetem
albo
2) zautomatyzować poprzez jakieś narzędzie typu Selenium (jeśli Selenium IDE nadal istnieje to powinno być banalnie proste do "nagrania")
albo
3) napisać skrypt-dodatek w TamperMonkey / GreaseMonkey który wyklika to czego potrzeba i odpalać taką stronę wg harmonogramu
@qarmin: możesz robić calle xhr z poziomu javascript bez bibliotek. Google powie. Jeśli oczywiście to jest prosty call i dostępny z poziomu innych stron (cors).

Nie pobierasz pliku, ale odczytujesz zawartość endpointu, możesz w dowolnym formacie, lub w oryginale, sobie to potem zapisać do pliku na dysk - z tym że musiałbyś to robić nodejs lub zadbać o uprawnienia.
@qarmin: udało mi się pobrać:
Najpierw wysyłasz zapytanie POST na http://oferty.praca.gov.pl/portal/oferta/eksport/csv/wykonajEksport.cbop
z formularzem:
daneWyszukania: {"rodzWyszMiejsca":null,"miejsce":"","stanowisko":"","zagranica":false,"stronicowanie":{"count":10,"start":0,"pageCount":2081,"rowCount":"20 809","liczbaMiejsc":"60 053","liczbaPowiatow":null,"liczbaOsob":null},"sortowanie":{"rodzaj":"DATAPUBLIKACJI","kierunek":"DESC"},"wybraneKategorie":[],"rozwinieteKategorie":[{"id":"RODZAJPROPOZYCJI","rodzaj":"GRUPUJACA","nazwa":"RODZAJ_PROPOZYCJI"}],"rodzajPropozycji":null,"miejsceZasieg":"0","alternatywnaPrezentacjaMiejsc":false}
kolumny: ["stanowisko","miejsce-pracy","rodzaj-umowy","pracodawca","dostepna-od"]

potem sprawdzasz status POSTem na http://oferty.praca.gov.pl/portal/oferta/eksport/csv/sprawdzStatus.cbop
i jak będziesz miał TRUE to pobierasz też POSTem http://oferty.praca.gov.pl/portal/oferta/eksport/csv/pobierzPlik.cbop
passage - @qarmin: udało mi się pobrać:
Najpierw wysyłasz zapytanie POST na http://o...

źródło: comment_ds2m6ecYX1mNG32m24ETzufk3H9pYygJ.jpg

Pobierz