知乎没有提供标题所问的功能
知乎是一个问答平台,截止目前 2019.12.14,没有提供定向搜索某用户的文章、想法等功能,只提供了问题检索功能。下面的图片中没有任何文章搜索框!
作为程序员,既然知乎不提供,那就自己写。
偷懒方案(也是最快的方案)
===重大更新===
发现一个新的 API :https://zhuanlan.zhihu.com/api/columns/tqz-java/submission_candidates?keyword=%E7%9F%A5%E4%B9%8E
在给专栏投稿时发现文章搜索接口,那么上面链接里面的 tqz-java 是我的专栏名,keyword 是要检索的位置的部分内容。那么把以上这两个关键信息改成你自己的就可以实现搜索了,返回的是 json
===========
执行此 URL 即可。
[ q=tqz%20们出现的原理都 ]: 表示要检索的条件,tqz 是用户名,%20 是空格的意思,后面就是要检索的部分内容
https://www.zhihu.com/search?type=content&q=tqz%20们出现的原理都
后面看看 type=content
其他方案:手写代码实现更高级的自定义检索
实现前提
首先抓包,发现知乎已经和提供了文章搜索功能,只是在网页端没有提供。
api 如下
https://api.zhihu.com/search_v3?correction=1&excerpt_len=150&q=Java&restricted_field=member_hash_id&restricted_scene=member&restricted_value=d2a4150b3cdac93a8758279a468b553a&t=general
q=java 表示检索的内容
restricted_value=d2a4150b3cdac93a8758279a468b553a 表示用户的 id
给该 api 输入这两个参数就行了,返回结果如下
折叠展示 JSON 结构
JSON 详细内容
用户 id 获取的 api 地址:
https://www.zhihu.com/api/v4/members/tqz520/articles
知乎个性域名中的用户名,也就是 tqz520 这个值
结果:
展开 data 里面的任意一个元素里面的 author,即可获取用户 id
实现方案
在输入框输入要搜索的用户的域名地址中的用户名:tqz520,以及要检索的文章的相关内容(可以是标题也可以是文章部分内容)。然后执行搜索,搜索过程分为两步:
第一步
通过 https://www.zhihu.com/api/v4/members/ 域名用户名 /articles 获取到一个 JSON,然后解析它:
let
第二步
拼接文章搜索 api:
https://api.zhihu.com/search_v3?correction=1&excerpt_len=150&q=要检索的内容&restricted_field=member_hash_id&restricted_scene=member&restricted_value=用户 id &t=general
第三步
执行第二步的 URL 并解析返回的数据,展示在界面上
优化
① 输入完域名用户名后就立马执行第一个获取用户 id 的 api,快速获取用户 id
② 在输入检索条件时异步请求,实时显示数据(边输中检索)
技术方案选型
TypeScript + ElementUI + Java
Java 主要用来实现代理,解决前端的跨域问题