4

我想从http://blog.neosavvy.com/?feed=rss2之类的东西中提取博客提要,以便在不在同一个域中的 Angular 应用程序中使用。

我打算使用 ProxyPass,但是 ProxyPass 不能与 /?feed=rss2 一起使用。是否有一个重写规则可以用来避免 Javascript 在获取不在同一个 URL 中的内容时出现的跨域问题。

我使用 AngularJS 的服务来获取提要内容,就像任何其他服务一样。

这是我用来获取博客 rss 的代码:

$scope.getBlogPost = function() {
    $http({method:'GET', url:'http://blog.neosavvy.com/?feed=rss2'}).
        success(function (data, status, headers, config) {
            console.log("data returned");
        }).
        error(function (data, status, headers, config) {
            console.log("data not returned");
        });
}

这是我收到的错误-因此需要代理通行证或其他替代方法。

XMLHttpRequest 无法加载http://blog.neosavvy.com/?feed=rss2。Access-Control-Allow-Origin 不允许来源http://local.something.com 。

4

2 回答 2

7

您可以使用YQLGoogle Feed API之类的东西

我用后者做了一个例子,你可以在这里查看:http ://plnkr.co/edit/Plb1fz?p=preview

您将使用 Google Feed API 而不是使用该$http服务,您的控制器将如下所示

app.controller('ctrl', function($scope) {
  var feed = new google.feeds.Feed("http://blog.neosavvy.com/?feed=rss2");
  feed.load(function(result) {
    $scope.$apply(function(){
      $scope.entries = result.feed.entries;
    })
  });
});

请注意,由于范围从 Angular 外部发生变化,$apply因此需要调用 来通知 Angular。

一些注意事项,首先您需要将以下脚本添加到您的文档中

然后,有必要手动引导您的 Angular 应用程序,因为必须先加载 Google Feed API

google.load("feeds", "1");
google.setOnLoadCallback(function(){     
    angular.bootstrap(document.body, ['app']);
});

由于提要包含 html,因此您将ngSanitize模块声明为依赖项

var app = angular.module('app', ['ngSanitize']);

要在提要中显示条目,您可以使用ngRepeater迭代接收到的条目,当然还可以使用ng-bind-html指令清理 html。

<div ng-repeat='entry in entries'>
  <h1>{{entry.title}}</h1>
  <div ng-bind-html= "entry.content"></div>
</div>
于 2012-12-09T00:59:56.760 回答
0

有问题的 URL 是一个 RSS 提要。无需考虑跨站点脚本。RSS 是一种旨在从任何地方提取的 XML 格式。

几乎任何 JavaScript 框架都可以满足您的要求。维基百科上的“RSS”

于 2012-12-08T22:56:38.097 回答