Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem z pobraniem JSON
Forum PHP.pl > Forum > PHP
smiady
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ć ?
irekk
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));

kreatiff
Przepuść urla przez urlencode, a dopiero potem pobieraj.
irekk
Urla przepuszczasz przez urlencode jak go chcesz przekazać a nie wywołać.
smiady
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 % ?
kreatiff
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ć.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.