侧边栏壁纸
博主头像
七哥的技术博客

You got a dream, you gotta to protect it!

  • 累计撰写 60 篇文章
  • 累计创建 71 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

使用火车头采集站点内容(2)

admin
2025-01-05 / 0 评论 / 0 点赞 / 46 阅读 / 0 字

前面已经通过配置火车头正常采集到了文章的字段以及图片,这里将采集到的内容发布到站点

3、内容发布规则

以 wordpress 站点为例,这里的内容发布需要用到用户 Cookie ,并且发布方式使用内置浏览器登录

需要保证运行火车头采集的机器能正常连接到 wordpress

浏览器请求 wordpress 后台页面,使用管理员账号登录,打开开发者工具(按 F12 )

切换到 “网络” 标签页,点击左侧的任意一个请求,将右侧中显示的 Cookie 保存下来一会用

如果网络下没有请求,那么 F5 刷新下当前页面,再将 Cookie 保存起来

locoy.php 配置

为了使得文章能够发布,还需要一个插件 locoy.php,这个 php 文件需要上传到 wordpress 的根目录下

locoy.php 文件的代码大致如下,这里对文章发布的逻辑简单说下

1、使用 get 请求获取到 wordpress 的分类信息,后面配置用到( wp_dropdown_categories 函数部分)

2、火车头将文章信息 post 到 locoy.php 页面,由 locoy.php 通过 wp_insert_post 将文章发布

3、由 locoy.php 通过 add_post_meta 添加文章的 meta 信息,不同主题的 meta 是不相同的,需要按主题进行适配

<?php
/**
 * 标题:Wordpress火车头采集器免登录发布接口
 * 作者:QC七哥
 * 网址:https://blog.csdn.net/weixin_53109623
 */
 
define('LOCOY_USER', 'admin'); //定义发文章的用户
define('WP_ADMIN', true);
 
require_once( dirname( __FILE__ ) . '/wp-load.php' );
require_once( ABSPATH . 'wp-admin/includes/admin.php' );
 
if (empty($_POST)) {
    wp_dropdown_categories(array('hide_empty' => 0, 'hide_if_empty' => false, 'taxonomy' => 'category', 'name' => 'parent', 'orderby' => 'name', 'hierarchical' => true, 'show_option_none' => __('None')));
    exit();
}
 
$post_data = array(
    'post_title'    => $_POST['post_title'], 
    'post_content'  => $_POST['post_content'], 
    'post_date'     => $_POST['post_date'],
    'post_category' => array($_POST['post_category']),
    'post_status'   => 'publish', 
    'post_author'   => 'admin', 
);
 
$current_user = get_user_by('login', LOCOY_USER);
$post_id = wp_insert_post( $post_data );
 
$data = [];
 
if ($post_id > 0) {
 
    add_post_meta($post_id, 'xxx', $data, true);
 
    //succ
    exit('[ok]');
}
 

火车头配置

上面两个步骤配置好之后,回到火车头工具上面来,选择 “Web在线发布”,点击 “+” (标号 3 )增加发布设置

在弹出的窗口中,点击 “+” (标号 4 )添加发布配置

述点击 4 位置的 “+” 后,弹出 “Web发布模块” 配置框,需要配置几个标签页

获取栏目列表

获取分类信息,这些分类信息可以在上一个窗口 “获取列表” 中进行使用

刷新列表页面设置为前面上传到 wordpress 的文件名,需要加上路径 /locoy.php

分类列表设置为 <option(*)value=“[分类ID]”(*)>[分类名称],分类ID 和 分类名称由请求返回

内容发布参数

将前面步骤得到的文章所有字段在这里进行设置,配置后这些字段将通过 post 提交给 locoy.php 文件

表单值在编辑状态下,可以通过右侧的标签来设置,表单名需要和 locoy.php 文件内的 $_POST 变量一致

这个配置修改后,需要退出软件后重新启动,不然修改无法生效,设置完效果类似下面

高级功能

数据发布方式设为 application/x-www-form-urlencoded

设置完毕后,点击 “保存” 按钮,将配置保存到文件,如保存文件名为 wordpress1.0.0.wpm

类别选择

在前面的配置完并保存文件后,回到模块管理的窗口下

在这里选中刚保存的发布模块,设置网页编码为 UTF-8,设置好 wordpress 的网站地址

还有 UserAgent 和登录 Cookie,然后点击下方的 “获取列表” 并选一个类别作为当前发布文章的类别

这里的获取列表,就是通过前面的 “获取栏目列表” 这一步的配置得到的

配置完后输入配置名,点击保存然后关闭当前窗口,回到 “内容发布规则” 窗口上,再勾选刚才保存的配置记录

设置图片上传

切换到 “其他设置” 界面 “Ftp/SFtp文件上传” 中,在这里配置 FTP 如下( wordpress 机器需要先开通 ftp 服务)

在使用过程中,发现火车头的图片上传一直没成功,但是上传测试文件又是正常的,路径也没问题,之前是可以上传图片的

只好写了一段 python 代码,将这里的文件上传关闭,在文章发布完毕后,手动运行脚本上传图片

上传图片的 python 代码如下(使用的时候,按实际的配置进行修改)

# -*- coding: utf-8 -*-
 
import os
from ftplib import FTP
 
host = '192.168.10.200'
username = 'admin'  
password = '******'  
local_dir = 'd:/software/火车头采集/Images'  
remote_dir = '/wordpress/wp-content/uploads' 
 
import os
from ftplib import FTP
 
def ftp_upload_directory(host, username, password, local_dir, remote_dir):
 
    ftp = FTP(host)
    ftp.login(username, password)
 
    def create_remote_directory(remote_path):
        try:
            ftp.cwd(remote_path)
        except Exception as e:
            print(f"目录 '{remote_path}' 不存在,创建中...")
            ftp.mkd(remote_path)
            ftp.cwd(remote_path)
 
    for root, dirs, files in os.walk(local_dir):
        for file in files:
            local_file_path = os.path.join(root, file)
            
            relative_path = os.path.relpath(local_file_path, local_dir)
            remote_file_path = os.path.join(remote_dir, relative_path)
 
            remote_dir_path = os.path.dirname(remote_file_path)
            create_remote_directory(remote_dir_path)
 
            try:
                remote_files = ftp.nlst(remote_dir_path)
                remote_file_names = [os.path.basename(f) for f in remote_files]
                if file in remote_file_names:
                    print(f"文件 '{file}' 已经存在,跳过上传。")
                    continue
            except Exception as e:
                print(f"无法访问远程目录 '{remote_dir_path}',跳过文件 '{file}'。")
                continue
 
            with open(local_file_path, 'rb') as local_file:
                ftp.storbinary(f"STOR {remote_file_path}", local_file)
                print(f"文件 '{local_file_path}' 上传成功。")
 
    ftp.quit()

ftp_upload_directory(host, username, password, local_dir, remote_dir)

4、采集发布

在上述所有步骤处理好之后,现在就可以对采集文章进行发布了(这里测试了一个目录页)

采网址和采内容

在主界面上来,在左侧选中刚配置的采集任务,然后勾选 “采网址”,“采内容” 这两个复选框

然后右键菜单中点击 “开始”,稍等一会就显示采集的文章信息了

对应文章的图片也已经下载到本地了,下载了 48 张图片(前面下载图片设置了随机文件名)

文章发布

在前面网址和内容已经采集完毕,检查发现没问题之后,点击采集任务右边显示的数字

右边将会新打开一个数据页,显示刚采集到的文章列表,全选或者选择一部分文章,右键 “发布所选记录”

如果确定流程已经没问题了,也可以在前面采集的时候,一起将 “发布” 勾选上就可以自动发布了

发布窗口提示信息是成功的

图片上传

回到前面的 python 脚本,将脚本保存为 upload_image.py,运行脚本进行图片上传

打开浏览器访问 wordpress 地址,可以正常显示文章以及图片了,至此采集站点内容算是基本完成

0

评论区