用php写友情链接RSS
发表于:2024-12-03 19:57:11
前几天看到了这个
感觉挺有意思的,之前再看imaegoo的时候看到了一个解决方案
去使用Inoreader 来实现,但是发现只适合hexo使用,php使用会导致报错
所以我就放弃了这个方法,我昨天突然想到用simplepie一个php的SDK来订阅rss,WordPress就用的这个方法,我就尝试了一下,果然可以!
打开simplepie官网下载sdk引用到你的PHP中 simplepie
效果如下:
开发步骤
1. 项目文件结构
创建以下文件结构:
project/
├── index.php // 主文件
├── style.css // 样式文件
├── includes/
│ └── header.php // 页眉组件
├── cache/ // 用于存储 RSS 源缓存
├── php-sdk-7.14.0/ // PHP SDK(可选)
└── assets/
├── jquery.min.js // 引用的 jQuery 库
├── semantic.min.css // Semantic UI 样式
└── all.min.css // Font Awesome 图标库
2. 引入必要的工具
require_once 'php-sdk-7.14.0/autoload.php'; // 确保 SDK 路径正确
确保安装了 SimpleXML
扩展和 PHP >= 7.0
的环境。
3. 添加 RSS 源
修改 $feeds
数组来添加订阅源:
$feeds = [
'https://www.ruanyifeng.com/blog/atom.xml',
'https://www.infoq.cn/feed',
'https://sspai.com/feed',
// 添加更多订阅源
];
4. 缓存机制
为了提高性能和减少网络请求,我们为每个订阅源设置了缓存:
-
缓存位置:
cache/
目录 -
缓存时效:默认为 1 小时
-
检查缓存逻辑:
$cache_file = 'cache/' . md5($feed_url) . '.xml';
if (file_exists($cache_file) && (time() - filemtime($cache_file) < $cache_time)) {
$xml_content = file_get_contents($cache_file);
} else {
// 获取新内容并更新缓存
$context = stream_context_create([...]);
$xml_content = file_get_contents($feed_url, false, $context);
file_put_contents($cache_file, $xml_content);
}
5. 解析 RSS 数据
处理两种主要格式:
- RSS 2.0 格式:
if (isset($xml->channel)) {
$feed_title = (string)$xml->channel->title;
foreach ($xml->channel->item as $item) {
$all_items[] = [...];
}
}
- Atom 格式:
else if (isset($xml->entry)) {
$feed_title = (string)$xml->title;
foreach ($xml->entry as $entry) {
$all_items[] = [...];
}
}
6. 分页功能
每页显示固定数量的文章:
$posts_per_page = 5;
$page = isset($_GET['page']) ? intval($_GET['page']) : 1;
$total_pages = ceil($total_items / $posts_per_page);
$items = array_slice($all_items, $start, $posts_per_page);
分页按钮通过条件渲染实现:
if ($total_pages > 1) {
echo '<a href="?page=' . $i . '" class="item">' . $i . '</a>';
}
7. 前端样式和脚本
加载 Semantic UI 和 jQuery:
<link rel="stylesheet" href="https://cdn.motsuni.cn/test/semantic.min.css">
<link rel="stylesheet" href="https://cdn.motsuni.cn/all.min.css">
<script src="https://cdn.motsuni.cn/jquery.min.js"></script>
自定义 CSS 优化内容:
.content {
margin-left: 260px;
padding-left: 60px;
}
@media (max-width: 768px) {
.content {
margin-left: 0;
}
}
8. 页面渲染
将文章信息展示在主页面中:
foreach ($items as $item) {
echo "
<div class='ui segment'>
<h2><a href='{$item['link']}' target='_blank'>{$item['title']}</a></h2>
<p>发表于:".date('Y-m-d', $item['date'])." | 来源:{$item['source']}</p>
<p>".mb_substr(strip_tags($item['content']), 0, 200)."...</p>
<a href='{$item['link']}' class='ui button'>阅读全文</a>
</div>";
}
9. 右侧栏功能
在右侧显示订阅源的标题和说明:
<div class="ui segment">
<h3>订阅源</h3>
<ul>
<?php foreach ($feeds as $feed_url): ?>
<li><a href="<?php echo $feed_url; ?>" target="_blank"><?php echo $feed_title; ?></a></li>
<?php endforeach; ?>
</ul>
</div>
三、部署与调试
-
确保 PHP 环境已正确配置,并允许
file_get_contents()
。 -
设置
cache/
目录为可写(chmod 777
)。 -
通过浏览器访问
index.php
查看效果。
四、项目扩展
-
添加分类标签:为每个 RSS 源配置类别。
-
用户交互:允许用户动态添加订阅源。
-
数据库支持:将 RSS 数据存储到数据库中,提供高级筛选功能。
-
多主题支持:支持切换白天和黑夜主题。
鸢栀
大佬过奖了
发表于:2024-12-04 16:37:10
来自:中国 - 安徽 - 合肥
沉沦 - 网站
你竟然是用这种方法实现的,太强了。我单纯抄的别人的方法。https://laozhang.org/archives/3579.html
发表于:2024-12-04 15:22:53
来自:中国 - 河北 - 保定