Awesome
停止维护
知乎已经更新为 https, 本项目 < 1.0.0 不能再使用了. 请升级
根据这些接口获取到知乎的数据,包括以下接口:
- User API (用户信息)
- Post API (专栏文章)
- Answer API (答案)
- Question API (问题)
- Topic API (话题)
欢迎贡献代码,一起完善知乎的接口
Getting Started
let zhihu = require('zhihu');
let username = 'shanejs';
zhihu.User.info(username).then(function(user){
console.log(user);
});
/* You'll get
{
answer: 14,
post: 0,
follower: 529,
profileUrl: 'https://www.zhihu.com/people/shanejs',
name: '狂飙蜗牛',
sex: 'male'
}
*/
Usage
User API
User.info(username)
根据用户名获取到用户的简要信息,username
为用户的唯一标识,参见个人主页的 url,或者设置中的个性域名(只能修改一次)。
比如请求这个用户 shanelau (zhihu.com/people/shanelau):
let zhihu = require('zhihu');
let name = 'shanelau';
zhihu.User.info(name).then(function(user){
console.log(user);
});
请求成功将会返回:
/*
* answer (number) 答题数量
* post (number) 文章数量
* follower (number) 跟随者数量
* profileUrl (string) 个人主页
* name (string) 名字
* sex (string) 性别
*/
{
answer: 5,
post: 0,
follower: 456,
profileUrl: 'https://www.zhihu.com/people/shanelau1021',
name: '狂飙蜗牛',
sex: 'male'
}
User.questions
用户的提问列表 @TODO
User.answers
用户的回答列表 @TODO
User.zhuanlansFocus
用户关注的专栏 @TODO
User.topic
用户关注的话题信息 @TODO
Post API
Post.info(postUrl)
获取专栏文章的详细信息
postUrl
文章的url地址
Example
zhihu.Post.info(postUrl).then(function(data){
// do something
});
Result
- Object
Post.page(name[, config])
获取专栏文章列表
name
专栏的英文名字, 例如:'bigertech'config
可选,{object} ,默认值如下
{
limit: 10 // 记录数
offset: 0 // 偏移量
}
Example
Post.likersDetail(postUrl[, config])
获取专栏文章的点赞者的详细信息
postUrl
专栏文章的url地址config
可选,配置对象,默认{limit:10, offset:10}
Result
用户数组。结构与User.info接口返回的一致。
{Array}
//User
Post.zhuanlanInfo(name)
获取专栏的信息
name
专栏的名字,比如bigertech
Result
{
followersCount: 22614,
description: '',
creator:
{ bio: '魅族营销中心招募设计师',
hash: '29c3654588fd4246bb90cbd345242d65',
description: '',
profileUrl: 'http://www.zhihu.com/people/linan',
avatar:
{ id: '24f3a654b',
template: 'http://pic2.zhimg.com/{id}\_{size}.jpg' },
slug: 'linan',
name: '李楠' },
topics: [],
href: '/api/columns/bigertech',
acceptSubmission: true,
slug: 'bigertech',
name: '笔戈科技',
url: '/bigertech',
avatar:
{ id: 'a4bf61d95',
template: 'http://pic3.zhimg.com/{id}\_{size}.jpg' },
commentPermission: 'anyone',
following: false,
postsCount: 173,
canPost: false,
activateAuthorRequested: false }
Post.comments(postUrl[, config])
获取专栏文章的评论信息
postUrl
专栏文章的url地址config
可选,配置对象,默认{limit:10, offset:10}
zhihu.Post.comments(`https://zhuanlan.zhihu.com/p/24241616?refer=chenyuz`).then(function(comments){
console.log(comments);
});
Result
评论数组
[
{ liked: false,
inReplyToCommentId: 0,
featured: false,
href: '/api/posts/24241616/comments/199226760',
reviewing: false,
disliked: false,
dislikesCount: 0,
id: 199226760,
author:
{ profileUrl: 'https://www.zhihu.com/people/xu-xing-62-43',
bio: '',
hash: '6954117908c91a1c2897e466fc0545af',
uid: 647461616195604500,
isOrg: false,
description: '',
isOrgWhiteList: false,
slug: 'xu-xing-62-43',
avatar: [Object],
name: 'SP fan' },
content: 'ins即视感',
createdTime: '2016-12-07T21:56:25+08:00',
collapsed: false,
likesCount: 1
},
...
...
]
Answer API
Answer.voters(answerId)
用 answerId
获取这个回答的点赞者。注意 answerId
与 url_token
的区别,answerId
可以在 DOM Tree 中找到,具体的对应关系仍在探索中。知乎的一篇回答的 URL 结构一般是:
zhihu.com/question/12345/answer/67890
^^^^^ ^^^^^
question token answer token
zhihu.com/answer/12306/voters_profile
^^^^^
answer id
@TODO 实现知乎支持的更多参数,比如 offset 等
Question API
Question.answers(token[, offset])
Question.answers(options)
获取该问题的回答列表
let Question = require('zhihu').Question;
Question.answers('19557271');
Question.answers('19557271', 10); // start from 10
Question.answers({token: '19557271', offset: 10});
Collection API
问题的收藏列表
url : http://www.zhihu.com/collection/25547043?page=1
Collection.getAllPageData
获取所有的页面数据,遍历所有的页面
Collection.getAllPageData(url);
Collection.getDataByPage
获取某一页的页面数据
let url = 'http://www.zhihu.com/collection/25547043?page=1';
Collection.getDataByPage(url);
Collection.getPagination
获取改收藏列表的分页信息
{
pages: 总页数,
current: 当前页面
}
Topic API
Topic.getTopicByID(topicID[, page])
根据话题id获取该话题下的问题,话题id为唯一标识,参见话题的url
topicID
话题的ID
Example
请求这个话题:生活、艺术、文化与活动
topicID
为 19778317
let topicID = '19778317';
zhihu.Topic.getTopicByID(topicID).then(function(result){
console.log(result);
});
Result
参数说明
/* You'll get
* name: (string) 话题名称
* page: (number) 当前页数
* totalPage: (number) 该话题下问题总页数
* questions: (object) 当页问题
* - title: (string) 问题名字
* - url: (string) 问题链接
* - postTime:(string) 问题最近更新时间
*/
{
name: '生活、艺术、文化与活动',
page: 1,
totalPage: 47242,
questions:
{ '0':
{ title: '为什么很多人能接受有过长期恋爱经历,却不能接受有过婚姻的人?',
url: 'http://www.zhihu.com/question/27816723',
postTime: '41 秒前' },
'19':
{ title: '360卫士在C盘为什么不可以删掉?',
url: 'http://www.zhihu.com/question/27816632',
postTime: '5 分钟前' }
}
}
贡献者
- shanelau
- Ivan Jiang (iplus26)
- sunchenguang
更新记录
2016.5.23
- 修复 https 问题
- 修改部分bug
- 加入 jscs 格式化代码风格
2015.10.15
- 新增收藏列表的数据抓取
- 查询某个收藏下的所有数据和分页数据