米露小窝
放弃个性,就和死了没什么区别
米露小窝

基于PHP的NotionAI第三方SDK

前言

之前我搭建了一个ChatGptQQ机器人给群友们使用,但是因为OpenaiAPI定价和账户难注册的问题暂停了,我就想能不能使用第三方的API来调用ChatGpt

之后有一个朋友送了我一个Notion的会员,我一看,他自带AI写作助手,我就想能不能把这个API抓下来用呢?

验证猜想

我先创建了一个文档,使用AI助手创建了一段文字,并打开F12开发者工具开始抓包:

https://upy.5k.work/2023/07/20230716031908372.png!/format/webp/lossless/true

我一看确实是抓到了,之后就是脱离浏览器看看能不能返回了

我先查看了发送的post请求的参数:

https://upy.5k.work/2023/07/20230716032829740.png!/format/webp/lossless/true

有一个spaceID和id,我们直接给数据先看看能不能返回

https://upy.5k.work/2023/07/20230716033230614.png!/format/webp/lossless/true

返回了401,Must be authenticated.

我一想,没带上Cookie

之后我去试了试,发现只要带上token_v2这个Cookie就可以了,我们再来试一遍:

https://upy.5k.work/2023/07/20230716033450158.png!/format/webp/lossless/true

成功返回了!

使用PHP实现

之后我们化简json体就可以了

经过我的测试,json体的ID可以随便填,于是我化简为了这样:

{"id":"ByMxmilu","context":{"type":"helpMeWrite","pageTitle":"AI","previousContent":"","restContent":"::: aside \r\n\r\n你好\r\n\r\n:::","prompt":"帮我输出PHP的Helloword"},"model":"openai-3","spaceId":"fcce861b-026b-482d-8f27-828dbd165414","isSpacePermission":false,"inferenceReason":"writer"}

之后我们使用PHP实现就可以了

我使用了curl来实现,具体代码如下:

<?php
function notionai($Cookie,$spaceId,$Text) {
$url = 'https://www.notion.so/api/v3/getCompletion';
$headers = [
    'Accept: application/x-ndjson',
    'Content-Type: application/json',
    'Cookie: token_v2='.$Cookie
    ];
$data = [
    "id" => "ByMxmilu",
    "context" => [
        "type" => "helpMeWrite",
        "pageTitle" => "AI",
        "previousContent" => "",
        "restContent" => "",
        "prompt" => $Text,
    ],
    "model" => "openai-3",
    "spaceId" => $spaceId,
    "isSpacePermission" => false,
    "inferenceReason" => "writer",
];
$data = json_encode($data);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
$pattern = '/"completion":"(.*?)"/';
preg_match_all($pattern, $response, $matches);
$completions = $matches[1];
$output = implode("", $completions);
return $output;
}

之后调用函数就可以返回了

https://upy.5k.work/2023/07/20230716034110118.png!/format/webp/lossless/true

后言

代码已经在Github开源,喜欢的可以点个star QWQ

另外我用MDUI写了一个简单的前端,可以来试试:gpt.appleblock.cn

赞赏
基于PHP的NotionAI第三方SDK》依据“CC BY-NC-SA 4.0”许可证进行授权。转载请附上出处链接并且不得将本作品用于商业目的 。要查看该许可证,请 点击

发表回复

textsms
account_circle
email

CAPTCHAis initialing...

米露小窝

基于PHP的NotionAI第三方SDK
前言 之前我搭建了一个ChatGptQQ机器人给群友们使用,但是因为OpenaiAPI定价和账户难注册的问题暂停了,我就想能不能使用第三方的API来调用ChatGpt 之后有一个朋友送了我一个Notion的…
扫描二维码继续阅读
2023-07-16