Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Importowanie danych z innej strony po wykonaniu javascriptu
Qlimmax
post
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
2 Stron V   1 2 >  
Start new topic
Odpowiedzi (1 - 24)
trueblue
post
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Qlimmax
post
Post #21





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

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


Próbowałem z Curl i nie mogę zrozumieć, gdzie błąd popełniam, ciągle otrzymuje zwrotnie: {"success":false,"error":""}

  1. $json = '{"measType":"Auto","viewType":"Station","dateRange":"Day","date":"21.12.2016","viewTypeEntityId":"23","channels":[418]}';
  2. $data = json_decode($json);
  3. $data_string = json_encode($data);
  4.  
  5. $ch = curl_init('http://air.wroclaw.pios.gov.pl/dane-pomiarowe/pobierz');
  6. curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
  7. curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
  8. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  9. curl_setopt($ch, CURLOPT_HTTPHEADER, array(
  10. 'Content-Type: application/json',
  11. 'Content-Length: ' . strlen($data_string))
  12. );
  13.  
  14. $result = curl_exec($ch);
  15. echo $result;
  16. curl_close($ch);


Próbuję pobrać jeden rodzaj zanieczyszczenia z jednej stacji http://air.wroclaw.pios.gov.pl/dane-pomiar...enny/21.12.2016

Zrzut z F12/sieć/pobierz
Request URL:http://air.wroclaw.pios.gov.pl/dane-pomiarowe/pobierz
Request Method:POST
Status Code:200 OK
Remote Address:95.50.19.22:80
Response Headers
view source
Cache-Control:no-cache
Connection:keep-alive
Content-Type:application/json
Date:Thu, 22 Dec 2016 10:23:53 GMT
Server:nginx/1.6.2
Transfer-Encoding:chunked
X-Powered-By:PHP/5.4.16
Request Headers
view source
Accept:application/json, text/javascript, */*; q=0.01
Accept-Encoding:gzip, deflate
Accept-Language:pl-PL,pl;q=0.8,en-US;q=0.6,en;q=0.4
Connection:keep-alive
Content-Length:199
Content-Type:application/x-www-form-urlencoded; charset=UTF-8
Cookie:start_selector_nth=0; start_selector_hide=no; _ga=GA1.3.656740653.1480503322; _gat=1
Host:air.wroclaw.pios.gov.pl
Origin:http://air.wroclaw.pios.gov.pl
Referer:http://air.wroclaw.pios.gov.pl/dane-pomiarowe/automatyczne/stacja/23/parametry/418/dzienny/21.12.2016
User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
X-Requested-With:XMLHttpRequest
Form Data
view source
view decoded
query:%7B%22measType%22%3A%22Auto%22%2C%22viewType%22%3A%22Station%22%2C%22dateRange%22%3A%22Day%22%2C%22date%22%3A%2221.12.2016%22%2C%22viewTypeEntityId%22%3A%2223%22%2C%22channels%22%3A%5B418%5D%7D
view URL encoded
query:{"measType":"Auto","viewType":"Station","dateRange":"Day","date":"21.12.2016","viewTypeEntityId":"23","channels":[418]}


Jak cały request headers przekopiowałem, to tylko kilka krzaków dostałem. Nie ma pomysłu co robię nie tak.
Go to the top of the page
+Quote Post
trueblue
post
Post #22





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

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


HEADER jest niepoprawny. Nie jest w ogóle potrzebny.
Dane POST są niepoprawne. Brakuje nazwy zmiennej, która powinna mieć przypisaną wartość JSON (encodowaną).


--------------------
Go to the top of the page
+Quote Post
Qlimmax
post
Post #23





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

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


Cytat(trueblue @ 22.12.2016, 12:31:57 ) *
HEADER jest niepoprawny. Nie jest w ogóle potrzebny.
Dane POST są niepoprawne. Brakuje nazwy zmiennej, która powinna mieć przypisaną wartość JSON (encodowaną).

Pozbyłem się HEADER

curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($data_string))
);

nie wiem skąd tą nazwę zmiennej pozyskać, aby była prawidłowa.

  1. $data = array('measType' => 'Auto', 'viewType' => 'Station', 'dateRange' => 'Day', 'date' => '21.12.2016', 'viewTypeEntityId' => '23', 'channels' => array(418));
  2. $data_string = json_encode($data);
  3.  
  4. $ch = curl_init('http://air.wroclaw.pios.gov.pl/dane-pomiarowe/pobierz');
  5. curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
  6. curl_setopt($ch, CURLOPT_POSTFIELDS, $data_string);
  7. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
  8.  
  9.  
  10. $result = curl_exec($ch);
  11. echo $result;
  12. curl_close($ch);

Go to the top of the page
+Quote Post
nospor
post
Post #24





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




Cytat
nie wiem skąd tą nazwę zmiennej pozyskać, aby była prawidłowa.
No to jak wejdziesz na ich strone i spojrzysz w ajaxa ktory idzie to jak wol masz napisane ze parametr nazywa sie:
query


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

"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
Post #25





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

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


Cytat(nospor @ 22.12.2016, 14:31:30 ) *
No to jak wejdziesz na ich strone i spojrzysz w ajaxa ktory idzie to jak wol masz napisane ze parametr nazywa sie:
query

Działa i ładnie zwraca dane, zbyt dosłownie potraktowałem to query, sądząc że to opis wypisanej pozycji, kłania się brak znajomości narzędzi. Jeszcze raz dziękuję za pomoc.
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 Aktualny czas: 20.08.2025 - 10:01