farea[/farea]不得不佩服现在AI的强大。
创建一个用于 Typecho 的采集器插件需要掌握 PHP 和 Typecho 的插件开发机制。以下是一个简化版的 Typecho 插件代码模板,可以通过它采集指定网站的内容并发布到 Typecho 中。
- 插件文件结构
在 Typecho 的 usr/plugins 目录下新建一个文件夹,例如 ContentCollector,并创建 Plugin.php 文件。
usr/
├── plugins/
│ ├── ContentCollector/
│ │ ├── Plugin.php
- Plugin.php 插件代码
<?php
if (!defined('__TYPECHO_ROOT_DIR__')) exit;
/**
- ContentCollector 插件
- 一个简单的内容采集插件,支持从目标网站抓取内容并发布到 Typecho 中。
- @package ContentCollector
- @author Your Name
- @version 1.0.0
- @link https://yourwebsite.com
*/
class ContentCollector_Plugin implements Typecho_Plugin_Interface
{
/**
* 激活插件
*/
public static function activate()
{
Helper::addPanel(1, 'ContentCollector/panel.php', '采集器', '采集内容', 'administrator');
return _t('插件已激活,采集器面板已添加。');
}
/**
* 禁用插件
*/
public static function deactivate()
{
Helper::removePanel(1, 'ContentCollector/panel.php');
}
/**
* 插件配置面板
*/
public static function config(Typecho_Widget_Helper_Form $form)
{
$url = new Typecho_Widget_Helper_Form_Element_Text('targetUrl', null, '', _t('目标网站 URL'), _t('请输入要采集的目标网站地址'));
$form->addInput($url);
$selector = new Typecho_Widget_Helper_Form_Element_Text('contentSelector', null, '', _t('内容选择器'), _t('请输入用于提取内容的 CSS 选择器'));
$form->addInput($selector);
}
/**
* 个人用户的配置面板
*/
public static function personalConfig(Typecho_Widget_Helper_Form $form) {}
/**
* 插件实现逻辑
*/
public static function collectContent($url, $selector)
{
// 使用 cURL 或 file_get_contents 抓取内容
$html = file_get_contents($url);
if (!$html) {
throw new Exception(_t('无法获取目标网站内容'));
}
// 使用 DOMDocument 或类似库解析 HTML
$dom = new DOMDocument();
@$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
// 使用选择器提取内容
$nodes = $xpath->query($selector);
$content = '';
foreach ($nodes as $node) {
$content .= $dom->saveHTML($node);
}
return $content;
}
/**
* 发布到 Typecho
*/
public static function publishContent($title, $content)
{
$db = Typecho_Db::get();
$post = array(
'title' => $title,
'text' => $content,
'slug' => Typecho_Common::slugName($title),
'created' => time(),
'modified' => time(),
'type' => 'post',
'status' => 'publish',
'authorId' => Typecho_Widget::widget('Widget_User')->uid,
);
$db->query($db->insert('table.contents')->rows($post));
}
}
- 创建采集面板 panel.php
在 ContentCollector 文件夹下新建 panel.php 文件:
<?php
if (!defined('__TYPECHO_ADMIN__')) exit;
$this->need('header.php');
?>
采集器
<?php
if (isset($_POST['collect'])) {
$url = $_POST['url'];
$selector = $_POST['selector'];
$title = $_POST['title'];
try {
$content = ContentCollector_Plugin::collectContent($url, $selector);
ContentCollector_Plugin::publishContent($title, $content);
echo '<p>内容已成功采集并发布!</p>';
} catch (Exception $e) {
echo '<p>错误:' . $e->getMessage() . '</p>';
}
}
$this->need('footer.php');
?>
- 使用说明
- 将 ContentCollector 文件夹放到 usr/plugins/ 目录。
- 登录 Typecho 后台,启用 ContentCollector 插件。
- 在后台的“采集器”面板中输入目标 URL 和选择器,点击采集。
注意事项
此插件是基础版本,仅用于教学目的。
实际使用时需要考虑目标网站的内容版权。
可以结合更强大的解析库(如 Guzzle、Symfony DomCrawler)提升稳定性和功能。
评论 (1)