2016-08-07 19 views
1

私は天気APIにフラッシュを介してアクセスしようとしています。アクセストークンと引き換えにAPIから値を取得する最後のステップで立ち往生してください。承認ヘッダーを通過する必要があり、Flashは承認ヘッダーを送信する方法がありません。つまり、セキュリティ上の理由から許可されません。FlashとOauth 2.0を使用してYahoo Weather APIにアクセス

参考: https://developer.yahoo.com/oauth2/guide/apirequests/

それは言う:

は、APIリクエストを作成、APIリクエストを作成するには¶Authorizationヘッダ内 アクセストークンが含まれています。 APIリクエストはHTTPS経由で安全に にする必要があります。ヘッダ内容は、ベアラ の後にアクセストークンが続く単語で構成されます。

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; 

?> 
を無記名[トークンここにあなたのアクセスを置く]

ここでは、私が使用していたコードです:サンプルリクエストヘッダ¶

https://social.yahooapis.com/v1/user/abcdef123/profile?format=json 認証をGET

答えて

0

詳細については、https://developer.yahoo.com/weather/#get-started=

以下は、Oauthトークンを使用せずにYahoo Weatherデータを取得するためのAS3コードの例です。

ここでは、SWFがHTTPS以外のWebロケーションから実行されている場合にのみ、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

あなたはトークンを関与させたい**具体的な理由はありますか? Yahoo自身が開発者アカウントやトークンやプロキシなどのような追加機能を必要とせずに気象要求を作成するための上記のシステムを作成したので... PS:私の示したコードでは、結果として 'getYahooWeather(" 2444293 ");と言うだけで十分です。もしそれをxmlに入れたいなら、 '(" 2444293 "、" xml ");'として指定するか、** else **文の 'fmt'を指定文字列が' null'指定された)... –

+0

トークンは実際にはあまりにも一般的です。たとえば、yahooのflickr APIを使用して、Flashで正常に動作します。また、twitter apiでうまくいく。だから、天気予報で動作させる方法は何か不思議そうでした。 –

関連する問題