Прогноз погоды из WOEID (с использованием YQL или rss) в javascript? - PullRequest
2 голосов
/ 23 февраля 2012

Есть ли способ получить прогноз погоды от woeid в javascript?

Я пытался использовать RSS-канал Yahoo, но не смог заставить его работать. вот мой код

    var url = "http://weather.yahooapis.com/forecastrss?w=" + encodeURIComponent('WOEID here');

    $.ajax({
        url: url,
        dataType: 'jsonp',
        jsonpCallback: function(data) { console.log(data); },
        success: function(data) { alert("success"); }
    });

Есть предложения?

Ответы [ 3 ]

2 голосов
/ 28 февраля 2012

Вот самый простой способ получить необходимую информацию с помощью jQuery и YQL:

var woeid = "26355493";

var $url = "http://query.yahooapis.com/v1/public/yql?callback=?";

$.getJSON($url, {
    q: "select * from xml where url=" +
       "\"http://weather.yahooapis.com/forecastrss?w=" + woeid + "\"",
    format: "json"
  }, function (data) {
    console.log(data.query.results.rss.channel);
  }
);​

Запрос в консоли YQL ...

Код JavaScript в jsfiddle ...

1 голос
/ 23 февраля 2012

Очевидно, что Weather API возвращает свои результаты в формате RSS, в то время как ваша функция ожидает их в формате jsonp.Рассмотрите возможность использования Yahoo!Трубы для получения прогноза погоды RSS для вас, обработки и возврата в формате jsonp.

Вот канал, который делает нечто подобное:

http://pipes.yahoo.com/pipes/pipe.info?_id=4d160cd8ed9d6d78164213928a51507d

0 голосов
/ 23 февраля 2012

Как и предполагал дракон, я создал Yahoo Pipe - вот мой полный код;URL в коде - это созданный мной канал Yahoo.

$(function(){
   var url = "http://pipes.yahoo.com/pipes/pipe.run?_id=e33143abd20b19a0173b3a4b479fa4d3&_render=json&w=YOURWOEIDHERE";

   function createRequest() {
       try { return new XMLHttpRequest(); } catch(e) {}
       try { return new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {}
       return null;
   }
   var request = createRequest();
   request.open("GET", url, true);
   request.onreadystatechange = callback;
   request.send(null);

   function callback() {
       if(request.readyState != 4) { return }
       Obj = $.parseJSON(request.responseText);
       console.log(Obj);
   }
});

ссылки:
Канал Yahoo: http://pipes.yahoo.com/pipes/pipe.info?_id=e33143abd20b19a0173b3a4b479fa4d3
jQuery 1.5 - недопустимая метка ошибки JSON

...