npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

zhihu

v1.4.3

Published

Zhihu API, 获取知乎平台信息数据的接口

Downloads

35

Readme

知乎数据 API 接口 (node.js)

知乎已经更新为 https, 本项目 < 1.0.0 不能再使用了. 请升级

根据这些接口获取到知乎的数据,包括以下接口:

欢迎贡献代码,一起完善知乎的接口

Getting Started

DEMO

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

example

Post.page(name[, config])

获取专栏文章列表

  • name 专栏的英文名字, 例如:'bigertech'
  • config 可选,{object} ,默认值如下
{
  limit: 10   // 记录数
  offset: 0  // 偏移量
}

Example

demo

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 获取这个回答的点赞者。注意 answerIdurl_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

请求这个话题:生活、艺术、文化与活动 topicID19778317

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 分钟前' }
    }
}

贡献者

  1. shanelau
  2. Ivan Jiang (iplus26)
  3. sunchenguang

更新记录

2016.5.23

  1. 修复 https 问题
  2. 修改部分bug
  3. 加入 jscs 格式化代码风格

2015.10.15

  1. 新增收藏列表的数据抓取
  2. 查询某个收藏下的所有数据和分页数据

LICENSE

MIT