是否可以在AngularJS中读取XML RSS?

时间:2017-09-08 13:05:58

标签: angularjs rss

据我所知,无法使用AngularJS从远程主机读取XML格式的RSS。 Cross Origin请求错误。以同样的方式无法从远程站点加载XML?

我正在尝试找到一种加载远程RSS的方法,实际上只是来自不同站点的XML。

例如,我有这个新闻RSS,我不会在我的AngularJS应用程序中显示。

http://rss.newsru.com/top/big/

使用$ http.get()会导致CORS错误 使用$ http.jsonp()导致JSON格式错误,因为源是XML,而不是json。

如果没有任何服务器端代码,是否有针对此问题的解决方法?

由于

1 个答案:

答案 0 :(得分:3)

过去,您可以使用Google Feed APIYQL来解析XML并返回要与$http.jsonp() method一起使用的JSON。但现在两者都不再支持。如果您不想更改后端,可以尝试使用rss2json服务作为suggested here(但没有人保证它会稳定运行,因此最好使用您自己的API)

在您的情况下,代码可能如下所示:



(function (angular) {
    'use strict';

    angular.module('RSSFeedApp', []);

    angular.module('RSSFeedApp').controller("FeedCtrl", ['FeedService', function (Feed) {
        var vm = this;
        Feed.parseFeed('http://rss.newsru.com/top/big/').then(function (res) {
            vm.items = res.items;
        });
    }]);

    angular.module('RSSFeedApp').factory('FeedService', ['$http', function ($http) {
        return {
            parseFeed: function (url) {
                return $http.jsonp('//api.rss2json.com/v1/api.json?callback=JSON_CALLBACK&rss_url=' + encodeURIComponent(url)).then(function (res) {
                    return res.data;
                });
            }
        }
    }]);
})(angular);

<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.4/angular.min.js"></script>
<div ng-app="RSSFeedApp" ng-controller="FeedCtrl as vm">
    <div class="row-fluid">
        <ul class="unstyled">
            <li ng-repeat="item in vm.items">                    
                <h5><a>{{item.title}}</a></h5>                                       
                <p class="text-left">{{item.description}}</p>                    
                <span class="small">{{item.pubDate}}</span>
            </li>                
        </ul>            
    </div>
</div>
&#13;
&#13;
&#13;