ctrl.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. app.controller("WeatherCtrl", ['$scope', 'yahooApi', 'geoApi', function($scope, yahooApi, geoApi) {
  2. $scope.userSearchText = '';
  3. $scope.search = {};
  4. $scope.forcast = {};
  5. $scope.place = {};
  6. $scope.data = {};
  7. // get place
  8. geoApi.then(function(res) {
  9. $scope.userSearchText = res.data.city+", "+res.data.country_code;
  10. $scope.getLocations();
  11. });
  12. // get locations
  13. $scope.getLocations = function () {
  14. var query = 'select * from geo.places where text="' + $scope.userSearchText + '"';
  15. yahooApi.query({'q':query,'format':'json'}, {}, function (response) {
  16. $scope.search = response;
  17. if(response.query.count === 1 && !response.query.results.channel){
  18. $scope.getWeather( response.query.results.place.woeid, response.query.results.place.name, response.query.results.place.country.content);
  19. }
  20. });
  21. };
  22. // get weather
  23. $scope.getWeather = function(woeid, city, country){
  24. $scope.place.city = city;
  25. $scope.place.country = country;
  26. var query = 'select item from weather.forecast where woeid=' + woeid;
  27. yahooApi.query({'q':query,'format':'json'}, {}, function (response) {
  28. response.query.results.channel.item.forecast.forEach(function(i, v) {
  29. i.icon = $scope.getCustomIcon(i.code);
  30. });
  31. response.query.results.channel.item.condition.icon = $scope.getCustomIcon(response.query.results.channel.item.condition.code);
  32. $scope.data = response;
  33. });
  34. };
  35. $scope.getCustomIcon = function (condition) {
  36. switch (condition) {
  37. case "0":
  38. case "1":
  39. case "2":
  40. case "24":
  41. case "25":
  42. return "wind";
  43. case "5":
  44. case "6":
  45. case "7":
  46. case "18":
  47. return "sleet";
  48. case "3":
  49. case "4":
  50. case "8":
  51. case "9":
  52. case "10":
  53. case "11":
  54. case "12":
  55. case "35":
  56. case "37":
  57. case "38":
  58. case "39":
  59. case "40":
  60. case "45":
  61. case "47":
  62. return "rain";
  63. case "13":
  64. case "14":
  65. case "15":
  66. case "16":
  67. case "17":
  68. case "41":
  69. case "42":
  70. case "43":
  71. case "46":
  72. return "snow";
  73. case "19":
  74. case "20":
  75. case "21":
  76. case "22":
  77. case "23":
  78. return "fog";
  79. case "26":
  80. case "27":
  81. case "28":
  82. case "44":
  83. return "cloudy";
  84. case "29":
  85. return "partly-cloudy-night";
  86. case "30":
  87. return "partly-cloudy-day";
  88. case "31":
  89. case "33":
  90. return "clear-night";
  91. case "32":
  92. case "34":
  93. case "36":
  94. return "clear-day";
  95. default:
  96. return "";
  97. }
  98. }
  99. }
  100. ]);
  101. app.factory('yahooApi', ['$resource', function($resource) {
  102. return $resource('http://query.yahooapis.com/v1/public/yql', {},
  103. {'query':
  104. {
  105. method: 'GET',
  106. isArray: false
  107. }
  108. }
  109. );
  110. }]);
  111. app.factory('geoApi', ['$http', function($http) {
  112. return $http.jsonp("http://muslimsalat.com/daily.json?callback=JSON_CALLBACK");
  113. }
  114. ]);
  115. function JSON_CALLBACK(){
  116. // Nothing
  117. }