首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Yahoo Weather API by Lat and Lon

Yahoo Weather API by Lat and Lon
EN

Stack Overflow用户
提问于 2019-05-26 17:22:26
回答 2查看 99关注 0票数 0

我正在用Xamarin.Form编写一个天气预报应用程序。我正在使用Yahoo API。我可以通过城市名称参数来获取天气信息。但是,当我将代码更改为使用经度和纬度时,天气不会出现。

要下载天气,我使用页面中的示例:https://developer.yahoo.com/weather/documentation.html#oauth-csharp

我用以下方式处理它:

代码语言:javascript
复制
lSign = string.Format( 
                "format={0}&" +
                "lat={1}&" +
                "lon={2}&" +
                "oauth_consumer_key={3}&" +
                "oauth_nonce={4}&" +
                "oauth_signature_method={5}&" +
                "oauth_timestamp={6}&" +
                "oauth_version={7}&" +
                "u={8}",
                cFormat,
                szerokosc,
                dlugosc,
                cConsumerKey,
                lNonce,
                cOAuthSignMethod,
                lTimes,
                cOAuthVersion,
                jednostka.ToString().ToLower()

(...)

代码语言:javascript
复制
url = cURL + "?lat=" + szerokosc + "&lon=" + dlugosc + "&u=" + jednostka.ToString().ToLower() + "&format=" + cFormat;
EN

回答 2

Stack Overflow用户

发布于 2019-05-27 17:33:35

根据文档,lSign用于身份验证。不应对其进行更改,请从字符串中删除这些"lat={1}&" + "lon={2}&"

它说,请不要在没有重新排序的情况下简单地更改任何参数值。

位置信息应该包含在请求url中,并且授权信息被添加在头部中。

代码语言:javascript
复制
// Add Authorization
lClt.Headers.Add ( "Authorization", _get_auth () );
// The request URL
lURL = cURL + "?" + "lat=" + szerokosc + "&lon=" + dlugosc + "&format=" + cFormat;
票数 0
EN

Stack Overflow用户

发布于 2019-05-27 22:48:24

不幸的是,简单地从变量lSign中删除" lat = {1} & " + " lon = {2} & "并不能解决问题。

例如,要通过我使用的城市名称获取天气数据:

代码语言:javascript
复制
lSign = string.Format(
                "format={0}&" +
                "location={1}&" +
                "oauth_consumer_key={2}&" +
                "oauth_nonce={3}&" +
                "oauth_signature_method={4}&" +
                "oauth_timestamp={5}&" +
                "oauth_version={6}&" +
                "u={7}",
                cFormat,
                miasto,
                cConsumerKey,
                lNonce,
                cOAuthSignMethod,
                lTimes,
                cOAuthVersion,
                jednostka.ToString().ToLower()

代码语言:javascript
复制
url = cURL + "?location=" + Uri.EscapeDataString(miasto) + "&u=" + jednostka.ToString().ToLower() + "&format=" + cFormat;

代码语言:javascript
复制
string headerString = _get_auth();

                    WebClient webClient = new WebClient();
                    webClient.Headers[HttpRequestHeader.ContentType] = "application/" + cFormat;
                    webClient.Headers[HttpRequestHeader.Authorization] = headerString;
                    webClient.Headers.Add("X-Yahoo-App-Id", cAppID);
                    byte[] reponse = webClient.DownloadData(url);
                    string lOut = Encoding.ASCII.GetString(reponse);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56312232

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档