ChatGPT工作提效之小鹅通二次开发批量API对接解决方案(学习记录同步、用户注册同步、权益订购同步、开发文档)

news2024/11/24 5:26:09

ChatGPT工作提效系列

  1. ChatGPT工作提效之初探路径独孤九剑遇强则强
  2. ChatGPT工作提效之在程序开发中的巧劲和指令(创建MySQL语句、PHP语句、Javascript用法、python的交互)
  3. ChatGPT工作提效之生成开发需求和报价单并转为Excel格式

ChatGPT工作提效之小鹅通二次开发批量API对接解决方案

  • ChatGPT工作提效系列
  • 一、项目需求
    • 1.chatGPT:使用php分批分时输出的代码
    • 2.chatGPT使用javascript分批分时输出的代码
  • 二、批量修复API接口
    • 1.修复单位不存在API
    • 2.修复单位depart_id不存在
    • 3.批量更新登录权限
  • 三、开发中遇见的问题
    • 1.查询字段为空的sql语句
    • 2.设置登录cookie永不过期
    • 3.实现短信验证码的代码是什么

ChatGPT是一种实时对话生成模型,能够帮助用户快速地回答问题、提供信息,并且能够流畅地进行对话,准确理解用户的意图,并作出相应的回应。

ChatGPT模型的优点在于其生成文本的自然度和连贯度都非常好,不会出现明显的逻辑错误和语法错误。此外,ChatGPT的训练数据集丰富多样,能够应对大部分的问题场景。由于使用预训练模型,可以快速定制成各种应用场景的问答模型,能够大幅提升开发效率。不过,ChatGPT也存在一些缺点。由于其是基于预训练模型的生成模型,无法像传统的规则引擎一样对自己的回答逻辑处理进行调整,因此产生了一些无意义的回答或者矛盾的回答。

近期,在小鹅通的项目实战开发过程中,增加了“面向ChatGPT开发”的使用频率。现就有关过程记录如下:

在这里插入图片描述

一、项目需求

调用小鹅通API接口获取指定资源学习记录信息,xe.user.leaning_record_by_resource.get/1.0.0。
请求方式及url

  • 请求方式:POST
  • 请求头:Content-Type:application/json
  • 接口地址:https://api.xiaoe-tech.com/xe.user.leaning_record_by_resource.get/1.0.0
  • 频率限制:10秒3000次
  • 备注:数据是准实时的,4~5分钟延迟
  • user_id数组,请求数量上限,请求参数如图:
    在这里插入图片描述
    目前需要在小鹅通上述API条件的限制做,批量获取用户指定资源的学习记录。在php中是完善的延迟进程的算法的,很容易API超限或请求频繁导致token失效。
    如何实现队列更新呢?

1.chatGPT:使用php分批分时输出的代码

php写一下一个100长度的数组,分批分时输出的代码

<?php

// 创建一个100长度的数组
$array = range(1, 100);

// 每批输出的长度
$batch_size = 10;

// 循环输出数组内容
for ($i = 0; $i < count($array); $i += $batch_size) {
    echo "批次 " . ($i / $batch_size + 1) . "\n";
    echo implode(", ", array_slice($array, $i, $batch_size)) . "\n";
    sleep(1); // 暂停1秒,以模拟分时输出
}

?>

sleep(1)

2.chatGPT使用javascript分批分时输出的代码

在javascript中实现一个100长度的数组,分批分时输出的代码怎么写

 var arr = Array(100).fill(null).map((_, i) => i + 1); // 创建长度为100的数组

    function outputArrayInBatch(arr, batchNum, interval) {
        var startIndex = batchNum * interval; // 当前批次的起始索引
        var endIndex = (batchNum + 1) * interval; // 当前批次的结束索引
        if (startIndex > arr.length - 1) {
            return; // 当所有元素都输出完毕后,退出递归
        }
        if (endIndex > arr.length) {
            endIndex = arr.length; // 当结束索引超过数组长度时,将结束索引设置为数组的最后一个元素的索引
        }
        var batchArr = arr.slice(startIndex, endIndex); // 当前批次需要输出的元素数组
     
        //对批次数组进行遍历操作;
        console.log(batchArr); // 输出当前批次的元素
        
        setTimeout(function () {
            outputArrayInBatch(arr, batchNum + 1, interval); // 递归调用下一批次的输出
        }, 2000); // 每隔1秒输出一批次
    }

    // 执行输出
    outputArrayInBatch(arr, 0, 10); // 一次输出10个元素,共分10批输出

代码中首先创建了长度为100的数组。outputArrayInBatch()函数接收三个参数:待输出的数组、当前批次数、每批次需要输出的元素个数。在函数中,首先根据批次数和输出元素个数计算当前需要输出的元素数组;然后输出当前批次的元素,并通过setTimeout()函数递归调用函数,输出下一批次的元素。

这里输出的是每隔1秒输出一批次的元素,可以根据具体需求调整输出时间间隔。
在这里插入图片描述

二、批量修复API接口

1.修复单位不存在API

public function upDepart()
    {
        global $db, $res;
        dbc();
        @$user_phone = get_param('user_phone');
        if ($user_phone == "") {
            die("参数错误");
        }
        //读取单位认证
        $row = $db->fetch('depart_audit', '*', array('user_phone' => $user_phone), ' audit_id DESC');

        //获取单位ID
        $row_depart = $db->fetch('depart', 'depart_id', array('depart_name' => $row['depart_name']), ' depart_id DESC');
        if ($row_depart['depart_id'] == "") {
            die("单位不存在或未验证");
        }

        //更新单位库
        $user_roles = 1;//单位管理员权限;
        $user_menu = 0;//可操作
        $user_auth = 1;//已审
        $db->insert('admin', array('user_phone' => $user_phone, 'user_name' => $row['user_name'], 'user_pwd' => $row['user_pwd'], 'user_mail' => $row['user_mail'], 'depart_id' => $row_depart['depart_id'], 'user_depart' => $row['depart_name'],
            'user_branch' => $row['user_branch'], 'user_titles' => $row['user_titles'], 'user_province' => $row['province'], 'user_city' => $row['city'], 'user_area' => $row['area'],
            'user_roles' => $user_roles, 'user_menu' => $user_menu, 'user_auth' => $user_auth));

        $res["data"] = $user_phone . "-更新成功";
        die(json_encode_lockdata($res));
    }

2.修复单位depart_id不存在

public function upDeID()
    {
        global $db, $res;
        dbc();
        //读取管理员信息
        $sql = "select depart_id,user_depart FROM " . $db->table('admin') . " WHERE depart_id IS NULL";
        $sql .= " ORDER BY user_id DESC";
        $row = $db->queryall($sql);
        for ($i = 0; $i < count($row); $i++) {
            // echo $row[$i]['user_depart'] . '<br>';
            //获取单位ID
            $row_depart = $db->fetch('depart', 'depart_id,depart_name', array('depart_name' => $row[$i]['user_depart']), ' depart_id DESC');
            if ($row_depart) {
                $db->update('admin', array('depart_id' => $row_depart['depart_id']), array('user_depart' => $row[$i]['user_depart']));
            }
        }

        $res["data"] = "更新成功";
        die(json_encode_lockdata($res));
    }

3.批量更新登录权限

public function upAuth()
    {
        global $db, $res;
        dbc();
        $db->update('user', array('user_auth' => 1), array('user_auth' => 0));
        $res["data"] = "更新成功";
        die(json_encode_lockdata($res));
    }

三、开发中遇见的问题

1.查询字段为空的sql语句

mysql筛选某字段未空的查询语句怎么写

在MySQL中,筛选某字段未空的查询语句可以使用 IS NOT NULL 来表示。例如,假设有一个表名为 my_table,其中包含 field1 字段,要查找 field1 字段不为空的数据,可以使用以下 SQL 查询语句:

SELECT * FROM my_table WHERE field1 IS NOT NULL;

其中 SELECT * 表示选择所有列,FROM my_table 表示从 my_table 表中查询数据,WHERE field1 IS NOT NULL 表示筛选 field1 字段不为空的数据。

如果要筛选出某个字段值为空的数据,可以使用 IS NULL 来表示,例如:

SELECT * FROM my_table WHERE field1 IS NULL;

这条 SQL 查询语句将会返回 field1 字段为空的记录所有数据,其他字段可能为空或者有值。

而在实际的开发过程中,在写查询字段为空的sql语句中时,用了is null查表中user_eid为空的记录,结果是没有结果。其原因在于,只有是显示(null)的字段才是真正的空值,如果之前为该字段赋值之后删除值框里什么都没有应该是下面的写法:user_eid = ''

    public function getEid()
    {
        checkAdminAuth($_COOKIE['admin_roles'], '0', 1);//超管权限
        global $db, $res;
        dbc();
        //读取管理员信息
        $sql = "select user_eid,user_name,user_phone FROM " . $db->table('user') . " WHERE user_eid = ''";
        $sql .= " ORDER BY user_id DESC";// LIMIT 100
        $row = $db->queryall($sql);
        $res["data"] = $row;
        die(json_encode_lockdata($res));
    }

2.设置登录cookie永不过期

php如何设置登录cookie永不过期

要设置PHP登录cookie永不过期,可以指定一个很大的过期时间,如设置为2038年1月19日,这是PHP可以处理的最大日期。

可以使用setcookie()函数设置cookie,具体示例如下:

$cookie_name = "user";
$cookie_value = "John Doe";
$expiry_date = strtotime('2038-01-19');
setcookie($cookie_name, $cookie_value, $expiry_date, "/");

在上面的示例中,$expiry_date变量设置为2038年1月19日的时间戳,该时间戳将在setcookie()函数中设置为cookie的过期时间。在本例中,cookie的路径设置为“/”,这表示cookie与服务器上所有页面都关联,而不是仅与当前页面关联。

这样设置后,用户的登录cookie将被永久保存,直到浏览器将其删除或达到在服务器上规定的最长持续时间为止。

3.实现短信验证码的代码是什么

除了Redis外,还有很多其他的方式实现短信验证码的流控。下面是一个基于文件系统的示例代码:

<?php

// 定义短信验证码保存目录
define('SMS_DIR', '/path/to/sms/dir/');

// 获取客户端IP地址
$ip = $_SERVER['REMOTE_ADDR'];

// 获取手机号码
$phone = 'your_phone_number';

// 定义文件名规则
$filename = md5($ip . $phone) . '.json';

// 检查文件是否存在
if (file_exists(SMS_DIR . $filename)) {
    // 如果文件存在,则读取文件内容
    $content = file_get_contents(SMS_DIR . $filename);

    // 解析JSON内容
    $data = json_decode($content, true);

    // 如果超过发送次数限制,则提示用户并退出
    if ($data['count'] >= 5 && time() - $data['timestamp'] < 300) {
        echo "发送频率过快,请稍后再试。";
        exit;
    } else {
        // 如果可以发送,则将发送次数加1,并更新时间戳
        $data['count']++;
        $data['timestamp'] = time();
    }
} else {
    // 如果文件不存在,则创建新文件并写入初始内容
    $data = [
        'count' => 1,
        'timestamp' => time()
    ];

    $content = json_encode($data);

    file_put_contents(SMS_DIR . $filename, $content);
}

// 发送短信验证码

?>

在上述代码中,将短信验证码的发送次数保存在一个JSON文件中,与客户端IP地址和手机号码相关联。代码中使用md5值来生成文件名,文件内容为JSON格式的字符串,包含发送次数和最后发送时间戳两个字段。

在发送短信验证码时,先根据请求参数生成文件名,然后检查是否存在对应的文件。如果文件存在,则读取文件内容,检查发送次数和时间戳是否超过限制。如果可以发送,则将发送次数加1,并将更新后的内容写回文件;如果发送次数已经达到限制,则提示用户稍后再试。如果文件不存在,则创建新文件,并写入初始的发送次数和时间戳。

基于文件系统的方式性能略低于Redis或其他内存型数据库,同时也更容易受到并发访问的影响。因此,建议在高并发场景下使用更为高效的Redis等缓存服务器。


@漏刻有时

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/566977.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

TIA博途-32位浮点数大小端存储-高低字节转换的具体方法示例(4种字节排列顺序)

TIA博途-32位浮点数大小端存储-高低字节转换的具体方法示例(4种字节排列顺序) 如下图所示,新建一个项目后,添加一个1215PLC,添加一个FB块,块的接口变量如下, 如下图所示,该FB块的具体程序可参考下面的内容: 如下图所示,在数据块种添加3个变量用于FB块的功能测试,…

Java SPI 二 之 Java APT原理及APT实战 - 一步步教你写ButterKnife

一、定义 Java APT 是 Java 技术设计的一个 APT 架构&#xff0c; APT&#xff08;Annotation Processing Tool&#xff09;即注解处理器&#xff0c;它是一种处理注解的工具&#xff0c;也是javac中的一个工具&#xff0c;用于在编译阶段未生成class之前对源码中的注解进行扫…

小红书数据分析:首播卖6亿,小红书直播开启新纪元!

5月22日&#xff0c;章小蕙在小红书开启了第一场带货直播。继董洁之后&#xff0c;小红书又迎来一位超级带货KOL。 据千瓜数据显示&#xff0c;相关话题#章小蕙小红书直播#上线不到30天&#xff0c;话题浏览量就高达2814.89万&#xff0c;笔记互动量达22.24万。 图 | 千瓜数据…

Android 12.0下拉状态栏通知栏的通知设置默认展开

1.概述 在12.0的产品定制化中,对于SystemUI的定制也是常用的功能,而在下拉状态栏中的通知栏部分也是极其重要的部分,每条通知实时更新在通知栏部分,由于通知栏高度的限制,每条通知是默认收缩的,功能开发需要要求通知默认展开,所以就要从通知的加载流程分析 如图: 2.…

化工生产制造企业实施技术变革前要问自己的 6 个问题

化工企业将新技术&#xff08;大数据、人工智能、云计算、RFID、PDA、GIS&#xff09;引入到业务中&#xff0c;通过填补技术基础设施中的空白来帮助企业团队成员更高效、更有效地完成工作&#xff0c;是一项卓有成就的事情。但是&#xff0c;企业在急于快速实施新解决方案以获…

数字化时代,如何规范化搭建数据仓库?

数据仓库作为商业智能BI系统中的一部分&#xff0c;已经成长为了企业信息化建设中必不可少的重要支撑&#xff0c;在可见的未来&#xff0c;数据仓库还会随着信息化、数字化技术、理念、应用的落地&#xff0c;继续成长。 数据仓库是一个面向主题的、集成的、随时间变化但信息…

纽约时报对全球HR选出他们最想招聘的毕业生所来自的前150所大学

美国《纽约时报》对全球2500个HR部门和2000位企业的CEO发出了问卷&#xff0c;排名选出他们最想招聘的毕业生所来自的大学 1哈佛大学。 美国 2耶鲁大学。 美国 3 剑桥大学 英国 4 牛津大学 英国 5 斯坦福大学。 美国 6 马萨诸塞州理工学院 美国 7 哥伦比亚大学。 美国 8 普林斯…

JavaEE(系列17) -- 线程安全的集合类

目录 1. 多线程环境使用ArrayList 1.1 使用同步机制 (synchronized 或者 ReentrantLock) 1.2 Collections.synchronizedList(new ArrayList); 1.3 使用 CopyOnWriteArrayList 2. 多线程环境使用队列 3. 多线程环境使用哈希表 3.1 Hashtable 3.2 ConcurrentHashMap 4. 相关面试…

北邮22信通:利用BF算法解决实际问题:题目实战(超详解)设计函数 char *locatesubstr(char *str1,char *str2)

北邮22信通一枚~ 跟随课程进度每周更新数据结构与算法的代码和文章 持续关注作者 解锁更多邮苑信通专属代码~ 获取更多文章 请访问专栏~ 北邮22信通_青山如墨雨如画的博客-CSDN博客 目录 题干描述 解析 1.string库函数 2.使用KMP算法思想 注解1 注解2 注解3 题…

Mysql基础 — DDL、DML、DQL、DCL、函数、约束

文章目录 Mysql基础一、数据模型1.1 关系型数据库与非关系型数据库1.2 Mysql 数据模型 二、SQL2.1 SQL 通用语法2.2 SQL分类2.3 DDL2.3.1 数据库操作2.3.2 表操作 — 创建 & 查询2.3.3 表操作— 修改&删除2.3.4 数据类型2.3.4.1 数值类型2.3.4.2 字符串类型2.3.4.3 日期…

LabImg安装与使用

一、LabImg安装 安装命令语句 pip install labelimg 或 conda install labelimg 后者&#xff0c;可以有效避免依赖库缺失情况。一般&#xff0c;第一个命令语句无法安装时&#xff0c;可以尝试用第二个命令语句。 示例 以管理员身份打开命令提示符窗口&#xff0c;输入…

js的堆栈和垃圾回收机制(gc)

js的堆栈和垃圾回收机制&#xff08;gc&#xff09; 本文目录 js的堆栈和垃圾回收机制&#xff08;gc&#xff09;堆栈深拷贝和浅拷贝实现深拷贝 垃圾回收机制栈溢出概念垃圾产生算法策略V8引擎的优化新生代&#xff1a;Scavenge 算法老生代&#xff1a;标记-清除-整理 算法 堆…

厚积薄发丨美格智能子公司众格智能荣获“张江之星”“闵行区企业技术中心”双项企业授牌

5月23日下午&#xff0c;2023年闵行科技节开幕式在大零号湾科创大厦举行。在开幕式“创蝶变智造”板块&#xff0c;美格智能技术股份有限公司全资子公司众格智能科技&#xff08;上海&#xff09;有限公司&#xff08;以下简称&#xff1a;众格智能&#xff09;入选“张江之星”…

加速数实融合,数据交易3.0模式上新

数据交易市场将迎来真正的突破&#xff1f; 目前看的确如此。随着去年底“数据二十条”的颁布&#xff0c;业界普遍认为数据基础制度将加速走向落地与完善&#xff0c;数据要素化今年有望迎来全面提速&#xff0c;将极大促进数据交易市场走向规模化。 IDC预测&#xff0c;到2…

QMI8658 - 姿态传感器学习笔记 - Ⅲ

文章目录 1.复位1.1 上电复位&#xff1a;1.2 推荐工作条件 2. 校准(COD)2.1 校准步骤2.2 校准注意事项&#xff1a;2.3 校准状态指示2.4 校准参数更新 3. 自检3.1 加速度计自检3.2 陀螺仪自检 4. Ctrl94.1 写Ctrl94.2 读Ctrl94.3 Ctrl9详细命令说明 5. 中断5.1 同步采样模式5.…

直接缓存访问DCA

直接缓存访问DCA&#xff1a;网卡原本DMA写是将接收到的数据帧写入系统内存&#xff0c;DCA机制是网卡DMA写输入的数据能直接发送到属于CPU内部的L2高速缓存中&#xff0c;从而提高网络IO的性能。 设备驱动程序要初始化网卡的DCA功能&#xff0c;将CPU ID号&#xff08;通过获取…

CentOS安装Whisper | RedHat安装Whisper | 服务器上安装Whisper

1、升级Python版本&#xff08;可选&#xff09; CentOS 7.9 系统默认安装的Python版本有两个&#xff0c;如果输入python -V我们看到的是python2的版本信息&#xff0c;如果我们输入python3 -V我们看到的是python3的版本信息。 由于whisper要求使用的是python版本是在3.8到3…

Linux(Ubuntu)安装和使用Edge浏览器

全文内容完全由AI创作&#xff0c;并通过人工核验&#xff0c;感谢各位的阅读。 Microsoft Edge是一款现代化的浏览器&#xff0c;它拥有众多功能和强大的性能&#xff0c;为用户带来更加流畅的浏览体验。 Edge最近推出了分屏功能&#xff0c;支持一个窗口同时显示两个选项卡&…

MySQL基础 — 多表查询以及事务管理

文章目录 MySQL基础 — 多表查询以及事务管理一、多表查询1.1 对应关系1.2 准备数据1.3 概述1.4 内连接1.5 外连接1.6 自连接1.7 联合查询 union1.8 子查询1.8.1 标量子查询1.8.2 列子查询1.8.3 行子查询1.8.4 表子查询 二、事务2.1 简介2.2 操作演示2.3 控制事务2.3.1 控制事务…

深入浅出Vite:深入理解 Rollup 的插件机制

上一节我们学会了 Rollup 构建工具的使用&#xff0c;相信你已经对 Rollup 的基础概念和使用有了基本的掌握。同时我们也知道&#xff0c;仅仅使用 Rollup 内置的打包能力很难满足项目日益复杂的构建需求。对于一个真实的项目构建场景来说&#xff0c;我们还需要考虑到模块打包…