index.js 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. function get() {
  2. let result = new Promise((resolve, reject) => {
  3. request = new XMLHttpRequest();
  4. request.open('GET', 'https://raw.githubusercontent.com/David-Haim/CountriesToCitiesJSON/master/countriesToCities.json', true);
  5. request.onreadystatechange = function(){
  6. if (request.readyState != 4){
  7. return;
  8. }
  9. if (request.status == 200){
  10. resolve(request);
  11. }
  12. else {
  13. reject(request);
  14. }
  15. }
  16. request.send();
  17. })
  18. return result;
  19. }
  20. get()
  21. .then(
  22. response => {
  23. var data = JSON.parse(response.responseText);
  24. for(key in data) {
  25. let option = document.createElement("option");
  26. option.innerText = key;
  27. country.appendChild(option);
  28. }
  29. country.onchange = function() {
  30. let currentKey = country.value;
  31. city.innerHTML = "";
  32. for(let i = 0; i < data[currentKey].length; i++) {
  33. let option = document.createElement("option");
  34. option.innerText = data[currentKey][i];
  35. city.appendChild(option);
  36. }
  37. city.onchange();
  38. }
  39. },
  40. error => {
  41. console.log("Rejected 1");
  42. }
  43. )
  44. city.onchange = function() {
  45. new Promise((resolve, reject) => {
  46. let currentCity = city.value;
  47. request = new XMLHttpRequest();
  48. request.open('GET', "https://query.yahooapis.com/v1/public/yql?" + 'q=' + encodeURIComponent("select * from weather.forecast where woeid in (select woeid from geo.places(1) where text='" + currentCity + "') and u='c'") + '&format=json', true);
  49. request.onreadystatechange = function() {
  50. if(request.readyState != 4) {
  51. return;
  52. }
  53. if(request.status == 200) {
  54. resolve(request);
  55. }
  56. else {
  57. reject(request);
  58. }
  59. }
  60. request.send();
  61. }).then(
  62. response => {
  63. let city = (this.value);
  64. let base_URL = 'https://query.yahooapis.com/v1/public/yql?q=';
  65. let yql_query = 'select%20*%20from%20weather.forecast%20where%20woeid%20in%20(select%20woeid%20from%20geo.' +
  66. 'places(1)%20where%20text%3D%22';
  67. let yql_query_final = base_URL + yql_query + city + "%22)&format=json&env=store%3A%2F%2Fdatatables." +
  68. "org%2Falltableswithkeys";
  69. $.get(yql_query_final, function (data) {
  70. let loc = data.query.results.channel.location.city;
  71. let country = data.query.results.channel.location.country;
  72. let temp = Math.round((data.query.results.channel.item.condition.temp - 32) / 1.8).toFixed(1);
  73. let wind = (data.query.results.channel.wind.speed*0.44704).toFixed (2);
  74. let presure = (data.query.results.channel.atmosphere.pressure/1.3378).toFixed(2);
  75. let humidity = data.query.results.channel.atmosphere.humidity;
  76. document.getElementById("location").innerHTML = loc + ', ' + country;
  77. document.getElementById("temp").innerHTML = temp + ' °C';
  78. document.getElementById("wind").innerHTML = wind + ' м/с';
  79. document.getElementById("bar").innerHTML = presure + ' мм';
  80. document.getElementById("humidity").innerHTML = humidity + ' %';
  81. })
  82. },
  83. error => {
  84. console.log("Rejected 2");
  85. }
  86. )
  87. };