|
07. 03. 2013. | #1 |
član
Certified
Datum učlanjenja: 13.11.2006
Poruke: 80
Hvala: 13
145 "Hvala" u 11 poruka
|
Php proxy za json
Pozdrav drustvo, dugogodisnji "lurker" ovde
Potrebna mi je pomoc oko php-a. Pravim aplikaciju koja koristi 500px.com API. API vraca json objekat, pokusavam iz js-a da koristim njihov api. Pokusao sam sa par php proxy skripti, ali nisam uspeo da dobijem json. 500px ima svoju javascript biblioteku https://github.com/500px/500px-js-sdk Problem sa tom bibliotekom je taj sto je potrebno da kada registrujem aplikaciju kod njih, moram i registrovati odredjen html fajl, koji prima callback od njihovog servisa. Parce koda na kojem ja radim (jquery plugin) je potrebno da radi bilo gde, znaci moram da zaobidjem tu registraciju html fajla. Takodje API-ju se pristupa preko https-a sto je pretpostavljam pravilo problem sa skriptama koje sam do sada probao. Primer API poziva (copy/paste u browser) Kôd:
https://api.500px.com/v1/users/show?consumer_key=PBhgzTKey5kF1XX3rl7idgYyRScBHAvqtbUOMAcd&username=zlatiborac Generalno ja sam resio problem tako sto koristim Yahoo yql ali iz nekog razloga 40% upita mi vraca "connect failure" tako da zelim da radim preko proxy-a. Primer Yql query Svaka pomoc je dobrodosla |
07. 03. 2013. | #2 | |
expert
Grand Master
Datum učlanjenja: 11.04.2010
Poruke: 998
Hvala: 141
959 "Hvala" u 153 poruka
|
Definiši malo šta podrazumjevaš pod proxy. Postoji par načina.
Kôd:
<?php $url = 'https://api.500px.com/:request_uri'; $url = strtr($url, [':request_uri' => $_SERVER['REQUEST_URI'] . '?' . $_SERVER['QUERY_STRING']]); if (filter_var($url, FILTER_VALIDATE_URL) === FALSE) { die('Invalid URL'); } if (empty($_GET['callback'])) { $_GET['callback'] = '__500px'; } $json = file_get_contents($url); header('Content-Type: application/json'); echo strtr(':callback(:json);', [':callback' => $_GET['callback'], ':json' => $json]); http(s)://500px.example.com/v1/users/show?consumer_key=PBhgzTKey5kF1XX3rl7idgYyRScBHAvq tbUOMAcd&username=zlatiborac&callback=dpt Kao response, trebao bi dobiti: Citat:
Poslednja izmena od webarto : 07. 03. 2013. u 01:42. |
|
07. 03. 2013. | #3 |
član
Certified
Datum učlanjenja: 13.11.2006
Poruke: 80
Hvala: 13
145 "Hvala" u 11 poruka
|
Pre svega pokusavam da zaobidjem "same origin policy"
Sto se tice tvog primera, malo me zbunjuje to sto moram da pravim poddomen. Ja sam to zamisljao tako sto jednostavno preko jquery-a prosledim link proxy skripti i dobijem nazad json. Kôd:
jQuery.getJson('proxy.php?url=500PX_API_LINK'); PHP kôd:
Takodje tvoj primer mi prijavljuje gresku na liniji //echo strtr(.....) "Parse error: syntax error, unexpected '[' |
07. 03. 2013. | #4 |
expert
Grand Master
Datum učlanjenja: 11.04.2010
Poruke: 998
Hvala: 141
959 "Hvala" u 153 poruka
|
Kôd:
$url = $_GET['link']; $json = file_get_contents($url); header('Content-Type: application/json'); echo $json; Mislio sam da napraviš API proxy, tako da možeš koristiti taj plugin sa bilo koje domene, i da komuniciraš preko JSONP (JSON + callback). |
"Hvala" webarto za poruku: |
07. 03. 2013. | #5 |
profesionalac
Professional
Datum učlanjenja: 08.11.2010
Poruke: 211
Hvala: 68
78 "Hvala" u 32 poruka
|
Odgovor mora da je u JSONP formatu.
Tj. odgovor sa servera treba da je npr.: PHP kôd:
Kôd:
$.ajax({ url:'www.domen.com/url/jsonp.php?param1=value1', dataType: "jsonp", // Ovde mu kazes da ocekujes odgovor JSONP jsonpCallback: 'jsonp_callback', // Ovde definises koji je callback success: function(data) { alert(JSON.stringify(data)); } }); note: Ja radim echo iz php-a bez ikakvog podesavanja hedera ili drugih stvari i radi lepo. Poslednja izmena od tasmaniski : 07. 03. 2013. u 16:01. |
07. 03. 2013. | #6 |
član
Certified
Datum učlanjenja: 13.11.2006
Poruke: 80
Hvala: 13
145 "Hvala" u 11 poruka
|
Radi. Problem resen.
Kôd:
$.getJSON('proxy.php?link='+encodeURIComponent('https://api.500px.com/v1/users/show?consumer_key=PBhgzTKey5kF1XX3rl7idgYyRScBHAvqtbUOMAcd&username=zlatiborac')); https://github.com/cowboy/php-simple-proxy ali cini mi se da je taj kod neispravan. @webarto, Kada kazes za bilo koje domene, mislis da taj plugin uvek komunicira sa mojim poddomenom gde god se nalazio? Recimo Flickr API vraca jsonP , tako da nema ovih problema, moze jednostavno da se poziva a jQuery.getJson automatski dodaje callback. |
07. 03. 2013. | #7 |
profesionalac
Professional
Datum učlanjenja: 08.11.2010
Poruke: 211
Hvala: 68
78 "Hvala" u 32 poruka
|
|
"Hvala" tasmaniski za poruku: |
07. 03. 2013. | #8 |
član
Certified
Datum učlanjenja: 13.11.2006
Poruke: 80
Hvala: 13
145 "Hvala" u 11 poruka
|
Hmm, sada mi se pojavio cudan problem.
Kada trazim korisnika koji ne postoji, dobijam (failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found) Mada bi api trebao da mi vrati json objekat. User found User not found Medjutim preko proxy-ja dobijam nazad "failed to open stream" |
07. 03. 2013. | #9 |
član
Certified
Datum učlanjenja: 13.11.2006
Poruke: 80
Hvala: 13
145 "Hvala" u 11 poruka
|
Resio sam problem tako sto sam koristio cUrl
PHP kôd:
|
07. 03. 2013. | #10 |
expert
Grand Master
Datum učlanjenja: 11.04.2010
Poruke: 998
Hvala: 141
959 "Hvala" u 153 poruka
|
Stavi i ovo... curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); za svaki slučaj.
|
"Hvala" webarto za poruku: |
|
|