bigonion 发表于 2022-12-13 15:10:00

草履虫都能看懂的chatGPT-AI接入谷歌必应实战教学(二)

本帖最后由 bigonion 于 2023-3-11 12:38 编辑

> 本帖最后由 bigonion 于 2022-12-14 19:52 编辑

> 本帖最后由 bigonion 于 2022-12-14 19:49 编辑

# chatGPT 接入搜索引擎实战教学(二)eventStream的接收
# chatGPT tools plus++
<a href="https://greasyfork.org/zh-CN/scripts/456131-chatgpt-tools-plus-cookie%E7%89%88"><img src="https://img.shields.io/badge/GreasyFork-v1.3.2-black.svg" alt="example"></a><a href="https://github.com/LiWeny16/chatGPT-tool-plus/blob/main/LICENSE"><img src="https://img.shields.io/badge/LICENSE-MIT-pink.svg" alt="example"></a><a href="https://github.com/LiWeny16/chatGPT-tool-plus"><img src="https://img.shields.io/badge/Link-Github-2.svg" alt="example"></a> <a href="https://scriptcat.org/script-show-page/756"><img src="https://img.shields.io/badge/ScriptCat-v1.3.2-blue.svg" alt="example"></a>


## 难度级别
+ **草履虫头目**
+ ~~大妈~~
+ ~~小学生~~
+ ~~博士生~~

## 关于我和zhengbangbo的故事
<br>

在他注意到我借鉴了他接收SSE的方式代码后,他给我发了私信:
!(https://raw.githubusercontent.com/LiWeny16/chatGPT-tool-plus/main/source/zhengbanbo.png)
受到他的启发,我开始继续追寻如何接收SSE类型,找来找去也没有关于油猴的资料,就当我`陷入迷茫与绝望的时候`
我想到了福尔摩斯的一句话
```
排除了所有不可能,剩下的就是真相   --福尔摩斯
```

## 转机

这也就是说,油猴一般只会用GM_xmlhttpRequest函数来跨域,而这里必须跨域请求,那么,再去仔细看看GM_xmlhttpRequest的参数说不定会有效果,于是我又看了几遍details参数,欸,等等,这是什么?

+ onloadstart callback to be executed on load start, provides access to the stream object if responseType is set to "stream"

这不就是stream类型吗,我试试他返回了什么数据类型吧,于是在
+ responseType one of arraybuffer, blob, json or stream

responseType 里面设置为stream ,onloadstart 里面打印返回的结果
<br>!(https://raw.githubusercontent.com/LiWeny16/chatGPT-tool-plus/main/source/response.png)
是Readablestream类型,等等,我记得之前在看到fetch接收的时候也见过这个类型
[https://developer.mozilla.org/zh-CN/docs/Web/API/ReadableStream/ReadableStream](https://developer.mozilla.org/zh-CN/docs/Web/API/ReadableStream/ReadableStream)<br>
在我仔细的翻找之下,终于找到了stream的构造以及接收方法,以下是接收方法

```js
      onloadstart:(stream)=>{
            const reader = stream.response.getReader();
            let charsReceived = 0;
            reader.read().then(function processText({ done, value }) {
                if (done) {
                  return;
                }
                charsReceived += value.length;
                console.log(value)
                return reader.read().then(processText);
            });
      },
      responseType:"stream",
```
以下是具体解释:<br>
+ Readablestream类型带有一个getReader方法,返回一个
+ ReadableStreamDefaultReader类型
!(https://raw.githubusercontent.com/LiWeny16/chatGPT-tool-plus/main/source/reada.png)<br>
!(https://raw.githubusercontent.com/LiWeny16/chatGPT-tool-plus/main/source/readableSTream.png)<br>
<br>

+ 同时这个类型带有一个重要的read方法<br>
<br>
<br>

!(https://raw.githubusercontent.com/LiWeny16/chatGPT-tool-plus/main/source/readablemethod.png)<br>
<br>


+ read()方法返回一个promise<br>
promise.then方法中就带着done和value参数
done表示传输是否结束,结束为1,没结束为0
value则表示每一次流传输的数据
charsReceived代表已经接收的数据长度
接着processText最后return 自己,即reader.read().then(processText)
形成循环递归调用
最后我们输出以下value来看看结果吧!
<br>
<br>
<br>
<br>

我超,真的拿到了数据!但是怎么是一堆**不停打印的**Uint8Array数组啊
!(https://raw.githubusercontent.com/LiWeny16/chatGPT-tool-plus/main/source/values.png)

难道是?

<br>
<br>
# 关于
作者:Onion
邮箱:bigonion@bigonion.cn
声明:未经本人同意,禁止转载、搬运、抄袭!

NameSpace: https://bigonion.cn
Origin:https://bigonion.cn/blog   

## (二)完结
# 传送门

+ (https://bbs.tampermonkey.net.cn/thread-3857-1-1.html)
+ (https://bbs.tampermonkey.net.cn/thread-3873-1-1.html)

李恒道 发表于 2022-12-13 15:56:08

难道是字符串的16进制?

王一之 发表于 2022-12-13 16:19:34

我整个类似的网页试试

bigonion 发表于 2022-12-13 16:27:37

李恒道 发表于 2022-12-13 15:56
难道是字符串的16进制?

嘻嘻不对

tfsn20 发表于 2022-12-13 17:15:15

字符串ascii编码的10进制(汉字是unicode编码的10进制),用内存查看器就可以看到文本内容了,
!(data/attachment/forum/202212/13/171024o6t9hcvhj8266tq7.png)

bigonion 发表于 2022-12-13 17:21:41

tfsn20 发表于 2022-12-13 17:15
字符串ascii编码的10进制(汉字是unicode编码的10进制),用内存查看器就可以看到文本内容了,
!(data/at ...

恭喜gg答对啦!

tfsn20 发表于 2022-12-13 17:23:39

bigonion 发表于 2022-12-13 17:21
恭喜gg答对啦!

{:4_94:}嘿嘿,哥哥教程好棒棒{:4_94:}(指学到了),ggnb

王一之 发表于 2022-12-13 17:56:37

http://test-case.ggnb.top/stream

我写了一个steam的网页,不知道和哥哥的效果一不一样,晚点试试

wwwwwllllk 发表于 2022-12-13 18:20:35

ggnb!!!!!!!!

脚本体验师001 发表于 2022-12-13 18:51:27

小母牛爬树只用两条前腿,哥哥确实有点硬
页: [1]
查看完整版本: 草履虫都能看懂的chatGPT-AI接入谷歌必应实战教学(二)