Как вы получаете данные XML из RSS-каналов, начинающихся с «feed: //» с использованием ajax? - PullRequest
0 голосов
/ 04 февраля 2019

Я нахожусь внутри NW.JS, и мне нужно иметь возможность получать RSS-каналы, но в настоящее время я могу получать данные только из некоторых XML-каналов, но не все.Я думаю, что моя проблема может быть CORS.Я попытался «установить заголовки» в моем ajax, но браузер nw.js отказывается их устанавливать.

Я уже пробовал ajax, как это ...

var cleanURL = "http://feeds.bbci.co.uk/news/uk/rss.xml"
$(document).ready(function() {
//feed to parse
var feed = cleanURL;

$.ajax(feed, {
    accepts:{
        xml:"application/rss+xml"
    },
    dataType:"xml",
    success:function(data) {
        //Credit: http://stackoverflow.com/questions/10943544/how-to-parse-an-rss-feed-using-javascript

        $(data).find("item").each(function () { // or "item" or whatever suits your feed
            var el = $(this);
            console.log("------------------------");
            console.log("title      : " + el.find("title").text());
            console.log("link       : " + el.find("link").text());
            console.log("description: " + el.find("description").text());
            });
        }   
    });

});

, и это работает длятакие сайты, как http://feeds.bbci.co.uk/news/uk/rss.xml, но когда я использую такой сайт, как feed: //feeds.skynews.com/feeds/rss/uk.xml, я получаю :: FAILED_TO_LOAD_RESOURCE .. даже если я удаляю «feed: //».

Я попытался установить заголовки в ajax

headers: {"Origin": "*"}

, но я не уверен, как это работает.

Это проблема CORS?Если это то, как я могу преодолеть это в NW.JS

Я также пробовал fetch () с теми же результатами, сервер отказывается отправлять мне данные.

Я хотел бы иметь возможность извлекать любые данные XML из любого канала RSS без необходимости использовать API, такие как rss2json и т. Д., Чтобы сделать это.

1 Ответ

0 голосов
/ 04 февраля 2019

Получается, что подмена пользовательского агента в Chrome (даже если NW.JS построен на Chrome!) Заставляет его работать.Я использовал «Запрос», чтобы сделать это.

var request = require('request');
    var options = {
      url: cleanURL,
      headers: {
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36'
      }
    };
    function callback(error, response, body) {
      if (!error && response.statusCode == 200)     {
        console.log(response.statusCode);
        console.log(body);
      }
    }
    request(options, callback);
...