我的稍后阅读工具:Notion
背景
Notion:all in one
我习惯将资料统一归档到Notion,因此在手机微信公众号内容作为稍后阅读保存到Notion就比较麻烦,需要文章链接,再打开Notion,再打开到对应的Datebase,新建一条数据,编辑标题,并粘贴链接。
框架介绍
iOS/Android 复制网页链接,通过快捷指令/ Automate发送给Worker
Worker收到链接后,获取链接地址的文章标题,将标题及URL通过Notion API保存到指定的Datebase
服务端搭建
Notion API
<#&!15#&!>创建Notion Integration及获取Notion API key在Integration 页面点击「Create new integration」可以创建Integration ;
填写workspace、Name,点击「Submit」;
在Secrets页面,点击「Show」,即可复制获取Notion API key。
授权 Notion Integration
点击 Datebase 右上角的「…」;
再点击「Connect to」;
选择你的 Integration Name。
CF Worker
在左侧导航栏中选择「Workers 和 Pages」;
点击「创建应用程序」;
点击「创建Worker」;
填写名称「notion」,点击部署;
点击编辑代码;
删除所有代码,粘贴以下代码,并在sendToNotion函数中修改3个地方,
database_id :网页端打开对应的Database,查看网页链接,在「?v=」后的32个字符就是database_id ;
Authorization:之前Integration中获得的Notion API key,以secret_开头;
properties:属性结构则需跟你的Database结构一致,通过postman发送get命令获取你的Database结构,修改相应内容。或者依据我的Datebase复制建立(链接),则不需要修改;
addEventListener('fetch', event => { event.respondWith(handleRequest(event.request)) }) async function handleRequest(request) { if (request.method !== 'GET') { return new Response('Only GET requests are allowed.', { status: 405 }) } // 从请求的 URL 中获取要获取标题的 URL const url = new URL(request.url) const targetUrl = url.searchParams.get('url') console.log(targetUrl) // 如果 URL 为空,则返回错误 if (!targetUrl) { return new Response('URL parameter is missing.', { status: 400 }) } try { // 发起对目标 URL 的 GET 请求 const response = await fetch(targetUrl) if (!response.ok) { throw new Error('Failed to fetch URL: ' + response.status) } // 从响应中提取 HTML 内容 const html = await response.text() // 从 HTML 中提取标题 const titleMatch = html.match(/(.*?)/i) let title = titleMatch ? titleMatch[1] : 'Title not found' //微信公众号获取标题 if (!title) { const ogTitleMatch = html.match(//i) title = ogTitleMatch ? ogTitleMatch[1] : null } console.log(title) // 将标题发送到 Notion API await sendToNotion(title, targetUrl) // 返回标题 return new Response(title, { status: 200 }) } catch (error) { // 处理异常情况 return new Response('Error fetching URL.', { status: 500 }) } } async function sendToNotion(title, url) { try { const newData = { parent: { // database_id: "YOUR_DATABASE_ID" "database_id": "XXXXXXXXX" }, "properties": { "order": { "checkbox": false }, "URL": { "url": url }, "Tags": { "multi_select": [] }, "Name": { "title": [ { "text": { "content": title } } ] } }, "children": [ { "object": "block", "bookmark": { "caption": [], "url": url } } ] } const notionApiUrl = 'https://api.notion.com/v1/pages' // 发送 POST 请求到 Notion API const response = await fetch(notionApiUrl, { method: 'POST', headers: { // 'Authorization': 'Bearer YOUR_NOTION_API_KEY', 'Authorization': 'Bearer secret_*******************', 'Content-Type': 'application/json', 'Notion-Version': '2022-06-28' }, body: JSON.stringify(newData) }) // 返回 Notion API 的响应 console.log(response) return response } catch (error) { // 处理错误情况 return new Response('Error occurred: ' + error.message, { status: 500 }) } }
```
7.点击「保存并部署」;
8.获取Worker的API地址(建议增加自己域名镜像绑定,自行搜索);
9.在浏览器中输入API地址加url参数即可实现在在Datebase中添加网页标题及URL,eg: https://notion.xxxxxx.workers.dev/?url=https://www.baidu.com
Turning:使用postman进行调试
客户端使用
iOS(快捷指令)
获取快捷指令,链接
修改Worker链接
在负一屏增加快捷指令
Android(Automate)
获取指令,链接
修改Worker链接
在下拉通知栏添加快捷菜单
嘻哈er
校验提示文案
小张认为很值
校验提示文案
Pro_96
校验提示文案
值友1777552402
校验提示文案
warjiang
校验提示文案
yezhuq
校验提示文案
我就是杠精
校验提示文案
Phryne
校验提示文案
ysl708
校验提示文案
xworld
校验提示文案
拍你小屁屁
过几年再看。
校验提示文案
风屿浪
校验提示文案
罗刹大介
校验提示文案
彼黍离离
校验提示文案
HIKELEX
校验提示文案
VOVOO
校验提示文案
值友5291838973
校验提示文案
c2烦了
校验提示文案
367ang
校验提示文案
食堂首席墩子
校验提示文案
虾仔7211
校验提示文案
surfman
校验提示文案
黑色的五彩斑斓
校验提示文案
一枝独秀2024
校验提示文案
善格佳物
校验提示文案
冰糖桃罐头
校验提示文案
dwl777
校验提示文案
湖南第一师范生
校验提示文案
Huso_huso
校验提示文案
小短手的设计师
校验提示文案
00JERRY00
校验提示文案
银杏树88
校验提示文案
黑暗中起飞
校验提示文案
小情歌52531
校验提示文案
fayee
我也根据database修改了代码。
校验提示文案
flying-v6
校验提示文案
uufoly
校验提示文案
翩翩逐晚风猪
校验提示文案
食堂首席墩子
校验提示文案
367ang
校验提示文案