雅虎天气API从外部函数传递纬度和经度

时间:2019-04-10 17:32:24

标签: javascript yahoo weather

我有一个可以显示当前和预测信息的Web应用程序。但是,到目前为止,所有这些都是将纬度和经度硬编码到脚本中的,但是我想动态地做到这一点。换句话说,我希望该预测适用于任何人,无论他们身在何处,都适合他们的位置。

因此,要获取本地纬度和较长时间,我可以使用带有地理位置api的函数,并且效果很好。但是我在将其输入Yahoo weather函数时遇到了问题,因为可能为API调用获取数据的时间太晚了。

他们的页面上显示的基本javascript是(并且让我再说一遍,我一切都很好,只是不是动态地进行):

 var url = 'https://weather-ydn-yql.media.yahoo.com/forecastrss';
 var method = 'GET';
 var app_id = 'your-app-id';
 var consumer_key = 'your-consumer-key';
 var consumer_secret = 'your-consumer-secret';
 var concat = '&';

 // This is the object that will be changed, as shown below
 var query = {'location': 'sunnyvale,ca', 'format': 'json'};
 //////

 var oauth = {
'oauth_consumer_key': consumer_key,
'oauth_nonce': Math.random().toString(36).substring(2),
'oauth_signature_method': 'HMAC-SHA1',
'oauth_timestamp': parseInt(new Date().getTime() / 1000).toString(),
'oauth_version': '1.0'
 };

 var merged = {}; 
 $.extend(merged, query, oauth);
 var merged_arr = Object.keys(merged).sort().map(function(k) {
  return [k + '=' + encodeURIComponent(merged[k])];
 });
 var signature_base_str = method
 + concat + encodeURIComponent(url)
 + concat + encodeURIComponent(merged_arr.join(concat));

 var composite_key = encodeURIComponent(consumer_secret) + concat;
 var hash = CryptoJS.HmacSHA1(signature_base_str, composite_key);
  var signature = hash.toString(CryptoJS.enc.Base64);

 oauth['oauth_signature'] = signature;
 var auth_header = 'OAuth ' + Object.keys(oauth).map(function(k) {
 return [k + '="' + oauth[k] + '"'];
  }).join(',');

  $.ajax({
   url: url + '?' + $.param(query),
   headers: {
    'Authorization': auth_header,
    'X-Yahoo-App-Id': app_id 
   },
 method: 'GET',
  success: function(data){
  console.log(data);
  }
 });

我的javascript差不多,页面顶部有:

   var lat = "";
   var long = "";

 window.onload = function(){
navigator.geolocation.getCurrentPosition(success, error);

function success(pos) {
     lat = pos.coords.latitude;
     long = pos.coords.longitude;
 }
function error() {
    console.log('There was an error');
 }
 };

 console.log(lat + " : " + long); 
 // This just shows ":", so the  globals are not updating in time

...而不是查询对象中的“位置”,我有:

 var query = {
"lat": lat,
"lon": long,
"u": "c",
"format": "json"
 };

因此,由于查询对象是在任何天气功能之外构建的,因此在需要此信息之前,我该使用哪种方法来更新我的全局数据(或形成整个查询对象)?

注意:在任何人决定点击“之前都被要求!”之前按钮,但没有。不适用于这种情况。

0 个答案:

没有答案