Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> Importowanie danych z innej strony po wykonaniu javascriptu
Qlimmax
post 20.12.2016, 13:49:07
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 7.12.2007

Ostrzeżenie: (0%)
-----


Witam,
próbowałem przy użyciu PHP Simple HTML DOM Parser zaimportować dane dot. powietrza ze strony http://air.wroclaw.pios.gov.pl/dane-pomiar...metry/wszystkie
Niestety dane doładowują się javascriptem i wypluwa mi stronę bez pomiarów (tabelka). Od WIOŚ danych nie dostanę, mogę liczyć tylko na to co zaciągnę ze strony. Założenie jest takie, aby co godzinę pobierać aktualne pomiary, lub na bieżąco jeżeli będzie to wystarczająco szybkie.

  1. <?php
  2. require('simple_html_dom.php');
  3. $html = file_get_html("http://air.wroclaw.pios.gov.pl/dane-pomiarowe/automatyczne/stacja/23/parametry/wszystkie");
  4. echo $html;
  5. ?>
Go to the top of the page
+Quote Post
trueblue
post 20.12.2016, 13:52:42
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Dane są pobierane metodą POST.
Sprawdź zakładkę Network/Sieć konsoli przeglądarki (Chrome->F12).


--------------------
Go to the top of the page
+Quote Post
nospor
post 20.12.2016, 14:16:05
Post #3





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




ps: nie ma to jak w produkcyjnym js zostawic console.log....
Cytat
response: Object { success=true, data={...}} success
browse.js?v3 (line 36)
pobrano dane: Object { charts=[0], title="Dane pomiarowe dla stacj...go w dniu 20.12.2016 r.", unitLabel="&micro;g/m<sup>3</sup>", more...}
browse.js?v3 (line 36)
@config.series: 1 [Object { label="Dwutlenek siarki<sup>3)</sup>", measType="auto", paramLabel="Dwutlenek siarki", more...}]
browse.js?v3 (line 32)
value: 350
browse.js?v3 (line 32)
@config.series: 3 [Object { label="Dwutlenek azotu", measType="auto", paramLabel="Dwutlenek azotu", more...}, Object { label="Tlenki azotu", measType="auto", paramLabel="Tlenki azotu", more...}, Object { label="Tlenek azotu", measType="auto", paramLabel="Tlenek azotu", more...}]
browse.js?v3 (line 32)
value: 200
browse.js?v3 (line 32)
@config.series: 2 [Object { label="Ozon", measType="auto", paramLabel="Ozon", more...}, Object { label="Ozon 8h<sup>2)</sup>", measType="auto", paramLabel="Ozon", more...}]
browse.js?v3 (line 32)
value: 120
browse.js?v3 (line 32)
@config.series: 2 [Object { label="Tlenek węgla", measType="auto", paramLabel="Tlenek węgla", more...}, Object { label="Tlenek węgla 8h<sup>2)</sup>", measType="auto", paramLabel="Tlenek węgla", more...}]
browse.js?v3 (line 32)
value: 10000
browse.js?v3 (line 32)
@config.series: 1 [Object { label="Benzen", measType="auto", paramLabel="Benzen", more...}]
browse.js?v3 (line 32)
@config.series: 1 [Object { label="Pył zawieszony PM10", measType="auto", paramLabel="Pył zawieszony PM10", more...}]
browse.js?v3 (line 32)
@config.series: 1 [Object { label="Pył zawieszony PM2.5", measType="auto", paramLabel="Pył zawieszony PM2.5", more...}]


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Pyton_000
post 20.12.2016, 14:26:52
Post #4





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


I tak tam nie ma nic co można by było poprzeglądać w źródle strony smile.gif
Go to the top of the page
+Quote Post
nospor
post 20.12.2016, 14:29:05
Post #5





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Nie o to mi chodzilo. Chodzilo mi o sam fakt console.log, ktory czesto potrafi zamulic takiego np. firefox dla duuuuzych danych. A w produkcji jest to totalnie zbedne. Juz nie bede wspominal o tym ze stare przegladarki sie poprostu wyloza na takim js i guzik zobaczysz wink.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Qlimmax
post 20.12.2016, 14:42:37
Post #6





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 7.12.2007

Ostrzeżenie: (0%)
-----


Cytat(trueblue @ 20.12.2016, 13:52:42 ) *
Dane są pobierane metodą POST.
Sprawdź zakładkę Network/Sieć konsoli przeglądarki (Chrome->F12).



Dziękuję za podpowiedź, zerknąłem do tej zakładki:

Request URL:http://air.wroclaw.pios.gov.pl/dane-pomiarowe/pobierz
Request Method:POST
Accept:application/json, text/javascript
query:{"measType":"Auto","viewType":"Station","dateRange":"Day","date":"20.12.2016","viewTypeEntityId":"23","channels":[418,423,432,425,428,539,422,419,424]}

Tyle udało mi się zrozumieć, że metodą POST pobiera sobie dane w formacie JSON z http://air.wroclaw.pios.gov.pl/dane-pomiarowe/pobierz

Macie jakiś pomysł jak można by te dane uzyskać, tak by można je cyklicznie zaciągać, czy da się GET-em pobrać tego JSON-a?
Go to the top of the page
+Quote Post
nospor
post 20.12.2016, 14:46:56
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




php curl
http://php.net/manual/en/book.curl.php
i robisz wszystko tak jak oni na stronie. NIe ma wowczas problemu czy to POST czy GET.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Qlimmax
post 20.12.2016, 14:57:07
Post #8





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 7.12.2007

Ostrzeżenie: (0%)
-----


Cytat(nospor @ 20.12.2016, 14:46:56 ) *
php curl
http://php.net/manual/en/book.curl.php
i robisz wszystko tak jak oni na stronie. NIe ma wowczas problemu czy to POST czy GET.



Ale czy oni nie muszą tego curla obsługiwać? albo coś instalować? da się to jakoś prosto sprawdzić?
Przepraszam za tyle pytań smile.gif
Go to the top of the page
+Quote Post
nospor
post 20.12.2016, 15:08:24
Post #9





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




cURL sluzy do imitowania requestow, ktore robia przegladarki - tak w skrocie
Wiec nie, oni nic nie musza robic. przy pomocy cURL ty wysylasz dokladnie takie samo żądanie co przegladarka wiec oni nawet sie nie kapna ze to ty a nie przegladarka


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Qlimmax
post 20.12.2016, 15:27:38
Post #10





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 7.12.2007

Ostrzeżenie: (0%)
-----


Cytat(nospor @ 20.12.2016, 15:08:24 ) *
cURL sluzy do imitowania requestow, ktore robia przegladarki - tak w skrocie
Wiec nie, oni nic nie musza robic. przy pomocy cURL ty wysylasz dokladnie takie samo żądanie co przegladarka wiec oni nawet sie nie kapna ze to ty a nie przegladarka

Super, dziękuję za odpowiedź, teraz już wiem nad czym pracować.
Go to the top of the page
+Quote Post
Puszy
post 20.12.2016, 16:30:04
Post #11





Grupa: Zarejestrowani
Postów: 279
Pomógł: 42
Dołączył: 10.10.2011

Ostrzeżenie: (0%)
-----


Cytat(nospor @ 20.12.2016, 15:08:24 ) *
cURL sluzy do imitowania requestow, ktore robia przegladarki - tak w skrocie
Wiec nie, oni nic nie musza robic. przy pomocy cURL ty wysylasz dokladnie takie samo żądanie co przegladarka wiec oni nawet sie nie kapna ze to ty a nie przegladarka


Z tego co się orientuję mogliby zablokować dostęp i udostępnić skryptom jedynie z konkretnej puli domen.
Go to the top of the page
+Quote Post
nospor
post 20.12.2016, 16:32:53
Post #12





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Jakich domen?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Puszy
post 20.12.2016, 16:45:26
Post #13





Grupa: Zarejestrowani
Postów: 279
Pomógł: 42
Dołączył: 10.10.2011

Ostrzeżenie: (0%)
-----


Cytat(nospor @ 20.12.2016, 16:32:53 ) *
Jakich domen?


A czy niemożliwym jest żeby dostęp do http://air.wroclaw.pios.gov.pl/dane-pomiarowe/pobierz miały tylko skrypty odpalane z *.wroclaw.pios.gov.pl?
Go to the top of the page
+Quote Post
nospor
post 20.12.2016, 16:47:52
Post #14





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




A jak to zrobisz by serwer przyjmowal tylko i wylacznie żądanie z *.wroclaw.pios.gov.pl ? Bo chyba nie masz na mysli REFERER wink.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Puszy
post 20.12.2016, 16:55:15
Post #15





Grupa: Zarejestrowani
Postów: 279
Pomógł: 42
Dołączył: 10.10.2011

Ostrzeżenie: (0%)
-----


O nie, nie, referer jest zawodny. Kiedyś spotkałem się z takim przypadkiem, jedyne info jakie otrzymywałem to tekst o tym że skrypt nie jest odpalany właśnie z domeny xyz.com, stąd też wiem że jest opcja wyfiltrowania takich requestów. Być może było to sprawdzanie IP, lub inne dane z nagłówka HTTP, nigdy się w to nie zagłębiałem.
Go to the top of the page
+Quote Post
nospor
post 20.12.2016, 16:58:17
Post #16





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
O nie, nie, referer jest zawodny.
Ja to wiem. To bylo pytanie retoryczne wink.gif

Cytat
Być może było to sprawdzanie IP, lub inne dane z nagłówka HTTP, nigdy się w to nie zagłębiałem.
Raczej nie. Co ci da sprawdzenie IP usera? user ma prawo odpalic twoja strone z dowolnego IP (chyba ze pozwalasz tylko na userow z danej firmy a co za tym idzie z danego IP). Inne naglowki tez raczej nie wchodza w gre. Mogli co najwyzej dodawac jakis token do swoich ajaxow/requestow ale i to idzie odczytac.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Puszy
post 20.12.2016, 17:01:24
Post #17





Grupa: Zarejestrowani
Postów: 279
Pomógł: 42
Dołączył: 10.10.2011

Ostrzeżenie: (0%)
-----


http://erwinmayer.com/labs/asin2ean/index.php#ASIN-to-EAN

tokenów nie widzę nigdzie, nagłówki w HTTP które ewentualnie mogłyby być brane pod uwagę: Host, Origin. Choć teraz jak na to patrzę to rzeczywiście jest cookie, nie podawałem wtedy ciasteczek, będę musiał to sprawdzić jeszcze raz.
Go to the top of the page
+Quote Post
nospor
post 20.12.2016, 17:07:14
Post #18





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Masz moze kod php, ktorym probowales pobrac dane? Zaciekawiles mnie smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Puszy
post 21.12.2016, 15:47:01
Post #19





Grupa: Zarejestrowani
Postów: 279
Pomógł: 42
Dołączył: 10.10.2011

Ostrzeżenie: (0%)
-----


Cytat(nospor @ 20.12.2016, 17:07:14 ) *
Masz moze kod php, ktorym probowales pobrac dane? Zaciekawiles mnie smile.gif


Napisałem kod na nowo i działa, wiem w czym był problem. Strona którą podałem wykonuje dwa zapytania XRH z czego jedno pobiera dane w JSONie a drugie zwraca <iframe> ze stroną Amazona. Z kolei Amazon ma ustawione ograniczenia co do nagłówka Origin, w teorii (być może w praktyce też) nie możesz otworzyć Amazona w ramce i to Amazon wyrzucał błąd. Poniżej kod z ZF2 który pobiera JSONa z danymi o ASINie i EANie:

  1.  
  2. $request = new Request();
  3. $request->getHeaders()->addHeaders([
  4. 'Content-Type' => 'application/x-www-form-urlencoded; charset=UTF-8',
  5. 'X-Requested-With' => 'XMLHttpRequest',
  6. ]);
  7. $request->setMethod(Request::METHOD_POST);
  8. $request->setUri('http://erwinmayer.com/labs/asin2ean/processing3.php');
  9. $request->setPost(new Parameters([
  10. 'locale' => 'fr',
  11. 'mode' => 'ASIN-to-EAN',
  12. 'ids' => '020530902X',
  13. 'searchIndex' => 'All',
  14. 's' => '',
  15. ]));
  16.  
  17. $client = new Client();
  18. /** @var \Zend\Http\Response $response */
  19. $response = $client->dispatch($request);
  20.  
Go to the top of the page
+Quote Post
nospor
post 21.12.2016, 15:50:17
Post #20





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




No i sprawa z "blokowaniem" wyjasniona wink.gif

dzieki za kod


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 19.07.2025 - 12:37