$ ls ~yifei/notes/

知乎 API v4 整理

Posted on:

Last modified:

2023 年更新:

知乎现在已经不用这套 API 了,但是还没有关闭访问,而且这套 API 个别端点是没有验证的,可以说是一个漏洞了。


知乎站内一共分为以下几个实体,括号中是知乎在 API 中采用的英文名称:

  • 用户(member)
  • 问题(question)
  • 回答(answer)
  • 评论(comment)
  • 话题(topic)
  • 专栏(column)
  • 文章(article)
  • 收藏夹(favlist)
  • 私信(message)
  • 想法(pin)

其中 回答 (answer) 是知乎站点的核心资源。下面我们逐个分析,然后依次找到相应的接口。

不同的 API

web 端 API

知乎 web 站点采用了 React 框架,因此绝大多数内容都是通过 ajax 加载渲染的,所以说一定有一个方便 js 访问的 API 存在,这个 API 主要用于 web 端访问

v4 API 都以 https://www.zhihu.com/api/v4/ 为前缀,在获得了登录的合法 cookies 之后,可以在浏览器中直接访问这些 API。

移动端 API

通过使用 mitmproxy 在 iOS 上抓包,发现知乎的 API 以 https://api.zhihu.com 开头。同时令人惊喜的是,只要有登录后的 Cookies,可以直接在 PC 浏览器中访问,连 UA 都不验证。

PS:收藏夹 API 无法打开。https://api.zhihu.com/collections/100776277/contents?excerpt_len=150

  • 移动端 API 前缀:api.zhihu.com
  • web 端 API 前缀:zhihu.com/api

返回结果和参数说明

知乎的 API 设计很有规律,基本符合 restful 规范。按照不同类型,大体可以分为两类:

  1. 根据 ID 获取某一个对象的 API。一般返回一个字典对象,比如某个用户的接口,某个问题的接口。比如:

    1. members/xxx,获取某个用户
    2. answers/xxx,获取某个答案
  2. 根据条件获取某个列表的 API。一般返回一个对象数组,比如粉丝列表接口,回答列表接口。每一个列表都有固定的分页信息(paging)字段,和数据(data)字段。比如:

    1. members/xxx/followers 获取某个用户的粉丝
    2. questions/xxx/answers 获取某个问题的答案

其中分页信息是这样的:

"paging": {
    "is_end": false,
    "is_start": true,
    "totals": 11,
    "previous": "https://www.zhihu.com/members/xxx/questions?limit=10&offset=0",
    "next": "https://www.zhihu.com/members/xxx/questions?limit=10&offset=10"
}

我们可以使用 limit 和 offset 两个参数来遍历所有的分页,其中 limit 的最大取值为 20。还可以使用 sort_by 来按不同的方式排序。sort_by 的可选值如下:

参数含义
default默认排序
created创建时间

对于每一个对象,接口都有一个默认的返回字段,如果想要获得更多信息,需要使用 include 参数指定需要的字段。知乎的多数接口都支持使用 include 参数,include 后面包含了一个,分隔的列表,用于指定额外获取的字段。另外还可以采用;分组,指定不同的字段集合。每一个对象都有不同的字段,后面的表中列出了不同对象的字段和含义。

对于返回一个对象的接口,直接指定字段即可,比如使用了参数:

include=voteup_count,business

会在结果中增加:

{
    "voteup_count": 704,
    "business": ...
}

对于复合在其他对象中的字段,需要使用 json path 指定前缀,对于使用了参数:

include=data[*].answer_count,articles_count

会在结果中增加:

{
    "paging": {
        ...
    },
    "data": [
        {
            ...
            "answer_count": 100,
            "articles_count: 100
            ...
        },
        ...
    ]
}

下面把接口逐个展开介绍一下。

用户信息

类别API地址文档测试
用户关注用户PUT members/xxx/followersP-
用户取关用户DELETE members/xxx/followersP-
用户关注列表GET members/xxx/followeesYY
用户拉黑用户POST members/xxx/actions/block-Y
用户取消拉黑用户DELETE members/xxx/actions/block-Y

自身信息

用于获取当前用户自身的基本信息。

请求:

GET https://www.zhihu.com/api/v4/me

响应:

{
    "avatar_url_template": "https://pic4.zhimg.com/71084089289f9820f529a9457a93db02_{size}.jpg",
    "uid": 26963964067840,
    "follow_notifications_count": 0,
    "user_type": "people",
    "badge": [],
    "editor_info": [],
    "default_notifications_count": 0,
    "url_token": "kongyifei",
    "id": "e8002099d78754129be0180a00890361",
    "messages_count": 0,
    "name": "Angry Bugs",
    "is_advertiser": false,
    "url": "http://www.zhihu.com/api/v4/people/e8002099d78754129be0180a00890361",
    "gender": 1,
    "headline": "requests 工程师",
    "avatar_url": "https://pic4.zhimg.com/71084089289f9820f529a9457a93db02_is.jpg",
    "is_org": false,
    "type": "people",
    "vote_thank_notifications_count": 0
}

结果说明:

  1. 其中 avatar_url_template 中的 size 可以使用 xl 替换。
  2. url_token 构成了用户的主页链接,是一个很重要的参数

用户可请求的字段如下:

参数说明说明
locations所在城市列表
employments工作经历列表
gender性别1 男性,0 女性
educations教育经历列表
business行业列表
voteup_count获得赞同int
thanked_Count获得感谢int
follower_count粉丝int
following_count关注数量int
cover_url封面图片
following_topic_count关注话题
following_question_count关注问题
following_favlists_count关注收藏夹
following_columns_count关注专栏
avatar_hue
answer_count回答数
articles_count文章数
pins_count想法数
question_count提问数
columns_count专栏数
commercial_question_count商业提问数
favorite_count
favorited_count
logs_count
included_answers_count
included_articles_count
included_text
message_thread_token一个用于私信的 token
account_status账户状态
is_active
is_bind_phone是否绑定手机
is_force_renamed是否被强制更名
is_bind_sina是否绑定微博
is_privacy_protected
sina_weibo_url新浪微博
sina_weibo_name新浪微博用户名
show_sina_weibo是否展示新浪微博
is_blocking是否拉黑此用户
is_blocked是否被此用户拉黑
is_following是否关注此用户
is_followed是否被此用户关注
is_org_createpin_white_user
mutual_followees_count共通关注数量
vote_to_count点了多少支持
vote_from_count收到多少支持
thank_to_count
thank_from_count
thanked_count
description介绍
hosted_live_count主持 live 数量
participated_live_count参与 live 数量
allow_message是否可以发私信
industry_category
org_name?
org_homepage?
badge[?(type=best_answerer)].topics?

修改个人信息

地址:https://www.zhihu.com/api/v4/me

请求:

PUT https://www.zhihu.com/api/v4/me

{"employments":[{"job":"","company":"今日头条(应用)"},{"job":"","company":"汤森路透 (Thomson Reuters)"}]}

响应:

{
    // 修改后的用户基本信息,结构同上
}

其他用户信息

地址:https://www.zhihu.com/api/v4/members/{URL_TOKEN|ID}

用于获取某个用户的相关信息。其中使用 url_token 或者是 ID 都是可以的。

请求:

https://www.zhihu.com/api/v4/members/e8002099d78754129be0180a00890361

响应:

{
    // 用户基本信息,结构同上
}

已关注用户

地址:https://www.zhihu.com/api/v4/members/{URL_TOKEN|ID}/followees

这个接口用来返回当前用户关注的用户。返回一个数组,其中每个元素就是上文中的 user 对象。

请求:

GET https://www.zhihu.com/api/v4/members/yksin/followees?include=data[*].answer_count

响应:

{
    "paging": {
        "is_end": false,
        "totals": 460,
        "previous": "http://www.zhihu.com/api/v4/members/yksin/followees?limit=10&offset=0",
        "is_start": true,
        "next": "http://www.zhihu.com/api/v4/members/yksin/followees?limit=10&offset=10"
    },
    "data": [
        {
            "avatar_url_template": "https://pic4.zhimg.com/v2-c87c70b1162392461b8bf8d014ccccf2_{size}.jpg",
            "type": "people",
            "name": "王瑞恩",
            "is_advertiser": false,
            "url": "http://www.zhihu.com/api/v4/people/6d443177eca4f4f098b4a4b63046b4b0",
            "user_type": "people",
            "headline": "老王力气大无穷 双手举起纸灯笼",
            "avatar_url": "https://pic4.zhimg.com/v2-c87c70b1162392461b8bf8d014ccccf2_is.jpg",
            "is_org": false,
            "gender": 1,
            "url_token": "wang-rui-en",
            "id": "6d443177eca4f4f098b4a4b63046b4b0",
            "answer_count": 100
        },
        ...
    ]
}

粉丝

地址:https://www.zhihu.com/api/v4/members/{URL_TOKEN|ID}/followers

这个接口用来返回当前用户的粉丝。返回一个数组,其中每个元素就是上文中的 user 对象。

GET https://www.zhihu.com/api/v4/members/yksin/followers

响应:

类似上文,略过

关注用户

PUT https://www.zhihu.com/api/v4/members/{URL_TOKEN|ID}/followers

返回结果未知

取关用户

DELETE https://www.zhihu.com/api/v4/members/{URL_TOKEN|ID}/followers

返回结果未知

问题

类别API地址
问题问题基本信息GET questions/xxx
问题创建问题POST questions
问题修改问题PUT questions/xxx
问题关注问题POST questions/275166974/followers
问题取关问题DELETE questions/275166974/followers
问题用户创建的问题GET members/xxx/questions
问题用户关注的问题GET members/xxx/following-questions
用户问题的关注者GET questions/xxx/followers
回答问题的回答GET questions/xxx/answers

基本信息

地址:https://www.zhihu.com/api/v4/questions/QUESTION_ID

用户获取某个问题的相关信息,其中 question_id 是这个问题的 id

GET https://www.zhihu.com/api/v4/questions/21241873


{
    "question_type": "normal",
    "created": 1371953970,
    "url": "http://www.zhihu.com/api/v4/questions/21241873",
    "title": "如何评价凤姐的诗?",
    "type": "question",
    "id": 21241873,
    "updated_time": 1386308423
}

问题字段 include 如下:

字段含义
author作者

创建问题

请求:

POST questions

{"type":0,"title":"炒土豆时如何避免过软?","topic_url_tokens":["19680763"],"detail":"","is_anonymous":false}

用户的问题

地址:https://www.zhihu.com/api/v4/members/{URL_TOKEN|ID}/questions

GET https://www.zhihu.com/api/v4/questions/21241873?include=author

{
    "paging": {...},
    "data": [
        {
            "question_type": "normal",
            "created": 1523350938,
            "url": "https://www.zhihu.com/questions/271758908",
            "title": "如何看待广电总局要求今日头条关闭内涵段子?",
            "type": "question",
            "id": 271758908,
            "updated_time": 1523350938
        },
         ...
    ]
}

回答

一般通过问题或者用户来获得一个回答的列表。

类别API地址文档测试
回答回答基本信息GET answers/xxxYY
回答发布答案POST questions/xxx/answers--
回答修改答案PUT answers/xxx--
回答删除答案DELETE answers/xxx--
回答赞同答案POST answers/xxx/voters {type: "up"}--
回答反对答案POST answers/xxx/voters {type: "down"}--
回答取消投票POST answers/xxx/voters {type: "neutral"}--
回答感谢答案POST answers/32522952/thankers--
回答没有帮助答案POST answers/32522952/unhelpers--
回答用户的回答GET members/xxx/answersYY
回答用户赞同的答案---
回答答案的赞同者GET answers/xxx/voters--
回答用户反对的答案---
回答答案的反对者---
回答收录回答的收藏夹GET answers/32522952/favlists--

回答字段如下:

字段含义
is_normal?
is_sticky?
collapsed_by?
suggest_edit?
comment_count评论数
collapsed_counts
reviewing_comments_count审核中评论数
can_comment能否评论
content内容
editable_content
voteup_count赞同数量
reshipment_settings
comment_permission评论权限
mark_infos
created_time创建时间
updated_time更新时间
relationship
is_author是否作者
voting
is_thanked是否已感谢
is_nothelp是否已没有帮助
upvoted_followees点赞的关注者

创建回答

POST questions/xxx/answers

{"content":"<p>加点醋就好了</p>","reshipment_settings":"allowed","comment_permission":"all","reward_setting":{"can_reward":false}}

问题的回答

地址:https://www.zhihu.com/api/v4/questions/21241873/answers

请求:

https://www.zhihu.com/api/v4/questions/21241873/answers

响应:

{
    "paging": {...},
    "data": [
        {
            "is_collapsed": false,
            "author": {
                ...
            },
            "url": "http://www.zhihu.com/api/v4/answers/20596524",
            "id": 20596524,
            "question": {
                "question_type": "normal",
                "created": 1371953970,
                "url": "http://www.zhihu.com/api/v4/questions/21241873",
                "title": "如何评价凤姐的诗?",
                "type": "question",
                "id": 21241873,
                "updated_time": 1386308423
            },
            "updated_time": 1386560586,
            "extras": "",
            "created_time": 1386236483,
            "type": "answer",
            "thumbnail": "",
            "is_copyable": true
        },
        ...
    ]
}

用户的回答

地址:https://www.zhihu.com/api/v4/members/{URL_TOKEN|ID}/answers

用于获取用户的回答,请求响应结构同上

评论

类别API地址文档测试
评论评论基本信息GET comments/xxxYY
评论发表评论POST {questions/answers/articles}/xxx/comments--
评论删除评论DELETE comments/xxx--
评论赞同评论POST comments/62471009/actions/like--
评论问题的评论GET questions/51408060/commentsYY
评论回答的评论GET answers/36174172/commentsYY
评论文章的评论GET articles/36174172/commentsYY
评论想法的评论-YY

评论的字段如下:

字段含义
"allow_reply"true,
"collapsed"false,
"created_time"1445988512,
"featured"false,
"reviewing"false,
"allow_vote"true,
"allow_like"true,
"is_author"false,
"can_recommend"false,
"id"100969802,
"is_delete"false,
"url""http://www.zhihu.com/api/v4/comments/100969802",
"content""你好請問 ralink 和 ramips 有什麼區別,刷小米路由器 mini 時要用哪種",
"allow_delete"false,
"can_collapse"false,
"type""comment",
"resource_type""answer"

评论列表

地址:https://www.zhihu.com/api/v4/{answers|articles|questions}/ID/comments

用于获取答案、文章、问题对应的评论

GET https://www.zhihu.com/api/v4/answers/30480156/comments

{
    "featured_counts": 0,
    "common_counts": 1,
    "collapsed_counts": 0,
    "reviewing_counts": 0,
    "paging": {...},
    "data": [
        {
            "id": 100969802,
            "type": "comment",
            "url": "https://www.zhihu.com/api/v4/comments/100969802",
            "content": "你好請問 ralink 和 ramips 有什麼區別,刷小米路由器 mini 時要用哪種",
            "featured": false,
            "collapsed": false,
            "is_author": false,
            "is_delete": false,
            "created_time": 1445988512,
            "resource_type": "answer",
            "reviewing": false,
            "allow_like": true,
            "allow_delete": false,
            "allow_reply": true,
            "allow_vote": true,
            "can_recommend": false,
            "can_collapse": false,
            "author": {
                "role": "normal",
                "member": {...}
            },
            "is_parent_author": false,
            "vote_count": 0,
            "voting": false,
            "disliked": false
        }
    ]
}

话题

类别API地址文档测试
话题话题基本信息GET topics/xxxYY
话题最佳回答者GET topics/19550994/best_answerers--
话题最新讨论GET topics/19550994/feeds/top_activity--
话题精华讨论GET topics/19550994/feeds/essence
话题创建话题---
话题修改话题---
问题话题下的问题GET topics/19550994/feeds/top_question--
话题父话题GET topics/19550994/parent
话题子话题GET topics/xxx/children

地址:https://www.zhihu.com/api/v4/topics/TOPIC_ID

用于获取某个话题的相关信息,其中 topic_id 是这个话题的 id。

GET https://www.zhihu.com/api/v4/topics/19850467

{
    "unanswered_count": 4253,
    "best_answerers_count": 185,
    "name": "今日头条(应用)",
    "url": "http://www.zhihu.com/api/v4/topics/19850467",
    "father_count": 2,
    "excerpt": "你关心的,才是头条!《今日头条》会聪明地分析您的兴趣爱好,理解您的阅读行为,自动为您推荐喜欢的内容,并且越用越懂你!",
    "introduction": "你关心的,才是头条!《今日头条》会聪明地分析您的兴趣爱好,理解您的阅读行为,自动为您推荐喜欢的内容,并且越用越懂你!",
    "followers_count": 12620,
    "avatar_url": "https://pic2.zhimg.com/50/14f39d483ad0cc2ebcae6306bd974b0e_hd.jpg",
    "best_answers_count": 695,
    "type": "topic",
    "id": "19850467",
    "questions_count": 4253
}

专栏和文章

类别API地址文档测试
专栏专栏基本信息GET columns/wangnuonuo--
专栏专栏文章列表GET columns/wangnuonuo/articles--
专栏创建专栏---
专栏关注专栏POST columns/wangnuonuo/followers--
专栏取关专栏DELETE columns/wangnuonuo/followers--
专栏专栏的关注者GET columns/wangnuonuo/followers--
文章文章基本信息---
文章发表文章---

专栏的字段如下:

参考:https://www.zhihu.com/api/v4/columns/wangnuonuo

字段含义
accept_submission接受投稿
title题目
comment_permission评论权限
updated
image_url头像
type类型:column
id专栏的 url 后缀
author作者

文章的字段如下:

参见:https://www.zhihu.com/api/v4/columns/wangnuonuo/articles

字段含义
"image_url"题图链接
"updated"1521005699,
"topics"[],
"excerpt"摘要
"admin_closed_comment": false,
"can_tip": false,
"excerpt_title": "",
"id": 34536955,
"voteup_count": 10068,
"upvoted_followees": [],
"voting": 0,
"author": {},
"url": "http://zhuanlan.zhihu.com/p/34536955",
"comment_permission": "all",
"created": 1521005343,
"comment_count": 577,
"is_title_image_full_screen": false,
"title": "其实,我们还有一个见霍金一面的机会",
"can_comment": {},
"type": "article",
"suggest_edit": {}

收藏

类别API地址文档测试
收藏收藏基本信息GET favlists/xxx--
收藏创建收藏夹---
收藏关注收藏夹---
收藏添加到收藏夹---
收藏删除文章---
收藏获取用户收藏列表GET members/xxx/favlists--
收藏获取收藏夹文章列表---
收藏获取收藏夹的关注人---

私信

类别API地址文档测试
私信私信基本信息---
私信获得私信列表GET me/message-threads--
私信发送私信---

想法

类别API地址文档测试
想法想法基本信息GET pins/xxx--
想法创建一条想法---
想法删除一条想法---
想法为一条想法鼓掌---
想法取消鼓掌---
想法获取想法列表GET members/xxx/pins--
想法获取用户鼓掌过的想法---
想法一条想法鼓掌的用户---

参考资料

  1. https://github.com/YaoZeyuan/ZhihuHelp/issues/89
  2. https://github.com/JimmyLv/jimmylv.github.io/issues/232
  3. https://github.com/lzjun567/zhihu-api/
WeChat Qr Code

© 2016-2022 Yifei Kong. Powered by ynotes

All contents are under the CC-BY-NC-SA license, if not otherwise specified.

Opinions expressed here are solely my own and do not express the views or opinions of my employer.

友情链接: MySQL 教程站