希米日志


主页 归档 留言 友人 关于


9 0

前言:

  • 前段时间用AI生成代码写了个轻量博客程序,发群里不少小伙伴看到(当天访问ip都过千了)
  • 咨询的小伙伴也不少,重复答疑也是有些辛苦,于是写篇调教gpt的文章,该何姿势切入
  • 以下内容纯属个人理解,小作文不会写, 就这么凑合看吧!

解释:

  1. 首先要明白GPT并非真人,理解能力还是有限的,注意叙述逻辑,条理清晰更易被理解答疑;
  2. 主要还是看你的思维方向是否合理,对于代码理解并没有太高求;
  3. 开始前最重要的一条:备份相关数据,备份相关数据,备份相关数据;
  4. 咨询问题前先给出素材或是问题代码供参考,以便于给出更为准确的回答;
  5. 若没有直接说明要求1,2,3,4或是每条要求以分号隔开;
  6. 最后一行写上请给出完整代码或是部分需要修改的代码,需要何种语言代码;
  7. 最好在前面给出当前运行环境,减少修改次数;
  8. 代码如出现错误,先看翻译提示,不明白直接复制发送给gtp,如果修复后代码依然有故障;
  9. 这时候就该考虑是否运行环境兼容有问题,可以咨询该代码需要的运行环境,并给出兼容行;
  10. 测试代码,然后依次测试环境是否满足要求,如果运行环境检测正常,就得换个思路咨询了;
  11. 例如:将项目分割为多个小模块功能,每个单独进行测试,测试完成后,再进行整合到一起;
  12. 如果上述方法依然不行,就得考虑你自己的思维方向是否正正确了,可以直接提问;
  13. 要实现某某功能,有啥推荐方法,目前运行环境是什么样的,然后自行判断是否可行!
  14. 下方给出具体案例,及询问方法,出错纠正,提供点思路供参考;

案例:

  • 临时起意准备将多年前asp博客程序(zblog)的纯静态html备份程序搬家到现在的typecho上;
  • 要实现此功能首先要理清思路, 需要哪些准备工作,先列出来;

准备:

1. 分析html结构,需要获取那些数据,暂定为:标题,发布时间,正文,文章分类, (标签之类无用处选择丢弃).
2. 分析ytpecho发布文章原理,关联数据库表有哪些,查询结果如下:(如何知道的,直接问gpt就行啦).

2.1 typecho_contents表: 文章主要内容,标题,发布时间,分类信息查询id,html内容导入到这里.
2.2 typecho_relationships表: 文章内容表对应 (cid) 和文章分类/或是标签 (mid) 进行关联.
2.3 typecho_metas表:文章分类名,标签名,都是存在这里的,typecho_relationships表mid与这里关联的.

3. 最重要一步备份数据,这里我只用到两个表,备份typecho_contents与typecho_relationships即可.
  • 具体代码问gpt 就行,给出案例typecho_contents,自行修改备份typecho_relationships.

问题:

  • sql备份 typecho_contents表为typecho_contents_bak,同时备份内部所有数据 答案:
  -  -- 如果备份表已存在,先删除
  -  DROP TABLE IF EXISTS `typecho_contents_bak`;
  -  -- 创建备份表,结构与原表一致
  -  CREATE TABLE `typecho_contents_bak` LIKE `typecho_contents`;
  -  -- 将原表中的数据插入到备份表中
  -  INSERT INTO `typecho_contents_bak` SELECT * FROM `typecho_contents`;
4. 解压asp备份程序,获取archives目录下的所有html防止在一个独立目并打包上传至服务器;

执行:

1. 使用GTP生成代码,提取文章内容
  • 1.1 未提供html源代码给gtp,识别失败
  • 例 1: 问:
  • php 读取html中标题,正文内容,并保存到当前目录下(html代码格式参考上条信息),以txt格式保存,
  • 第一行为标题,第二行为发表时间,第三行为分类,第四行开始为正文,保存名称为标题 答:
 <?php
// 加载并解析HTML文件
$htmlFile = 'yourfile.html';  // 替换为你的HTML文件路径
$html = file_get_contents($htmlFile);

·
·
·
// 保存到文件
file_put_contents($filename, $content);

echo "保存成功:$filename\n";
?>

问: 上面问题忘记加上批量读取输出,补上 "$htmlFile = 'yourfile.html'; " 将其修改为当前目录下所有的html文件,批量获取并批量保存 答:


     <#?php
// 获取当前目录下所有 .html 文件
$htmlFiles = glob("*.html");
foreach ($htmlFiles as $htmlFile) {
·
·
·
    // 保存到文件
    file_put_contents($filename, $content);
    echo "保存成功:$filename\n";
'}
#?#>

验证结果: 无法获取发布日期,文章内容

问: (发现提取处理的txt无正文内容与标题,但是目录内txt过多故出现新问题) PHP删除当前目录下所有txt后缀文件,给出案例代码 答:

     <?php
// 获取当前目录下所有 .txt 文件
$txtFiles = glob("*.txt");

foreach ($txtFiles as $txtFile) {
    // 尝试删除文件
    if (unlink($txtFile)) {
        echo "成功删除文件: $txtFile\n";
    } else {
        echo "无法删除文件: $txtFile\n";
    }
}
?>

执行结果: 成功删除所有txt文件

  • 继续下一步:
  • 1.2 改变思路:提供html源代码

问: 提供html源码示例如下:

    <title>根据句柄取进程路径-    紫灵幽梦</title>
 <div class="entry">
  <div class="person-info">
<span style="font-size: 75%;color: #393939;">2016-11-8  <br />18:29</span>
·
·
·
<br />
        <div style="margin-top: 20pt;"></div>
  • 根据以上内容修改下面代码:
 <?php
// 获取当前目录下所有 .html 文件
$htmlFiles = glob("*.html");
foreach ($htmlFiles as $htmlFile) {
·
·
·
    // 保存到文件
    file_put_contents($filename, $content);
    echo "保存成功:$filename\n";
;}
?>

答: 根据html代码给出新的答案

 <?php
// 获取当前目录下所有 .html 文件
$htmlFiles = glob("*.html");
·
·
·
    // 保存到文件
    file_put_contents($filename, $content);
    echo "保存成功:$filename\n";
;}
?>

验证结果: 依然无法提取正确的文章正文与分类信息

2. 偷懒失败,尝试手工分析html结构,将对应的结构代码给gtp,(成功识别出分类与正文)提取ok
  • 原文链接: 示例: 问: 手工提取结构代码并附上之前报错代码,给出要求
          1、)<title>根据句柄取进程路径-紫灵幽梦</title>这是标题,修改为只提取-前面字符;
          2、)<div class="person-info"><span style="font-size: 75%;color: #393939;">
              2016-11-8  <br />18:29</span> </div> 这是发布日期;
          3、)<div class="post-header-right"><h4 class="post-title"><a>[程序代码]根据句
              柄取进程路径 </a> </h4></div>这是发分类,只提取"[]"内部,只提取第一个class="post-title"内容;
          4、)<div class="post-contents">~</div>这是正文部分,只提取第一个class="post-contents"内容;
  • 要求:根据以上内容修改下面代码:
<?php
// 获取当前目录下所有 .html 文件
$htmlFiles = glob("*.html");
foreach ($htmlFiles as $htmlFile) {
·
·
·
    // 保存到文件
    file_put_contents($filename, $content);
    echo "保存成功:$filename\n";
}
?>

答:

     <?php
// 获取当前目录下所有 .html 文件
$htmlFiles = glob("*.html");
foreach ($htmlFiles as $htmlFile) {
·
·
·
    // 保存到文件
    file_put_contents($filename, $content);
    echo "保存成功:$filename\n";
}
?>
  • 提取内容标题不满意(之前网站名与现在不符合,继续追问) 问: 修改为只提取-前面字符;

    <title>根据句柄取进程路径-紫灵幽梦</title>这是标题

    答: 重新修正代码如下:

    <?php
    // 获取当前目录下所有 .html 文件
    $htmlFiles = glob("*.html");
    foreach ($htmlFiles as $htmlFile) {
    // 加载并解析HTML文件
    ·
    ·
    ·
    ·
    
    echo "保存成功:$filename\n";
    }
    ?>

    验证结果: 成功提取出文章标题,内容,发布时间(搞定继续下一步)

3. 开始准备数据导入,上面已经备份好数据库;
  • 3.1 分析typecho_contents表字段,生成执行代码 问: 参考现有文章内数据与咨询GPT, 给出以下参考数据:
INSERT INTO `typecho_contents` (`cid`, `title`, `slug`, `created`, `modified`, `text`, `order`, `authorId`, `template`, `type`, `status`, `password`,      `commentsNum`, `allowComment`, `allowPing`, `allowFeed`, `parent`, `views`, `digg`, `bury`, `agree`) VALUES
这是typecho存储文章的数据表,读取当前目录下所有txt后缀文件,并写入表中,请给出完整php代码:
sql数据库配置信息如下:
 'host' => 'localhost',
  'port' => 3306,
  'user' => 'xxxx',
  'password' => 'xxxx',
  'charset' => 'utf8mb4',
  'database' => 'xxxx',
  'engine' => 'InnoDB',
以下为导入txt文件字段信息获取信息;
cid =为自增id,从191开始(导入文章的id范围);
title=标题,读取txt文本中第一行;
slug=与cid相同数据;
created=文章创建日期,读取txt文本第二行数据并转换为Unix 时间戳,这位原始格式:2016-11-8  18:33;

modified=文章最后修改日期,输入当前日期并转换为Unix 时间戳;
text=正文内容,读取txt文本第三行到末位所有数据;
order=0;
authorId=1;
template=NULL;
type=''post';
status='publish';
password=NULL;
commentsNum=0
allowComment=1
allowPing=0
allowFeed=1
parent=0
views=5
digg=0
bury=0
agree=0

答:

<?php
// 数据库配置信息
 'host' => 'localhost',
  'port' => 3306,
  'user' => 'xxxx',
  'password' => 'xxxx',
  'charset' => 'utf8mb4',
  'database' => 'xxxx',

// 连接到数据库
$dsn = "mysql:host=$host;port=$port;dbname=$database;charset=$charset";
$options = [
    PDO::ATTR_ERRMODE            => PDO::ERRMODE_EXCEPTION,
    PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
    PDO::ATTR_EMULATE_PREPARES   => false,
];

try {
    $pdo = new PDO($dsn, $user, $password, $options);
} catch (\PDOException $e) {
    throw new \PDOException($e->getMessage(), (int)$e->getCode());
}

// 获取当前目录下所有 .txt 文件
$txtFiles = glob("*.txt");

$cid = 191; // 初始自增ID

foreach ($txtFiles as $txtFile) {
    $lines = file($txtFile, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);

    if (count($lines) < 3) {
        echo "文件 $txtFile 格式不正确,跳过。\n";
        continue;
    }

    $title = trim($lines[0]); // 第一行作为标题
    $slug = $cid; // slug 使用 cid
    $created = strtotime(trim($lines[1])); // 第二行作为创建日期并转换为 Unix 时间戳
    $modified = time(); // 当前时间作为最后修改日期
    $text = implode("\n", array_slice($lines, 2)); // 第三行开始的所有内容作为正文

    // 插入数据到数据库
    $sql = "INSERT INTO `typecho_contents` 
            (`cid`, `title`, `slug`, `created`, `modified`, `text`, `order`, `authorId`, `template`, `type`, `status`, `password`, `commentsNum`, `allowComment`, `allowPing`, `allowFeed`, `parent`, `views`, `digg`, `bury`, `agree`)
            VALUES 
            (:cid, :title, :slug, :created, :modified, :text, 0, 1, NULL, 'post', 'publish', NULL, 0, 1, 0, 1, 0, 5, 0, 0, 0)";

    $stmt = $pdo->prepare($sql);
    $stmt->execute([
        ':cid' => $cid,
        ':title' => $title,
        ':slug' => $slug,
        ':created' => $created,
        ':modified' => $modified,
        ':text' => $text
    ]);

    echo "文件 $txtFile 已成功导入。\n";

    $cid++; // 自增ID
}

echo "所有文件已处理完成。\n";

验证结果: 参数数据完整一次性完成导入,未出现报错信息;

  • 3.2 分析typecho_relationships表字段,生成与文章分类关联代码 问: 新增导入文章对应id范围为191-238,根据需求提问;
  • typecho_relationships表中新增多行规则排序;cid=191-238, 对应mid=33;
  • sql链接信息同上,给出完整代码; 答:
   <?php
// 数据库配置信息
 'host' => 'localhost',
  'port' => 3306,
  'user' => 'xxxx',
  'password' => 'xxxx',
  'charset' => 'utf8mb4',
  'database' => 'xxxx',

try {
    // 创建PDO实例并连接到数据库
    $pdo = new PDO("mysql:host=$host;port=$port;dbname=$database;charset=$charset", $user, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // 准备插入SQL语句
    $stmt = $pdo->prepare("INSERT INTO `typecho_relationships` (`cid`, `mid`) VALUES (:cid, :mid)");

    // 循环插入 cid=191 到 238 的记录,并设置 mid=33
    for ($cid = 191; $cid <= 238; $cid++) {
        $stmt->execute([
            ':cid' => $cid,
            ':mid' => 33
        ]);
    }

    echo "插入成功!";

} catch (PDOException $e) {
    // 处理错误
    echo "数据库操作失败:" . $e->getMessage();
}
?>

验证结果: 生成完毕,未发现错误,但是自己粗新对应分类id应该是32设置成33了,继续修复; 问:

  • 修改typecho_relationships表中数据 cid=191-238,对应mid=32;
  • sql链接信息同上,给出完整代码; 答:
<?php
// SQL 数据库配置信息
$host = 'localhost';
$port = 3306;
$user = 'xxxx';
$password = 'xxxx';
$database = 'xxxx';

try {
    // 创建 PDO 实例连接数据库
    $dsn = "mysql:host=$host;port=$port;dbname=$database;charset=utf8mb4";
    $pdo = new PDO($dsn, $user, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // 更新 typecho_relationships 表的 mid 值
    $sql = "UPDATE `typecho_relationships` 
            SET `mid` = 32 
            WHERE `cid` BETWEEN 191 AND 238";

    // 执行 SQL 语句
    $pdo->exec($sql);

    echo "成功更新 typecho_relationships 表中的数据。";

} catch (PDOException $e) {
    echo "数据库操作失败: " . $e->getMessage();
}
?>

验证结果: 修复成功,文章从主页可正常访问,分类显示正常

  • 3.3 阅读发现文章底部最后一行存有之前版权声明链接并且已失效(域名已更换),
  • 文章标题也缺少标签字符,继续优化; 问: 删除表typecho_contents中对应cid=191-238, text字段中最后一行的数据, 并在title字段数据前面加上前缀【VB】 ;sql链接信息同上 答:
<?php
// SQL 数据库配置信息
$host = 'localhost';
$port = 3306;
$user = 'erecc';
$password = 'erecc';
$database = 'erecc';

try {
    // 创建 PDO 实例连接数据库
    $dsn = "mysql:host=$host;port=$port;dbname=$database;charset=utf8mb4";
    $pdo = new PDO($dsn, $user, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // 获取 cid 在 191 到 238 范围内的所有记录
    $sql = "SELECT `cid`, `text`, `title` FROM `typecho_contents` WHERE `cid` BETWEEN 191 AND 238";
    $stmt = $pdo->query($sql);
    $rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

    foreach ($rows as $row) {
        $cid = $row['cid'];
        $text = $row['text'];
        $title = $row['title'];

        // 删除 text 字段的最后一行
        $textLines = explode("\n", $text);
        if (count($textLines) > 1) {
            array_pop($textLines); // 移除最后一行
            $newText = implode("\n", $textLines);
        } else {
            $newText = $text; // 如果只有一行,则不进行删除
        }

        // 在 title 字段前加上前缀【VB】
        $newTitle = "【VB】" . $title;

        // 更新数据库中的记录
        $updateSql = "UPDATE `typecho_contents` SET `text` = :newText, `title` = :newTitle WHERE `cid` = :cid";
        $updateStmt = $pdo->prepare($updateSql);
        $updateStmt->execute([
            ':newText' => $newText,
            ':newTitle' => $newTitle,
            ':cid' => $cid,
        ]);
    }

    echo "成功更新 typecho_contents 表中的数据。";

} catch (PDOException $e) {
    echo "数据库操作失败: " . $e->getMessage();
}
?>

验证结果: 标题标签修复完成,底部无效链接清除,

  • 3.4 唯一缺陷代码模块显示不完整,空了再优化吧

AI站点:

  • 下方提供本人使用ai开发的站点案例 :
  • 博客程序: 当前站点 [UI还在优化,耗时最长的了项目了]
  • 访客统计:https://xm.tj.cn/index.php?url=www.ximi.me [免费开放,使用简单]

关于:


 2024-08-22 10:31:00

二维码

 评论: 0

正在加载验证码......

请先完成验证

目 录




1