2016-08-07 3 views
1

플래시를 통해 날씨 API에 액세스하려고합니다. 마지막 단계에서 액세스 토큰 대신 API에서 값을 가져 오는 중입니다. 문제는 액세스 토큰이 권한 헤더를 통과해야하며, Flash는 권한 헤더를 보낼 방법이 없습니다. 즉, 보안상의 이유로 허용하지 않습니다.이 문제에 대한 해결책은 무엇입니까?플래시 및 Oauth 2.0을 통해 Yahoo Weather API에 액세스

참조 : https://developer.yahoo.com/oauth2/guide/apirequests/

그것은 말한다 : API 요청은 API 요청을하려면 ¶ 만들기

는 인증 헤더에 액세스 토큰 을 포함한다. API 요청은 HTTPS를 통해 안전하게 으로 만들어야합니다. 헤더 내용은 Bearer 다음에 액세스 토큰이라는 단어로 구성됩니다. 샘플 요청 헤더 ¶

https://social.yahooapis.com/v1/user/abcdef123/profile?format=json 인증을 GET :

var url = "http://weather.yahooapis.com/forecastrss?w=2444293&u=f" 
var access_token = < access token here > 
var encoder: Base64Encoder = new Base64Encoder(); 
encoder.insertNewLines = false; 
encoder.encode(access_token); 
var urlRequest: URLRequest = new URLRequest("./proxyForYahoo.php"); 

var urlLoader: URLLoader = new URLLoader(); 
urlLoader.addEventListener(Event.COMPLETE, onComplete); 
urlLoader.addEventListener(HTTPStatusEvent.HTTP_STATUS, onHTTPStatus); 
urlLoader.addEventListener(IOErrorEvent.IO_ERROR, onIOError); 
urlLoader.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onSecurityError); 
urlRequest.method = URLRequestMethod.GET; 
urlRequest.contentType = "application/json"; 

urlRequest.requestHeaders = new Array(
    new URLRequestHeader('Authorization', 'Bearer ' + encoder.toString()), 
    new URLRequestHeader('Accept', 'application/json'), 
    new URLRequestHeader('Content-Type', 'application/json') 

); 
var urlVars: URLVariables = new URLVariables(); 
urlVars.data = url; 
urlRequest.data = urlVars; 
urlLoader.load(urlRequest); 


function onComplete(e: Event): void { 
    trace("completed---"); 
    trace(e.target.data); 
} 
function onHTTPStatus(e: Event): void { 
    trace("onHTTPStatus"); 
    trace(e.target.data); 
} 
function onIOError(e: Event): void { 
    trace("onIOError"); 

} 
function onSecurityError(e: Event): void { 
    trace("onSecurityError"); 

} 

야후 프록시 :

<?php 

$url = $_REQUEST['data'] ; 

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 

curl_setopt ($ch, CURLOPT_URL, $url); 
curl_setopt ($ch, CURLOPT_HEADER, 0); 

ob_start(); 

curl_exec ($ch); 
curl_close ($ch); 
$string = ob_get_contents(); 

$content = ob_end_clean(); 

echo $string; 

?> 
무기명 여기

내가 사용하고있는 코드입니다 [토큰 여기에 대한 액세스를 배치]

답변

0

자세한 내용은 https://developer.yahoo.com/weather/#get-started=

다음은 Oauth 토큰을 사용하지 않고 Yahoo Weather 데이터를 가져 오는 예제 AS3 코드입니다.

SWF가 HTTPS가 아닌 웹 위치에서 실행되는 경우 PHP 프록시 만 있으면됩니다. 이러한 경우, 그냥 '의 뒷면의 어떤 요청 로더에 str_YahooResponse 에코 getYahooWeather 기능 ..

시험의 PHP 버전을 쓰기 : 간단하게 str_Woeid = "2444293"; 및 테스트 컴파일을 업데이트합니다. myJSON.parse(str_YahooResponse); :

var str_Woeid : String = ""; 
var str_YahooRequest : String = ""; 
var str_YahooResponse : String = ""; 

var Weather_Loader:URLLoader = new URLLoader(); 

//# get Yahoo response into : str_YahooResponse : via function 
str_Woeid = "2444293"; //# the WOEID of Weather request 
getYahooWeather(str_Woeid, "json"); //# choose : "xml" OR "json" 

function getYahooWeather(inputStr : String, fmt : String = null ) : void 
{ 
    if (fmt == "xml") { fmt = "format=xml" } 
    else { fmt = "format=json" } 

    str_YahooRequest = ("https://query.yahooapis.com/v1/public/yql?" 
         + fmt //either: =json OR =xml 
         + "&q=SELECT%20*%20FROM%20weather.forecast%20WHERE%20u=%27" 
         + "f" //temperature fomat : f = farenheit, c = celsius 
         + "%27%20AND%20woeid%20=%20%27" 
         + inputStr //the WOEID 
         + "%27"); 

    Weather_Loader.addEventListener(Event.COMPLETE, onLoaded); 
    Weather_Loader.load(new URLRequest(str_YahooRequest)); 
} 

function onLoaded(evt:Event) : void 
{ 
    //# put weather data to string (then parse as JSON or XML) 
    str_YahooResponse = evt.target.data; 
    trace("Yahoo Weather Data ::::::::: " + str_YahooResponse); 
} 

이제 당신은 예를 들어 ... 관련 파서
를 업데이트 된 문자열 str_YahooResponse를 사용할 수 있습니다.

+0

답변 해 주셔서 감사합니다. 누군가가 토큰에 대한 해결책으로 답변하지 않는 한 지금은 해결 된 것으로 표시했습니다. :) –

+0

토큰을 포함하고 싶은 ** 특정 ** 이유가 있습니까? 야후는 개발자 계정이나 토큰 또는 프록시 등의 추가 기능 없이도 기상 요청을하기 위해 위의 시스템을 만들었 기 때문에 간단히 말해서 작동합니다. 추신 : 내 표시된 코드로'getYahooWeather ("2444293");라고 말하면 충분합니다. xml에 원한다면'("2444293", "xml");'으로 지정하거나 ** string **이 null 인 경우 ** else ** 문에서'fmt'를 xml로 기본 설정합니다 (예 : not 지정) ... –

+0

토큰은 실제로 너무 일반적입니다. 예를 들어 yahoo의 flickr API로 플래시가 정상적으로 작동합니다. 트위터 API에도 좋습니다. 날씨 API로 작동하게 만드는 방법이 궁금합니다. –