php通过订阅生成博友圈
昨天花了一天时间,搞定了本站的rss和通过rss地址生成博友圈的功能。虽然代码大部分都是通过AI编写,自己又边测试边修改完成的,不过总算是实现了,代码分享如下。
// 1. 定义RSS源
$rssUrls = [
["https://www.tosry.cn/feed","时光绘梦集"],
["https://www.hxy.cc/feed/","韩情脉脉"],
["https://nmsl.cn/feed/","NMSL"]
];
// 2. 缓存文件路径
$cacheFile = __DIR__ . '/rss_cache.json';
// 3. 检查缓存是否过期
function isCacheExpired($cacheFile) {
if (!file_exists($cacheFile)) return true;
return (time() - filemtime($cacheFile)) > (12 * 3600);
//此处设置缓存文件12小时,按需修改
}
// 4. 获取RSS数据
function fetchRssData($rssUrls) {
$allItems = [];
foreach ($rssUrls as $url) {
$xml = @simplexml_load_file($url[0]);
$url[2]='https://'.parse_url($url[0])['host'];
if ($xml === false) continue;
$items = $xml->xpath('//item') ?: [];
$latestItems = array_slice($items, 0, 8);
foreach ($latestItems as $item) {
$allItems[] = [
'title' => mb_substr(((string)$item->title),0,16,'UTF-8'),
'link' => (string)$item->link,
'description' =>mb_substr(str_replace(["\n","\r"," "],'',strip_tags((string)$item->description)),0,64,'UTF-8'),
'pubDate' => (string)$item->pubDate,
'timestamp' => strtotime($item->pubDate),
'name'=>$url[1],
'index'=>$url[2]
];
}
}
usort($allItems, function($a, $b) {
return $b['timestamp'] - $a['timestamp'];
});
return $allItems;
}
// 5. 主逻辑:检查缓存 & 获取数据
if (isCacheExpired($cacheFile)) {
$rssData = fetchRssData($rssUrls);
$cacheData = [
'lastUpdated' => date('Y-m-d H:i:s'),
'items' => $rssData
];
file_put_contents($cacheFile, json_encode($cacheData, JSON_PRETTY_PRINT));
} else {
$cacheData = json_decode(file_get_contents($cacheFile), true);
$rssData = $cacheData['items'];
}
/* 6. 输出HTML页面
把$rssData按照一定的格式输出到页面就可以了。
……
*/