知乎没有提供标题所问的功能

知乎是一个问答平台,截止目前 2019.12.14,没有提供定向搜索某用户的文章、想法等功能,只提供了问题检索功能。下面的图片中没有任何文章搜索框!




知乎 用python 知乎 用户搜索_知乎


作为程序员,既然知乎不提供,那就自己写。

偷懒方案(也是最快的方案)

===重大更新===

发现一个新的 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们出现的原理都


知乎 用python 知乎 用户搜索_搜索_02


后面看看 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 输入这两个参数就行了,返回结果如下


知乎 用python 知乎 用户搜索_搜索_03

折叠展示 JSON 结构

知乎 用python 知乎 用户搜索_用户名_04

JSON 详细内容

用户 id 获取的 api 地址:


https://www.zhihu.com/api/v4/members/tqz520/articles


知乎个性域名中的用户名,也就是 tqz520 这个值


知乎 用python 知乎 用户搜索_用户名_05


结果:


知乎 用python 知乎 用户搜索_知乎 用python_06


展开 data 里面的任意一个元素里面的 author,即可获取用户 id


知乎 用python 知乎 用户搜索_用户id可以出现在url中吗_07


实现方案

在输入框输入要搜索的用户的域名地址中的用户名: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 主要用来实现代理,解决前端的跨域问题