时光绘梦集
0
位置: 代码 正文

夏夜万年 2025/09/16 周2

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按照一定的格式输出到页面就可以了。
……
*/


    【运行状态】
获取数据中...