2

私は現在、oauth.net で利用可能な OAuthBase.cs ヘルパー クラスを使用して、OAuth を実装し、Yahoo! ファンタジーAPI。現在、ステップ 5 (アクセス トークン/アクセス シークレットを使用して API サービスを呼び出す) で行き詰まっています。

ステップ 4を正常に完了しましたが、実際のサービス コールを作成できないようです。 ドキュメントは限られています。どのパラメーターを使用する必要がありますか? 401 または 400 http エラーが発生します。次の方法で署名を生成しています。

url = new Uri("http://query.yahooapis.com/v1/public/yql?q=select * from fantasysports.teams.roster.stats where team_key='nba.l.52669.t.5' and week='5' and stats_type='week' and stats_week='5'&format=json");

signature = oauth.GenerateSignature(url, string.Empty, consumerKey, consumerSecret, accessToken, accessTokenSecret, "GET", time, string.Empty, nonce, OAuth.OAuthBase.SignatureTypes.HMACSHA1, out normalizedUrl, out normalizedRequestParameters);

using (var y = WebRequest.Create(string.Format("{0}?{1}&oauth_signature={2}", normalizedUrl, normalizedRequestParameters, signature)).GetResponse())
{
    ....
}

url作成しようとしている API 呼び出しはどこにあるのか、 consumerKey/ consumerSecretYahoo! にサインアップしたときに提供されたキーは何か、そしてaccessToken/ステップ 4 でaccessTokenSecret返された応答はrequest_auth何か。何が間違っているのでしょうか?

前もって感謝します

編集: 12/14 - OAuthBase に慣れていない人のために説明すると、これは本質的に署名を生成するライブラリです。 URL/パラメータの正規化; 2. consumerSecret '&' tokenSecret を HMACSHA1 キーとしてエンコードします。3. hmacsha1 キーのハッシュを計算する

4

1 に答える 1

5

OAuth(この場合はBOSS Geo API)を使用してYahooAPIにアクセスするための実用的なコードを次に示します。

    [Test]
    public void MakeCallToBossGeoApi()
    {
        string result;
        var uri = new Uri(@"http://yboss.yahooapis.com/geo/placefinder?country=SE&flags=J&locale=sv_SE&postal=41311");
        var o = new OAuthBase();
        string nonce = o.GenerateNonce();
        var timestamp = o.GenerateTimeStamp();

        string normalizedUrl;
        string normalizedParameters;
        string signature = HttpUtility.UrlEncode(
            o.GenerateSignature(uri,
                                "yourconsumerkeyhere",
                                "yourconsumersecrethere", null, null, "GET",
                                timestamp, nonce, out normalizedUrl,
                                out normalizedParameters));

        uri = new Uri(normalizedUrl +"?"+ normalizedParameters + "&oauth_signature=" + signature );

        using (var httpClient = new WebClient())
        {
            result = httpClient.DownloadString(uri.AbsoluteUri);
        }

        Console.WriteLine(result);
    }
于 2013-02-28T13:46:29.813 に答える