跨域Rss Feed请求?

时间:2016-01-04 18:19:47

标签: javascript wordpress rss xmlhttprequest cors

好的,所以大约一个星期以来,我一直在做大量关于向服务器发出xmlhttprequests的研究,并且已经学到了很多关于CORS,ajax / jquery请求,google feed api,我仍然完全迷失了。

目标: 图片中有2个网站,我都可以访问,第一个是wordpress网站,有rss feed,另一个是我的本地网站运行xampp(很快就会成为已发布的网站) 。我正在尝试从wordpress站点获取rss feed并将其显示在我的localhost站点上。

问题: 我在控制台中遇到了臭名昭着的Access-Control-Allow-Origin错误,我知道我可以通过在网站的.htaccess文件中设置它来解决这个问题,但有些在线聚合器能够只读取并显示它我给他们链接。所以我真的不知道这些网站在做什么,我不是,以及实现这一目标的最佳方法是什么,而不会对这两个网站构成任何简单的安全威胁。

我非常希望不必使用任何第三方插件来执行此操作,我想通过我自己的代码聚合Feed,就像我在localhost网站上为rss feed所做的那样,但如果我必须,我会

更新

我在学习php方面取得了巨大的进步,最终得到了一些代码,可以让我从各种来源下载feed文件,并能够将它们存储在服务器上的缓存文件中。我所做的是在我的网站上的某些按钮后面设置一个AJAX请求,该按钮在rss提要之间切换。 AJAX请求将包含一些数据的JSON编码数组POST到我的php文件,然后通过cURL(从Github dev复制的http_get_contents,因为我不知道如何使用cURL)链接并将其存储在md5中编码缓存文件,然后它从数据中过滤我需要的内容并将其发送回前端。但是,我还有两个问题......(有趣的是如何工作,得到一个答案,最后还有两个问题)。

问题#1:我应该在哪里将缓存文件和php文件存储在服务器上?我听说你应该将它们存储在root下面,但我不知道如何以这种方式访问​​它们。

问题#2:当我通过浏览器查看网站的来源,当我点击向php文件发送ajax请求的按钮时,php文件可见地下载到列表中源文件,但它也会在您单击按钮时下载越来越多的php文件副本,有没有办法防止这种情况?我可能必须实现另一种方法来实现这一点。

这是我的工作php:

//cURL http_get_contents declaration
<?php
function http_get_contents($url, $opts = array()) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_TIMEOUT, 5);
    curl_setopt($ch, CURLOPT_USERAGENT, "{$_SERVER['SERVER_NAME']}");
    curl_setopt($ch, CURLOPT_URL, $url);
    if (is_array($opts) && $opts) {
        foreach ($opts as $key => $val) {
            curl_setopt($ch, $key, $val);
        }
    }
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    if (false === ($retval = curl_exec($ch))) {
        die(curl_error($ch));
    } else {
        return $retval;
    }
}

//receive and decode $_POSTed array
$post = json_decode($_POST['jsonString'], true);
$url       = $post[0];
$xmn       = $post[1]; //starting item index number (i.e. to return 3 items from the feed, starting with the 5th one)
$xmx       = $xmn + 3; //max number (so three in total to be returned)
$cache     = '/tmp/' . md5($url) . '.html';
$cacheint  = 0;  //this is how I set if the feed will be downloaded from the site it is from, or if it will be read from the cache file, I will implement a way to check if there is a newer version of the file on the other site in the future

//if the cache file doesn't exist, download feed and write contents to cache file
  if(!file_exists($cache) || ((time() - filemtime($cache)) > 3600 * $cacheint)) {
      $feed_content = http_get_contents($url);
      if($feed_content = http_get_contents($url)) {
          $fp = fopen($cache, 'w');
          fwrite($fp, $feed_content);
          fclose($fp);
      }
  }

//parse and echo results
$content = file_get_contents($cache);
$x = new SimpleXmlElement($content);
$item = $x->channel->item;
echo '<tr>';
for($i = $xmn; $i < $xmx; $i++) {
    echo '<td class="item"><p class="title clear">' . 
        $item[$i]->title . 
        '</p><p class="desc">' . 
        $desc=substr($item[$i]->description, 0, 250) . 
        '... <a href="' . 
        $item[$i]->link . 
        '" target="_blank">more</a></p><p class="date">' . 
        $item[$i]->pubDate . 
        '</p></td>';
}
echo '</tr>';
?>

0 个答案:

没有答案