jQ、Yahoo API和HTML 5开发天气预报应用

在线演示  本地下载

创新互联公司-专业网站定制、快速模板网站建设、高性价比凤阳网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式凤阳网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖凤阳地区。费用合理售后完善,十余年实体公司更值得信赖。

今天我们介绍来自tutorialzine的一个HTML5/jQuery/Yahoo API的开发教程,在这篇文章中我们将介绍如何使用HTML5的Geolocation,jQuery和YahooAPI来开发一个天气预报web应用。 如果你不熟悉HTML5的Geolocation(地理位置服务),请参考我们的HTML5教程: HTML5 Geolocation。

首先你需要得到Yahoo API的API key,你可以通过如下地址取得对应的API key:https://developer.apps.yahoo.com/dashboard/createKey.html

以上创建过程中会要求你输入相关应用地址等信息。创建成功后,你可以得到APPID。

主要思路

在这个教程中,我们主要思路如下:

使用Geolocation取得用户的地理位置信息

然后,使用yahoo的 PlaceFinder API,来通过经纬度来找到具体地点,例如,城市或者国家。其中包括了woeid,这个用来在天气预报应用中找到国家。

最后,我们将调用yahoo的Weather API来取得天气。

web应用代码

#p#

HTML

 
 
 
 
  1.  
  2.  
  3.      
  4.          
  5.         Weather Forecast with jQuery & Yahoo APIs 
  6.           
  7.          
  8.          
  9.           
  10.          
  11.          
  12.           
  13.          
  14.      
  15.       
  16.      
  17.  
  18.         
     
  19.             

    Weather Forecast

     
  20.          
  21.           
  22.          
  23.  
  24.              
  25.                  
  26.              
  27.               
  28.             Previous 
  29.             Next 
  30.               
  31.         
 
  •           
  •         

     
  •           
  •         
  •  
  •           
  •         
     
  •             

    Tutorial: Weather Forecast with jQuery & Yahoo APIs

     
  •             Head on to Tutorialzine to download this example 
  •          
  •           
  •          
  •          
  •          
  •           
  •      
  •  
  • #p#

    Javascript

     
     
     
     
    1. $(function(){  
    2.       
    3.     /* Configuration */ 
    4.       
    5.     var APPID = 'fa2pT26k';        // Your Yahoo APP id  
    6.     var DEG = 'c';        // c for celsius, f for fahrenheit  
    7.       
    8.     // Mapping the weather codes returned by Yahoo's API  
    9.     // to the correct icons in the img/icons folder  
    10.       
    11.     var weatherIconMap = [  
    12.         'storm', 'storm', 'storm', 'lightning', 'lightning', 'snow', 'hail', 'hail',  
    13.         'drizzle', 'drizzle', 'rain', 'rain', 'rain', 'snow', 'snow', 'snow', 'snow',  
    14.         'hail', 'hail', 'fog', 'fog', 'fog', 'fog', 'wind', 'wind', 'snowflake',  
    15.         'cloud', 'cloud_moon', 'cloud_sun', 'cloud_moon', 'cloud_sun', 'moon', 'sun',  
    16.         'moon', 'sun', 'hail', 'sun', 'lightning', 'lightning', 'lightning', 'rain',  
    17.         'snowflake', 'snowflake', 'snowflake', 'cloud', 'rain', 'snow', 'lightning' 
    18.     ];  
    19.       
    20.     var weatherDiv = $('#weather'),  
    21.         scroller = $('#scroller'),  
    22.         location = $('p.location');  
    23.       
    24.     // Does this browser support geolocation?  
    25.     if (navigator.geolocation) {  
    26.         navigator.geolocation.getCurrentPosition(locationSuccess, locationError);  
    27.     }  
    28.     else{  
    29.         showError("Your browser does not support Geolocation!");  
    30.     }  
    31.       
    32.     // Get user's location, and use Yahoo's PlaceFinder API  
    33.     // to get the location name, woeid and weather forecast  
    34.       
    35.     function locationSuccess(position) {  
    36.         var lat = position.coords.latitude;  
    37.         var lon = position.coords.longitude;  
    38.  
    39.         // Yahoo's PlaceFinder API http://developer.yahoo.com/geo/placefinder/  
    40.         // We are passing the R gflag for reverse geocoding (coordinates to place name)  
    41.         var geoAPI = 'http://where.yahooapis.com/geocode?location='+lat+','+lon+'&flags=J&gflags=R&appid='+APPID;  
    42.           
    43.         // Forming the query for Yahoo's weather forecasting API with YQL  
    44.         // http://developer.yahoo.com/weather/  
    45.           
    46.         var wsql = 'select * from weather.forecast where woeid=WID and u="'+DEG+'"',  
    47.             weatherYQL = 'http://query.yahooapis.com/v1/public/yql?q='+encodeURIComponent(wsql)+'&format=json&callback=?',  
    48.             code, city, results, woeid;  
    49.           
    50.         if (window.console && window.console.info){  
    51.             console.info("Coordinates: %f %f", lat, lon);  
    52.         }  
    53.           
    54.         // Issue a cross-domain AJAX request (CORS) to the GEO service.  
    55.         // Not supported in Opera and IE.  
    56.         $.getJSON(geoAPI, function(r){  
    57.              
    58.             if(r.ResultSet.Found == 1){  
    59.                   
    60.                 results = r.ResultSet.Results;  
    61.                 city = results[0].city;  
    62.                 code = results[0].statecode || results[0].countrycode;  
    63.           
    64.                 // This is the city identifier for the weather API  
    65.                 woeid = results[0].woeid;  
    66.       
    67.                 // Make a weather API request:  
    68.                 $.getJSON(weatherYQL.replace('WID',woeid), function(r){  
    69.                       
    70.                     if(r.query && r.query.count == 1){  
    71.                           
    72.                         // Create the weather items in the #scroller UL  
    73.                           
    74.                         var item = r.query.results.channel.item.condition;  
    75.                           
    76.                         if(!item){  
    77.                             showError("We can't find weather information about your city!");  
    78.                             if (window.console && window.console.info){  
    79.                                 console.info("%s, %s; woeid: %d", city, code, woeid);  
    80.                             }  
    81.                               
    82.                             return false;  
    83.                         }  
    84.                           
    85.                         addWeather(item.code, "Now", item.text + ' '+item.temp+'°'+DEG+'');  
    86.                           
    87.                         for (var i=0;i<2;i++){  
    88.                             item = r.query.results.channel.item.forecast[i];  
    89.                             addWeather(  
    90.                                 item.code,   
    91.                                 item.day +' '+item.date.replace('\d+$','')+'',  
    92.                                 item.text + ' '+item.low+'°'+DEG+' / '+item.high+'°'+DEG+'
    93.                             );  
    94.                         }  
    95.                           
    96.                         // Add the location to the page  
    97.                         location.html(city+', '+code+'');  
    98.                           
    99.                         weatherDiv.addClass('loaded');  
    100.                           
    101.                         // Set the slider to the first slide  
    102.                         showSlide(0);  
    103.                      
    104.                     }  
    105.                     else {  
    106.                         showError("Error retrieving weather data!");  
    107.                     }  
    108.                 });  
    109.           
    110.             }  
    111.               
    112.         }).error(function(){  
    113.             showError("Your browser does not support CORS requests!");  
    114.         });  
    115.          
    116.     }  
    117.       
    118.     function addWeather(code, day, condition){  
    119.           
    120.         var markup = '
    121. '+  
    122.             ''+  
    123.             ' '+ day +'

       '+ condition +  
    124.             '

    125. ';  
    126.           
    127.         scroller.append(markup);  
    128.     }  
    129.       
    130.     /* Handling the previous / next arrows */ 
    131.       
    132.     var currentSlide = 0;  
    133.     weatherDiv.find('a.previous').click(function(e){  
    134.         e.preventDefault();  
    135.         showSlide(currentSlide-1);  
    136.     });  
    137.       
    138.     weatherDiv.find('a.next').click(function(e){  
    139.         e.preventDefault();  
    140.         showSlide(currentSlide+1);  
    141.     });  
    142.       
    143.       
    144.     function showSlide(i){  
    145.         var items = scroller.find('li');  
    146.           
    147.         if (i >= items.length || i < 0 || scroller.is(':animated')){  
    148.             return false;  
    149.         }  
    150.           
    151.         weatherDiv.removeClass('first last');  
    152.           
    153.         if(i == 0){  
    154.             weatherDiv.addClass('first');  
    155.         }  
    156.         else if (i == items.length-1){  
    157.             weatherDiv.addClass('last');  
    158.         }  
    159.           
    160.         scroller.animate({left:(-i*100)+'%'}, function(){  
    161.             currentSlide = i;  
    162.         });  
    163.     }  
    164.       
    165.     /* Error handling functions */ 
    166.       
    167.     function locationError(error){  
    168.         switch(error.code) {  
    169.             case error.TIMEOUT:  
    170.                 showError("A timeout occured! Please try again!");  
    171.                 break;  
    172.             case error.POSITION_UNAVAILABLE:  
    173.                 showError('We can\'t detect your location. Sorry!');  
    174.                 break;  
    175.             case error.PERMISSION_DENIED:  
    176.                 showError('Please allow geolocation access for this to work.');  
    177.                 break;  
    178.             case error.UNKNOWN_ERROR:  
    179.                 showError('An unknown error occured!');  
    180.                 break;  
    181.         }  
    182.           
    183.     }  
    184.       
    185.     function showError(msg){  
    186.         weatherDiv.addClass('error').html(msg);  
    187.     }  
    188.  
    189. }); 

    搞定!具体演示请参考在线Demo,希望大家喜欢这个web应用!

    本文标题:jQ、Yahoo API和HTML 5开发天气预报应用
    文章URL:http://www.shufengxianlan.com/qtweb/news25/222225.html

    网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

    广告

    声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

    猜你还喜欢下面的内容

    Google知识

    分类信息网