知乎日報APP:API介面分析
宣告
以下所有 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
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分析
作為一個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
======
根據這些介面獲取到知乎的資料,包括使用者、問答、專欄、話題資訊
歡迎貢獻程式碼,一起完善知乎的介面
快速開始
var zhihu = require('zhihu');
demo
獲取使用者的資訊
var username = 'shanelau1021';
zhihu.User.getUserByName(name).then(function(user){
console.log(user);
});
使用者 API
User.getUserByName(username)
根據使用者名稱獲取到使用者的資訊,使用者名稱為用的唯一標識,參見個人主頁的url,或者設定中的個性網站
username
//使用者位置標識
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 分鐘前' } } }