Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> problem z pobraniem JSON
smiady
post 13.09.2014, 19:54:23
Post #1





Grupa: Zarejestrowani
Postów: 137
Pomógł: 2
Dołączył: 2.07.2007
Skąd: Ostrzeszów

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


Witam.

Mam problem z pobraniem JSONa. Oto link:
http://geocoder.cit.api.here.com/6.2/geoco...icka_98_Wrocław
i normalnie, gdy się go wyrzuci w przeglądarce to ładnie pokaże dane, ale mam problem z pobraniem tego w PHP.

Pierwsze podejście z file_get_contents() nie wyszło bo wyświetla mi:
file_get_contents(http://geocoder.cit.api.here.com/6.2/geocode.json?app_id=DemoAppId01082013GAL&amp;app_code=AJKnXv84fjrb0KIHawS0Tg&amp;searchtext=Stabłowicka_98_Wrocław) [<a href='function.file-get-contents'>function.file-get-contents</a>]: failed to open stream: HTTP request failed! HTTP/1.1 400 Bad Request
czytałem że rozwiązaniem tego problemu jest $path= str_replace('&amp;', '', $path); niestety nie działa mi to.

Drugie podejście:
  1. $c= curl_init($path);
  2. curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
  3. $json= curl_exec($c);
  4. $json= json_decode($json, true);
  5. print_r($json);

i wyrzuca mi:
Array
(
[Details] => Bad request
[type] => ApplicationError
[subtype] => BadRequest
)

co robić ?
Go to the top of the page
+Quote Post
irekk
post 13.09.2014, 22:56:07
Post #2





Grupa: Zarejestrowani
Postów: 64
Pomógł: 10
Dołączył: 2.08.2012
Skąd: DW

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


W przypadku file_get_contents sprawdź php.ini czy masz włączone allow_url_fopen. Curl powinien działać, więc może przekazujesz zły url.

Poniższe kody działają:

  1. $sUrl = 'http://geocoder.cit.api.here.com/6.2/geocode.json?app_id=DemoAppId01082013GAL&app_code=AJKnXv84fjrb0KIHawS0Tg&searchtext=Stab%B3owicka_98_Wroc%B3aw';
  2. $sJson = file_get_contents($sUrl);
  3. print_r(json_decode($sJson));


  1. $sUrl = 'http://geocoder.cit.api.here.com/6.2/geocode.json?app_id=DemoAppId01082013GAL&app_code=AJKnXv84fjrb0KIHawS0Tg&searchtext=Stab%B3owicka_98_Wroc%B3aw';
  2. $rCurl = curl_init($sUrl);
  3. curl_setopt($rCurl, CURLOPT_RETURNTRANSFER, true);
  4. $sJson = curl_exec($rCurl);
  5. print_r(json_decode($sJson));

Go to the top of the page
+Quote Post
kreatiff
post 13.09.2014, 23:03:14
Post #3





Grupa: Zarejestrowani
Postów: 324
Pomógł: 105
Dołączył: 7.08.2012

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


Przepuść urla przez urlencode, a dopiero potem pobieraj.
Go to the top of the page
+Quote Post
irekk
post 14.09.2014, 07:02:56
Post #4





Grupa: Zarejestrowani
Postów: 64
Pomógł: 10
Dołączył: 2.08.2012
Skąd: DW

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


Urla przepuszczasz przez urlencode jak go chcesz przekazać a nie wywołać.
Go to the top of the page
+Quote Post
smiady
post 14.09.2014, 09:13:51
Post #5





Grupa: Zarejestrowani
Postów: 137
Pomógł: 2
Dołączył: 2.07.2007
Skąd: Ostrzeszów

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


cUrl działa, ale pod linkiem:
http://geocoder.cit.api.here.com/6.2/geoco...ka_98_Wroc%B3aw
, a nie:
http://geocoder.cit.api.here.com/6.2/geoco...icka_98_Wrocław

jest funkcja, która polskie znaki zamieni mi na te % ?
Go to the top of the page
+Quote Post
kreatiff
post 14.09.2014, 09:31:03
Post #6





Grupa: Zarejestrowani
Postów: 324
Pomógł: 105
Dołączył: 7.08.2012

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


irekk, owszem, ale skoro już w samym linku jest szukanie (searchtext), to znaczy, że zostało to przekazane.
Po prostu zasób dostępny jest pod adresem, gdzie polskie znaki są zakodowane.

Przeglądarka sobie może poradzić sama ze zmianami, file_get_contents nie.

W pierwszym linku występują polskie znaki, w Twoim przykładzie już nie. Więc i pobiera ładnie.

Racja, że urlencode tutaj to nieprawda, ale faktem jest, że przed pobraniem trzeba zakodowac polskie znaki, bo z nimi nie pójdzie i jest http 400.

smiady
rawurlencode powinno sobie poradzić, ale z tym linkiem dziwne rzeczy się dzieją, pół znaków tak zakodowane, pół inaczej. Nie wiem jak sobie z tym poradzić.

Ten post edytował kreatiff 14.09.2014, 09:59:55
Go to the top of the page
+Quote Post

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: 18.04.2024 - 08:40