一共三篇,每篇都由Markdown编写,故无法用CSDN的Markdown编辑器添加更高一层的目录
第一篇文章《知乎日报API分析》
转自:https://github.com/izzyleung/ZhihuDailyPurify/wiki/%E7%9F%A5%E4%B9%8E%E6%97%A5%E6%8A%A5-API-%E5%88%86%E6%9E%90
声明
以下所有 API 均由 知乎(Zhihu.Inc) 提供,本人(Izzy Leung)采取非正常手段获取。获取与共享之行为或有侵犯知乎权益的嫌疑。若被告知需停止共享与使用,本人会及时删除此页面与整个项目。
请您暸解相关情况,并遵守知乎协议。
API 说明
知乎日报的消息以 JSON 格式输出
网址中
api
后数字代表 API 版本,过高或过低均会得到错误信息较老的接口(启动界面图像获取,最新消息,过往消息)中将数字 2 替换为 1.2 获得效果相同,替换为 1.1 获得的是老版本 API 输出的 JSON 格式(替换为更低,如 1.0,或更高,如 1.3,将会获得错误消息)
以下所有 API 使用的 HTTP Method 均为
GET
API 分析
1. 启动界面图像获取
- URL:
http://news-at.zhihu.com/api/4/start-image/1080*1776
start-image
后为图像分辨率,接受如下格式320*432
480*728
720*1184
1080*1776
响应实例:
{ text: "© Fido Dido", img: "http://p2.zhimg.com/10/7b/107bb4894b46d75a892da6fa80ef504a.jpg" }
分析:
text
: 供显示的图片版权信息img
: 图像的 URL
2. 软件版本查询
- Android:
http://news-at.zhihu.com/api/4/version/android/2.3.0
- iOS:
http://news-at.zhihu.com/api/4/version/ios/2.3.0
- URL 最后部分的数字代表所安装『知乎日报』的版本
响应实例:
软件为最新版本时
{ "status": 0, "latest": "2.2.0" }
软件为较老版本时
{ "status": 1, "msg": "【更新内容】(后略)", "latest": "2.2.0" }
分析:
status
: 0 代表软件为最新版本,1 代表软件需要升级latest
: 软件最新版本的版本号(数字的第二段会比最新的版本号低 1)msg
: 仅出现在软件需要升级的情形下,提示用户升级软件的对话框中显示的消息
3. 最新消息
- URL:
http://news-at.zhihu.com/api/4/news/latest
响应实例:
{ date: "20140523", stories: [ { title: "中国古代家具发展到今天有两个高峰,一个两宋一个明末(多图)", ga_prefix: "052321", images: [ "http://p1.zhimg.com/45/b9/45b9f057fc1957ed2c946814342c0f02.jpg" ], type: 0, id: 3930445 }, ... ], top_stories: [ { title: "商场和很多人家里,竹制家具越来越多(多图)", image: "http://p2.zhimg.com/9a/15/9a1570bb9e5fa53ae9fb9269a56ee019.jpg", ga_prefix: "052315", type: 0, id: 3930883 }, ... ] }
分析:
date
: 日期stories
: 当日新闻
title
: 新闻标题images
: 图像地址(官方 API 使用数组形式。目前暂未有使用多张图片的情形出现,曾见无images
属性的情况,请在使用中注意 )ga_prefix
: 供 Google Analytics 使用type
: 作用未知id
:url
与share_url
中最后的数字(应为内容的 id)multipic
: 消息是否包含多张图片(仅出现在包含多图的新闻中)
top_stories
: 界面顶部 ViewPager 滚动显示的显示内容(子项格式同上)
4. 消息内容获取与离线下载
- URL:
http://news-at.zhihu.com/api/4/news/3892357
- 使用在
最新消息
中获得的id
,拼接在http://news-at.zhihu.com/api/4/news/
后,得到对应消息 JSON 格式的内容 响应实例:
{ body: "<div class="main-wrap content-wrap">...</div>", image_source: "Angel Abril Ruiz / CC BY", title: "卖衣服的新手段:把耐用品变成「不停买新的」", image: "http://p4.zhimg.com/30/59/30594279d368534c6c2f91b2c00c7806.jpg", share_url: "http://daily.zhihu.com/story/3892357", js: [ ], ga_prefix: "050615", type: 0, id: 3892357, css: [ "http://news.at.zhihu.com/css/news_qa.6.css?v=b390f" ] }
分析:
body
: HTML 格式的新闻image-source
: 图片的内容提供方。为了避免被起诉非法使用图片,在显示图片时最好附上其版权信息。title
: 新闻标题image
: 获得的图片同最新消息
获得的图片分辨率不同。这里获得的是在文章浏览界面中使用的大图。share_url
: 供在线查看内容与分享至 SNS 用的 URLjs
: 供手机端的 WebView(UIWebView) 使用ga_prefix
: 供 Google Analytics 使用type
: 新闻的类型id
: 新闻的 idcss
: 供手机端的 WebView(UIWebView) 使用
- 可知,知乎日报的文章浏览界面利用 WebView(UIWebView) 实现
特别注意
在较为特殊的情况下,知乎日报可能将某个主题日报的站外文章推送至知乎日报首页。
响应实例:{ "theme_name": "电影日报", "title": "五分钟读懂明星的花样昵称:一美、法鲨……", "share_url": "http://daily.zhihu.com/story/3942319", "js": [], "ga_prefix": "052921", "editor_name": "邹波", "theme_id": 3, "type": 1, "id": 3942319, "css": [ "http://news.at.zhihu.com/css/news_qa.6.css?v=b390f" ] }
此时返回的 JSON 数据缺少
body
,iamge-source
,image
,js
属性。多出theme_name
,editor_name
,theme_id
三个属性。type
由0
变为1
。
5. 过往消息
- URL:
http://news.at.zhihu.com/api/4/news/before/20131119
- 若果需要查询 11 月 18 日的消息,
before
后的数字应为20131119
- 知乎日报的生日为 2013 年 5 月 19 日,若
before
后数字小于20130520
,只会接收到空消息 - 输入的今日之后的日期仍然获得今日内容,但是格式不同于最新消息的 JSON 格式
响应实例:
{ date: "20131118", stories: [ { title: "深夜食堂 · 我的张曼妮", ga_prefix: "111822", images: [ "http://p4.zhimg.com/7b/c8/7bc8ef5947b069513c51e4b9521b5c82.jpg" ], type: 0, id: 1747159 }, ... ] }
格式与前同,恕不再赘述
6. 新闻额外信息
- URL:
http://news-at.zhihu.com/api/4/story-extra/#{id}
- 输入新闻的ID,获取对应新闻的额外信息,如评论数量,所获的『赞』的数量。
响应实例:
{ "long_comments": 0, "popularity": 161, "short_comments": 19, "comments": 19, }
分析:
long_comments
: 长评论总数popularity
: 点赞总数short_comments
: 短评论总数comments
: 评论总数
7. 新闻对应长评论查看
- URL:
http://news-at.zhihu.com/api/4/story/4232852/long-comments
- 使用在
最新消息
中获得的id
,在http://news-at.zhihu.com/api/4/story/#{id}/long-comments
中将id
替换为对应的id
,得到长评论 JSON 格式的内容 响应实例:
{ "comments": [ { "author": "EleganceWorld", "id": 545442, "content": "上海到济南,无尽的猪排盖饭… (后略)", "likes": 0, "time": 1413589303, "avatar": "http://pic2.zhimg.com/1f76e6a25_im.jpg" }, ... ] }
分析:
comments
: 长评论列表,形式为数组(请注意,其长度可能为 0)
author
: 评论作者id
: 评论者的唯一标识符content
: 评论的内容likes
: 评论所获『赞』的数量time
: 评论时间avatar
: 用户头像图片的地址
8. 新闻对应短评论查看
- URL:
http://news-at.zhihu.com/api/4/story/4232852/short-comments
- 使用在
最新消息
中获得的id
,在http://news-at.zhihu.com/api/4/story/#{id}/short-comments
中将id
替换为对应的id
,得到短评论 JSON 格式的内容 响应实例:
{ "comments": [ { "author": "Xiaole说", "id": 545721, "content": "就吃了个花生米,呵呵", "likes": 0, "time": 1413600071, "avatar": "http://pic1.zhimg.com/c41f035ab_im.jpg" }, ... ] }
格式与前同,恕不再赘述
9. 主题日报列表查看
- URL:
http://news-at.zhihu.com/api/4/themes
响应实例:
{ "limit": 1000, "subscribed": [ ], "others": [ { "color": 8307764, "thumbnail": "http://pic4.zhimg.com/2c38a96e84b5cc8331a901920a87ea71.jpg", "description": "内容由知乎用户推荐,海纳主题百万,趣味上天入地", "id": 12, "name": "用户推荐日报" }, ... ] }
- 分析:
limit
: 返回数目之限制(仅为猜测)subscribed
: 已订阅条目others
: 其他条目
color
: 颜色,作用未知thumbnail
: 供显示的图片地址description
: 主题日报的介绍id
: 该主题日报的编号name
: 供显示的主题日报名称
- 分析:
10. 主题日报内容查看
- URL:
http://news-at.zhihu.com/api/4/theme/11
- 使用在
主题日报列表查看
中获得需要查看的主题日报的id
,拼接在http://news-at.zhihu.com/api/4/theme/
后,得到对应主题日报 JSON 格式的内容 响应实例:
{ stories: [ { images: [ "http://pic1.zhimg.com/84dadf360399e0de406c133153fc4ab8_t.jpg" ], type: 0, id: 4239728, title: "前苏联监狱纹身百科图鉴" }, ... ], description: "为你发现最有趣的新鲜事,建议在 WiFi 下查看", background: "http://pic1.zhimg.com/a5128188ed788005ad50840a42079c41.jpg", color: 8307764, name: "不许无聊", image: "http://pic3.zhimg.com/da1fcaf6a02d1223d130d5b106e828b9.jpg", editors: [ { url: "http://www.zhihu.com/people/wezeit", bio: "微在 Wezeit 主编", id: 70, avatar: "http://pic4.zhimg.com/068311926_m.jpg", name: "益康糯米" }, ... ], image_source: "" }
- 分析:
stories
: 该主题日报中的文章列表
images
: 图像地址(其类型为数组。请留意在代码中处理无该属性与数组长度为 0 的情况)type
: 类型,作用未知title
: 消息的标题
description
: 该主题日报的介绍background
: 该主题日报的背景图片(大图)color
: 颜色,作用未知name
: 该主题日报的名称image
: 背景图片的小图版本editors
: 该主题日报的编辑(『用户推荐日报』中此项的指是一个空数组,在 App 中的主编栏显示为『许多人』,点击后访问该主题日报的介绍页面,请留意)
url
: 主编的知乎用户主页bio
: 主编的个人简介id
: 数据库中的唯一表示符avatar
: 主编的头像name
: 主编的姓名
image_source
: 图像的版权信息
- 分析:
11. 热门消息
- 请注意!此 API 仍可访问,但是其内容未出现在最新的『知乎日报』 App 中。
- URL:
http://news-at.zhihu.com/api/3/news/hot
响应实例:
{ recent: [ { news_id: 3748552, url: "http://daily.zhihu.com/api/2/news/3748552", thumbnail: "http://p3.zhimg.com/67/6a/676a8337efec71a100eea6130482091b.jpg", title: "长得漂亮能力出众性格单纯的姑娘为什么会没有男朋友?" }, ... ] }
大体同前面介绍的 API 类似,唯一需要注意的是:欲获得图片地址,不再使用
image
而是thumbnail
属性url
属性可直接使用。请注意,url
中的api
属性为 2,是较老版本。
12. 软件推广
- 请注意!此 API 仍可访问,但是其内容未出现在最新的『知乎日报』 App 中。
- Android:
http://news-at.zhihu.com/api/3/promotion/android
- iOS:
http://news-at.zhihu.com/api/3/promotion/ios
13. 栏目总览
- 请注意!此 API 仍可访问,但是其内容未出现在最新的『知乎日报』 App 中。
- URL:
http://news-at.zhihu.com/api/3/sections
响应实例:
{ data: [ { id: 1, thumbnail: "http://p2.zhimg.com/10/b8/10b8193dd6a3404d31b2c50e1e232c87.jpg", name: "深夜食堂", description: "睡前宵夜,用别人的故事下酒" }, ... ] }
同样,注意使用
thumbnail
获取图像的地址
14. 栏目具体消息查看
- 请注意!此 API 仍可访问,但是其内容未出现在最新的『知乎日报』 App 中。
- URL:
http://news-at.zhihu.com/api/3/section/1
- URL 最后的数字见『栏目总览』中相应栏目的
id
属性 响应实例:
{ news: [ { date: "20140522", display_date: "5 月 22 日" }, ... ], name: "深夜食堂", timestamp: 1398780001 }
往前:
http://news-at.zhihu.com/api/3/section/1/before/1398780001
- 在 URL 最后加上一个时间戳,时间戳详见 JSON 数据末端的
timestamp
属性
- 在 URL 最后加上一个时间戳,时间戳详见 JSON 数据末端的
第二篇文章《知乎API分析》
转自:https://github.com/hrtsea/zhihu/wiki/%E7%9F%A5%E4%B9%8EAPI%E5%88%86%E6%9E%90
知乎API分析
作为一个WindowsPhone并常刷知乎的用户,我一直期待知乎windowsphone版客户端的发布。可根据经验,WindowsPhone这种小众群体一般很难获得关注,其应用的缺乏简直令人心酸。所谓求人不如求自己,于是我打算分析知乎的API,自己写一个WindowsPhone版的客户端。
我借了我朋友潇湘竹的iphone5,在电脑的fiddler中抓取知乎的数据包(使用fiddler抓取iphone的包的方法在网上可以找的到,这里就不详述了)。
首先是知乎登陆的API,在fiddler中可看出其post的地址是https://oauth.zhihu.com/token,其Request Headers如下(使用c#编写,):
public static HttpAssistant.Header requestHeader = new HttpAssistant.Header();
requestHeader.Method = HttpAssistant.HttpRequestMethods.Post;
requestHeader.AcceptEncoding = "gzip, deflate";
requestHeader.Accept = "application/json";
requestHeader.Connection = "Keep-Alive";
requestHeader.UserAgent = "ZhihuAppIrisRelease/96 (iPhone; iOS 6.1.2; Scale/2.00)";
requestHeader.ContentType = "application/x-www-form-urlencoded; charset=utf-8";
requestHeader.Authorization = authBasic;
requestHeader.XAPIVERSION = "3.0";
requestHeader.XAPPVERSION = "2.1.0";
其返回值为一个json类型的数据:
{"token_type":"bearer","access_token":"fc25004cfe424c83bec4e0189428b345","expires_in":2592000,"refresh_token":"6595ad8bcd9a489a965f2282bf54a04f"}
其post值为:
client_id=4bc899f2695f417eb733f3d21a7be0&client_key=d179a1e11f2347a48c7f928d354621&email=panshichen_joker%40outlook.com&grant_type=password&password=111111
经过删除并重装客户端及换账号登陆等操作,可知以下数据始终不变:
private string clientId = "4bc899f2695f417eb733f3d21a7be0";
private string clientKey = "d179a1e11f2347a48c7f928d354621";
private string authBasic = "Basic NGJjODk5ZjI2OTVmNDE3ZWI3MzNmM2QyMWE3YmUwOmQxNzlhMWUxMWYyMzQ3YTQ4YzdmOTI4ZDM1NDYyMQ==";
private string authBearer = "Bearer ";
且:
authBearer += accessToken;
按上述数据提交,发现登陆成功!
这着的知乎api就没什么内容了,以下是知乎的各个api,其post地址为:
/// <summary>
/// 登录
/// </summary>
public static string Login { get { return "https://oauth.zhihu.com/token"; } }
/// <summary>
/// 个人资料
/// </summary>
public static string PeopleSelf { get { return "https://api.zhihu.com/people/self"; } }
/// <summary>
/// 未读消息数量
/// </summary>
public static string UnreadCount { get { return "https://api.zhihu.com/unread_count"; } }
/// <summary>
/// 最新动态
/// </summary>
public static string Feeds { get { return "https://api.zhihu.com/feeds"; } }
/// <summary>
/// 热门问答
/// </summary>
public static string ExploreAnswers { get { return "https://api.zhihu.com/explore/answers"; } }
/// <summary>
/// 热门收藏
/// </summary>
public static string ExploreCollections { get { return "https://api.zhihu.com/explore/collections"; } }
/// <summary>
/// 随便看看
/// </summary>
public static string ExploreRandom { get { return "https://api.zhihu.com/explore/random_question"; } }
/// <summary>
/// 消息内容
/// </summary>
public static string NotificationContent { get { return "https://api.zhihu.com/notifications/content"; } }
/// <summary>
/// 与我相关
/// </summary>
public static string NotificationLove { get { return "https://api.zhihu.com/notifications/love"; } }
/// <summary>
/// 私信
/// </summary>
public static string Inbox { get { return "https://api.zhihu.com/inbox"; } }
其提交函数为:
public dynamic feeds()
{
try
{
requestHeader.Method = HttpAssistant.HttpRequestMethods.Get;
requestHeader.Authorization = authBearer;
requestBody.Data = "";
string ret = requestProcess.StringResponse(ZhihuApi.Feeds, requestHeader, requestBody, System.Text.Encoding.UTF8);
return Json.JsonDecode(ret);
}
catch (Exception)
{
return null;
}
}
余者皆同。
第三篇文章《知乎数据API 接口 nodejs》
转自:https://github.com/shanelau/zhihu
知乎数据API 接口 nodejs
======
根据这些接口获取到知乎的数据,包括用户、问答、专栏、话题信息
欢迎贡献代码,一起完善知乎的接口
快速开始
var zhihu = require('zhihu');
demo
获取用户的信息
var username = 'shanelau1021';
zhihu.User.getUserByName(name).then(function(user){
console.log(user);
});
用户 API
User.getUserByName(username)
根据用户名获取到用户的信息,用户名为用的唯一标识,参见个人主页的url,或者设置中的个性网站
username
//用户位置标识
Example
请求这个用户:http://www.zhihu.com/people/shanelau1021 name
为 shanelau1021
var nam = 'shanelau1021';
zhihu.User.getUserByName(name).then(function(user){
console.log(user);
});
Result
参数说明
answer
答题数量post
文章数量follower
跟随者数量profileUrl
个人主页name
名字sex
性别
{ answer: 5,
post: 0,
follower: 456,
profileUrl: 'http://www.zhihu.com/people/shanelau1021',
name: '狂飙蜗牛',
sex: 'male' }
专栏文章–Post
Post.info(postUrl)
获取专栏文章的详细信息
postUrl
文章的url地址
Example
zhihu.Post.info(postUrl).then(function(data){
//do something
});
* Result *
- Object
Post.page(name,options)
获取专栏文章列表
name
专栏的英文名字, 例如:’bigertech’options
{object} ,默认值为10{ limit: 10 //记录数 offset: 10 // 偏移量 }
Example
Post.likersDetail(postUrl)
获取文章的点赞者的详细信息
postUrl
文章的url地址
Result
用户数组
{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 }
{Array}
//User
答案 Answer
likers
获取答案的点赞者
@TODO
问题API–Question
focus
问题的关注列表
@TODO
collection
问题的收藏列表
info
问题的详细信息
@TODO
questions
用户的提问列表
@TODO
answers
用户的回答列表
@TODO
zhuanlansFocus
用户关注的专栏
@TODO
topic
用户关注的话题信息
@TODO
话题API - Topic
Topic.getTopicByID(topicID[, page])
根据话题id获取该话题下的问题,话题id为唯一标识,参见话题的url
- topicID
话题的ID
Example
请求这个话题:生活、艺术、文化与活动 topicID
为 19791501
var topicID = '19791501';
zhihu.Topic.getTopicByID(topicID).then(function(result){
console.log(result);
});
Result
参数说明
name
话题名称page
当前页数totalPage
该话题下问题总页数questions
当页问题
title
问题名字url
问题链接postTime
问题最近更新时间
{ name: '生活、艺术、文化与活动',
page: 1,
totalPage: 47242,
questions:
{ '0':
{ title: '为什么很多人能接受有过长期恋爱经历,却不能接受有过婚姻的人?',
url: 'http://www.zhihu.com/question/27816723',
postTime: '41 秒前' },
'1':
{ title: '嘴巴张合脸颊会发出咯的声音?为什么?',
url: 'http://www.zhihu.com/question/27816716',
postTime: '1 分钟前' },
'2':
{ title: '如何有效率的学好粤语呢?',
url: 'http://www.zhihu.com/question/27816709',
postTime: '1 分钟前' },
'3':
{ title: 'pc ssh连接到服务器每隔几十分钟掉线一次是什么问题?',
url: 'http://www.zhihu.com/question/27816701',
postTime: '1 分钟前' },
'4':
{ title: '找对象该不该看长相?',
url: 'http://www.zhihu.com/question/27816694',
postTime: '2 分钟前' },
'5':
{ title: '为什么很少有关于大阪的推荐?',
url: 'http://www.zhihu.com/question/27816691',
postTime: '2 分钟前' },
'6':
{ title: '遇到偷东西朋友怎么办?',
url: 'http://www.zhihu.com/question/27816684',
postTime: '2 分钟前' },
'7':
{ title: '自古以来,皇帝、权贵从小接受的是什么教育?东方与西方有哪些不同?',
url: 'http://www.zhihu.com/question/27816683',
postTime: '2 分钟前' },
'8':
{ title: '还有什么小说像《东莞的森林》这样文艺的?',
url: 'http://www.zhihu.com/question/27816680',
postTime: '2 分钟前' },
'9':
{ title: '韩国法律里,《匹诺曹》中哥哥应该会判什么刑?',
url: 'http://www.zhihu.com/question/27816676',
postTime: '3 分钟前' },
'10':
{ title: '哪位作家出车祸丧失睡眠功能了?',
url: 'http://www.zhihu.com/question/27816674',
postTime: '3 分钟前' },
'11':
{ title: '文字狱与同治中兴的关系?',
url: 'http://www.zhihu.com/question/27816663',
postTime: '3 分钟前' },
'12':
{ title: '为什么到了年关有关婚姻的问题就多了起来呢?',
url: 'http://www.zhihu.com/question/27816660',
postTime: '3 分钟前' },
'13':
{ title: 'Windows Holographic这样的全息产品是否会扼杀儿童的想象力?',
url: 'http://www.zhihu.com/question/27816653',
postTime: '4 分钟前' },
'14':
{ title: '如何评价纳兰明珠?',
url: 'http://www.zhihu.com/question/27816651',
postTime: '4 分钟前' },
'15':
{ title: '如何拍出有「领导人出游」感觉的照片?',
url: 'http://www.zhihu.com/question/27816646',
postTime: '4 分钟前' },
'16':
{ title: '读大学本科第二年参加学校对外的交流项目到国外学习几个月,这样获得的证书是能认证的吗?',
url: 'http://www.zhihu.com/question/27816645',
postTime: '4 分钟前' },
'17':
{ title: '什么情况下应该穿囚服?什么情况可以不穿?识别服和囚服一样么?有什么区别?希望有个详细解答!?',
url: 'http://www.zhihu.com/question/27816641',
postTime: '5 分钟前' },
'18':
{ title: '何谓荷花厅?',
url: 'http://www.zhihu.com/question/27816635',
postTime: '5 分钟前' },
'19':
{ title: '360卫士在C盘为什么不可以删掉?',
url: 'http://www.zhihu.com/question/27816632',
postTime: '5 分钟前' } } }