创建一个用于typecho的采集插件

XBoy
2024-12-01 / 1 评论 / 12 阅读 / 正在检测是否收录...

farea[/farea]不得不佩服现在AI的强大。

创建一个用于 Typecho 的采集器插件需要掌握 PHP 和 Typecho 的插件开发机制。以下是一个简化版的 Typecho 插件代码模板,可以通过它采集指定网站的内容并发布到 Typecho 中。

  1. 插件文件结构

在 Typecho 的 usr/plugins 目录下新建一个文件夹,例如 ContentCollector,并创建 Plugin.php 文件。

usr/
├── plugins/
│ ├── ContentCollector/
│ │ ├── Plugin.php


  1. 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));
}

}


  1. 创建采集面板 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');
?>


  1. 使用说明
  2. 将 ContentCollector 文件夹放到 usr/plugins/ 目录。
  3. 登录 Typecho 后台,启用 ContentCollector 插件。
  4. 在后台的“采集器”面板中输入目标 URL 和选择器,点击采集。

注意事项

此插件是基础版本,仅用于教学目的。

实际使用时需要考虑目标网站的内容版权。

可以结合更强大的解析库(如 Guzzle、Symfony DomCrawler)提升稳定性和功能。

0

评论 (1)

(上传到图床后复制HTML图像代码到评论区即可)
取消
  1. 头像
    XBoy 作者
    Windows 10 · Google Chrome
    该回复疑似异常,已被系统拦截!
    回复