将网站收藏汇集一处,我是这样用 Notion API 搭建个人「剪藏」的
2022-3-31 11:32:15 Author: sspai.com(查看原文) 阅读量:90 收藏

我是如何用「Notion API」管理网站「收藏夹」的?

Matrix 首页推荐

Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。

文章代表作者个人观点,少数派仅对标题和排版略作修改。


前言

大家好,我是 Graham。

这是我在少数派发表的第一篇文章。甚至,这是我在所有平台发表的第一篇文章。作为一名长期潜水员,一直都在学习大家是如何利用各种工具提升效率的。依稀记得当初申请成为 Matrix 创作者的时候,是想分享一些 LaunchBar 的小技巧,后来因为那段时间忙着学习就不了了之了。

今天想跟大家分享的是我如何使用 Notion API 来管理我在各个网站收藏夹的小方法。

最终的效果

关于 Notion API

在几个月前,我浏览少数派才知道 Notion 开放了自己的 API,方便用户通过编程的方式丰富自己的 Notion。关于 Notion API 的介绍和使用方式,这里推荐少数派上的两篇文章:当 Python + Notion API,你就可以用「Notion 助手」轻松调试自己的小机器人以全新的 Notion API,尝试全新的记账方式 。我正是从这两篇文章中学到了如何操作 Notion API。

但是这两篇文章提到的关于 Notion API 的应用,一个是关于吃药,一个是关于记账,都不符合我使用 Notion 的习惯。这些生活琐事我还是倾向于使用一些提醒事项软件(Due、2Do、Things 等等),所以一直都没有怎么重视 Notion API 的应用。直到前不久,我突然发现一个困扰我很久的痛点可以很方便的通过 Notion API 来解决。这个痛点就是「收藏夹管理」。

收藏夹管理

作为一名仓鼠星人,浏览少数派、知乎等 App 时,看到一篇喜欢的文章就毫不犹豫地加入收藏夹。久而久之,日渐臃肿的收藏夹整理起来就特别费劲。

而且,几乎所有的 App 收藏夹都没有提供「标签」功能。知乎可以选择收藏到一个自己创建的收藏夹,而少数派、什么值得买、小红书等网站甚至只能收藏到默认收藏夹。B 站可能是最能满足我所说的标签功能的软件了,收藏视频的时候可以选择收藏到多个自己创建的收藏夹。那么有没有一种方法能给少数派等网站加上「标签」功能呢?(这里期待少数派官方能够上线这个功能哟。)

有些人可能会将一些喜欢的文章集中发送到一个信息处理中心然后添加标签,例如 flomo。但是我还是喜欢在各个软件里一秒点击收藏的快感,而不是每次看到喜欢的文章,还需要点击分享,等半天加载,然后发送到 flomo 中(当然不是因为我没钱买 Flomo Pro)。

话不多说,现在就介绍一下我具体的工作流程。接下来的内容可能会有点硬核,如果想要完全看懂,需要掌握以下一些相关知识:爬虫Mongo数据库 以及Notion API

整体思路是:通过爬虫获取自己的收藏夹内容并保存到数据库中,然后将这些内容通过 Noiton API 发送到自己的 Notion 中,然后在 Notion 中手动添加标签,以此来达到我们的目的。

获取收藏夹内容

我们遇到的第一个挑战,就是如何获取自己的收藏夹内容?

由于之前我有写过一些小爬虫,所以自然而然就想到了利用爬虫来获取收藏夹的方式。由于各个网站的爬虫方式各不相同,以下的爬虫我们就以「什么值得买」为例。

抓包

我使用的手机是 iPhone XR,使用 Thor 这个 App 进行抓包后(具体怎么抓包建议自行搜索,不方便展开细说),我们可以发现什么值得买的获取收藏夹链接为:

其中 Cookies 是网站用来鉴别你是否为用户的关键。通过 Thor,我们可以将这个访问链接的过程复制为 curl 命令,这个命令包含了你要访问的网站以及传输的数据。接下来我们可以访问 这个网站 将刚刚复制的 curl 命令转换成 python 代码。

到这里有过爬虫经验的小伙伴应该就能很轻易地写出完整的程序了。访问这个什么值得买的 api 我们可以获取到你收藏的所有文章标题、链接、图片等信息。具体的代码如果大家有需要我可以在评论区发布出来,这里就不方便展开了。

保存到数据库

其实获取到收藏夹信息之后我们就可以直接通过 Notion API 发送给 Notion 了。这里我多此一举保存到数据库其实只是为了方便日后的迁移工作,毕竟谁也不能保证 Notion 的在线服务会一直很「保险」。如果你觉得你并不需要保存到数据库中,那么这一节的内容完全可以略过。

我选用的数据库是 Mongo。之所以没有采用常用的 MySQL,是因为 Mongo 是一种非关系型数据库,里面的数据是以 json 的形式存储的,对每一个字段的类型并没有严格的限制,很方便作为爬虫的数据库(因为爬虫经常会遇到一些莫名其妙的数据)。

这里我推荐通过 Docker 来创建 Mongo 服务。Docker 的容器技术可以快速地部署各种服务,而不用去担心各种环境的配置。而且部署 Mongo 服务也特别简单,只需要一行命令即可:docker run -itd --name mongo -p 27017:27017 mongo --auth。具体的操作可以参考 这个教程

部署好 Mongo 服务后,我们创建一个 favorites 数据库,然后创建一个 smzdm 集合(类似于 MySQL 的表)作为我们存储什么值得买收藏夹的目的地。

接下来就是在代码中进行修改,将从 api 获取到的数据保存到 Mongo 中。具体存储哪些字段可以自己控制,不过我个人建议只需要存储文章标题、链接、图片等基础信息就好,我们存到 Notion 中的只是一个书签,具体查看文章最好还是通过文章链接来访问。毕竟 Notion 并不能很好地渲染 html 的所有内容。而保存图片则是为了方便在 Notion 的 Board 视图里查找文章。

Mongo 中的数据

保存到 Notion

终于讲到了 Notion API!现在我们的数据库里已经有了所有的收藏夹信息,那么如何发送到 Notion 呢?

准备工作

首先我们要在 Notion 中创建一个 Database 用于保存收藏夹内容,具体的字段根据数据库中的内容动态调整。

然后点击右上角的 Share - copy link ,复制出来的链接是一串形如https://www.notion.so/ab****cd?v=12****34的链接,其中的ab****cd就是这个 database 的 id。

除此之外,我们还需要一个机器人。创建 Notion 机器人的方法强烈建议参考 以全新的 Notion API,尝试全新的记账方式 一文,讲述的非常详细,我就不重复造轮子了(不是因为懒)。

创建完机器人之后,别忘了将它 invite 到刚刚创建的 database 中,只有这样这个机器人才可以帮助你实现各种指令。

调用 Notion API

从 Mongo 数据库中读取数据之后,我们通过 POST 方式向 Notion 发送我们的数据。

data = {
    "parent": {
        "database_id": "ab****cd"
    },
    'properties': {
        "Name": {"title": [{"type": "text", "text": {"content": smzdm['article_title']}}]},
        "URL": {"url": smzdm['article_url']},
        "img": {"files": [
            {
                "external": {
                    "url": smzdm['article_img']
                },
                "name": smzdm['article_id'],
                "type": "external"
            }
        ]},
        "收藏时间": {"date": {"start": smzdm['fav_time']}},
        "评论数": {"number": int(smzdm['article_comment'])},
        "收藏数": {"number": int(smzdm['article_collection'])},
        "article id": {"number": int(smzdm['article_id'])},
    }
}

response = requests.request("POST", "https://api.notion.com/v1/pages", json=data, headers=headers)

将所有的数据组装成这个格式。其中parent里的database_id就是在前文中提到的ab****cd,这代表了要向哪个 database 插入数据。而 properties 中则是各个字段,每个字段需要与 Notion 中对应的字段属性相匹配。例如我设置的 URL 字段是 url 属性,那么在这里我们就需要在外面套上一个url的大括号。

值得一提的是,img字段我设置成了 Files & Medias 格式,这种格式既支持自己上传的图片,也支持图床链接。恰好 什么值得买 返回的图片链接可以用在这里。由于是图床链接,所以需要像上面的 data 一样组装格式,否则可能无法正确上传照片。

组装完数据后运行代码,我们就可以将数据库中的所有内容发送到 Notion 中啦,最终的效果如下图所示

其中tag字段是我添加的,我们可以很方便的使用 Notion 来给我们收藏夹里的文章打标签啦,大功告成!你可以添加一个status字段来标识这篇文章你是否已经看完,有什么感想也可以写在 Notion 对应的页面中。

不止如此,我们还可以添加一个 board 视图来更直观的看到每篇文章以及它们对应的标签。

定时任务 & 拓展

我们肯定不希望每次同步到 Notion 都需要手动执行代码,一个定时任务是最好的选择。

我使用的是 Mac,Unix 的设计可以方便地使用 crontab来创建定时服务。如果你使用的是 Windows,那么计划任务也可以满足我们的需求。

通过向crontab中添加一条运行python的命令,我们就可以将收藏夹定时更新到 Notion 啦。crontab的具体用法也请自行查阅哦~

crontab 设置

目前我将什么值得买、小红书、少数派三个网站的收藏夹都搬运到了我的 Notion。通过在 Notion 里给它们打标签能让我快速找到我想要的信息。

你还可以使用钉钉机器人服务,每次有数据插入 Notion 的时候都会钉钉提醒你有新的文章被加入 Notion,方便提醒你给新文章打标签。

钉钉机器人通知(忽略机器人头像)

总结

这篇文章向大家介绍了 Notion API 的一种应用——管理你的收藏夹。通过这种方式,极大方便了我管理各个网站的收藏夹。如果大家有更好的应用场景,欢迎在评论区提出意见,谢谢大家观看啦~

关联阅读

> 下载 少数派 2.0 客户端、关注 少数派公众号,解锁全新阅读体验 📰

> 实用、好用的 正版软件,少数派为你呈现 🚀

© 本文著作权归作者所有,并授权少数派独家使用,未经少数派许可,不得转载使用。


文章来源: https://sspai.com/post/72090
如有侵权请联系:admin#unsafe.sh