2011-02-22 9 views
10

나는이 URL의 반환 된 데이터를 얻고 싶습니다. PHP에서도이 작업을 수행 할 수 있습니까?PHP에서 JSONP 추출 결과

<?php 
    $yahooSS = "http://d.yimg.com/autoc.finance.yahoo.com/autoc?query=yahoo&callback=YAHOO.Finance.SymbolSuggest.ssCallback"; 

    $yss = fopen($yahooSS,"r"); 
    .... 

저는 이것이 자바 스크립트 콜백 함수를 반환한다고 생각하지만 시작하는 데는 단서가 없습니다.

다음은 반환 된 결과 집합의 예입니다.

YAHOO.Finance.SymbolSuggest.ssCallback({"ResultSet":{"Query":"yahoo","Result":[{"symbol":"YHOO","name": "Yahoo! Inc.","exch": "NMS","type": "S","exchDisp":"NASDAQ","typeDisp":"Equity"},{"symbol":"YAHOY.PK","name": "YAHOO JAPAN CORP","exch": "PNK","type": "S","exchDisp":"Pink Sheets","typeDisp":"Equity"},{"symbol":"ETD","name": "Citigroup Inc. ELKS On Yahoo","exch": "PCX","type": "S","typeDisp":"Equity"},{"symbol":"YOJ.BE","name": "YAHOO JAPAN","exch": "BER","type": "S","exchDisp":"Berlin","typeDisp":"Equity"},{"symbol":"YHO.SG","name": "YAHOO","exch": "STU","type": "S","exchDisp":"Stuttgart","typeDisp":"Equity"},{"symbol":"YAHOF.PK","name": "YAHOO JAPAN CORP","exch": "PNK","type": "S","exchDisp":"Pink Sheets","typeDisp":"Equity"},{"symbol":"YHO.HM","name": "YAHOO","exch": "HAM","type": "S","exchDisp":"Hamburg","typeDisp":"Equity"},{"symbol":"YOJ.DE","name": "YAHOO JAPAN","exch": "GER","type": "S","exchDisp":"XETRA","typeDisp":"Equity"},{"symbol":"YHO.DU","name": "YAHOO","exch": "DUS","type": "S","exchDisp":"Dusseldorf Stock Exchange","typeDisp":"Equity"},{"symbol":"YHOO.BA","name": "YAHOO INC.","exch": "BUE","type": "S","exchDisp":"Buenos Aires","typeDisp":"Equity"}]}}) 

모든 도움을 주시면 감사하겠습니다.

답변

38

오른쪽, JSON with padding. 함수 이름 (및 괄호)을 제거한 다음 json_decode으로 JSON을 구문 분석 할 수 있습니다.

나는 한 번 그하는 기능을 썼다 :

function jsonp_decode($jsonp, $assoc = false) { // PHP 5.3 adds depth as third parameter to json_decode 
    if($jsonp[0] !== '[' && $jsonp[0] !== '{') { // we have JSONP 
     $jsonp = substr($jsonp, strpos($jsonp, '(')); 
    } 
    return json_decode(trim($jsonp,'();'), $assoc); 
} 

사용법 :

$data = jsonp_decode($response); 

DEMO

-3

그냥 (배열로 결과를 변환하기 위해 PHP에서 json_decode을 사용할 수 있습니다 함수 호출과 paranthesis 제거)

2

먼저 시도해보십시오. 문제가 될 수 있습니다. callback 매개 변수를 생략하면됩니다.

callback이 정의되면이 웹 서비스는 JSONP를 산출하는 상당히 표준적인 동작을 갖습니다. 그렇지 않으면 일반 JSON. 그것을 시도 :

http://d.yimg.com/autoc.finance.yahoo.com/autoc?query=yahoo&region=us&lang=eng

반환 일반 JSON :

{"ResultSet":{"Query":"yahoo","Result":[{"symbol":"YHO.HM","name":"YAHOO","exch":"HAM","type":"S","exchDisp":"Hamburg","typeDisp":"Equity"},{"symbol":"YHOO","name":"Yahoo! Inc.","exch":"NAS","type":"S","exchDisp":"NASDAQ","typeDisp":"Equity"},{"symbol":"YAHOY","name":"Yahoo Japan Corporation","exch":"PNK","type":"S","exchDisp":"OTC Markets","typeDisp":"Equity"},{"symbol":"YHOO.MX","name":"Yahoo! Inc.","exch":"MEX","type":"S","exchDisp":"Mexico","typeDisp":"Equity"},{"symbol":"YAHOF","name":"Yahoo Japan Corporation","exch":"PNK","type":"S","exchDisp":"OTC Markets","typeDisp":"Equity"},{"symbol":"YHOO.BA","name":"Yahoo! Inc.","exch":"BUE","type":"S","exchDisp":"Buenos Aires","typeDisp":"Equity"},{"symbol":"YHO.F","name":"YAHOO","exch":"FRA","type":"S","exchDisp":"Frankfurt","typeDisp":"Equity"},{"symbol":"YHO.MU","name":"YAHOO","exch":"MUN","type":"S","exchDisp":"Munich","typeDisp":"Equity"},{"symbol":"YHO.DE","name":"Yahoo! Inc.","exch":"GER","type":"S","exchDisp":"XETRA","typeDisp":"Equity"},{"symbol":"YHOO.F","name":"YAHOO","exch":"FRA","type":"S","exchDisp":"Frankfurt","typeDisp":"Equity"}]}} 

http://d.yimg.com/autoc.finance.yahoo.com/autoc?query=yahoo&region=us&lang=eng&callback=YAHOO.Finance.SymbolSuggest.ssCallback

(함수 호출에 싸여 JSON)

반환 JSONP :

YAHOO.Finance.SymbolSuggest.ssCallback({"ResultSet":{"Query":"yahoo","Result":[{"symbol":"YHO.HM","name":"YAHOO","exch":"HAM","type":"S","exchDisp":"Hamburg","typeDisp":"Equity"},{"symbol":"YHOO","name":"Yahoo! Inc.","exch":"NAS","type":"S","exchDisp":"NASDAQ","typeDisp":"Equity"},{"symbol":"YAHOY","name":"Yahoo Japan Corporation","exch":"PNK","type":"S","exchDisp":"OTC Markets","typeDisp":"Equity"},{"symbol":"YHOO.MX","name":"Yahoo! Inc.","exch":"MEX","type":"S","exchDisp":"Mexico","typeDisp":"Equity"},{"symbol":"YAHOF","name":"Yahoo Japan Corporation","exch":"PNK","type":"S","exchDisp":"OTC Markets","typeDisp":"Equity"},{"symbol":"YHOO.BA","name":"Yahoo! Inc.","exch":"BUE","type":"S","exchDisp":"Buenos Aires","typeDisp":"Equity"},{"symbol":"YHO.F","name":"YAHOO","exch":"FRA","type":"S","exchDisp":"Frankfurt","typeDisp":"Equity"},{"symbol":"YHO.MU","name":"YAHOO","exch":"MUN","type":"S","exchDisp":"Munich","typeDisp":"Equity"},{"symbol":"YHO.DE","name":"Yahoo! Inc.","exch":"GER","type":"S","exchDisp":"XETRA","typeDisp":"Equity"},{"symbol":"YHOO.F","name":"YAHOO","exch":"FRA","type":"S","exchDisp":"Frankfurt","typeDisp":"Equity"}]}});