好的,所以大约一个星期以来,我一直在做大量关于向服务器发出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>';
?>