请注意:本页内容发布于 4060 天前,内容可能已经过时,请注意甄别。
饭否的API上次更新已经比网页版还要古老了,传说中的2.0版API只出了一个草稿,后来因为各种原因中止了开发,从此杳无音讯。
OAuth 2.0比1.0减少了繁琐且容易出错(还很难找到原因)的签名过程,但前提是依赖https的加密传输,所以饭否允许在http协议下使用OAuth 2.0的做法其实是不对的,但已经没有人管了,反正证书都过期了。
以下为参考草稿及API Wiki中散落的2.0 API说明文档整理的黑箱笔记。
首先说明一点:API 2.0完全处于草稿状态,经过整理,发现很多地方的权限都是错乱的,既无法用来探寻不应该看到的东西(喂),也导致本应可以正常使用的API无法动作,所以完全、丝毫、整个就不能用来开发客户端。
- API Consumer获取方法
请咨询@HAL9K,目前OAuth 2.0的Consumer只能由管理人员在后台添加,不能自助申请。 - Token获取过程
详细请参考官方文档,这里只做简要介绍:
一、传统Authorization Code换Access Token法:
1、https://fanfou.com/oauth2/authorize?redirect_uri=应用Authorize回调地址&client_id=ClientID&response_type=code
2、用户同意授权后会转向【回调地址?code={authorization code}】
3、https://fanfou.com/oauth2.token?client_id=ClientID&client_secret=ClientSecret&redirect_uri=应用AccessToken获取回调地址&code=AuthorizationCode&grant_type=authorization_code
4、服务器验证成功后会返回以下json:
{
“access_token”: “~68NKILzDyRs-c538eb0be6ce843ac6ca3c7fc81a0e72”, //Access Token
“expires_in”: 3600, //Access Token有效期
“scope”: null, //应用授权范围(暂未生效)
“refresh_token”: “~68NKILzDyRs-82671540cdf1f716a87a9d95c2fbce0a” //Refresh Token
}
二、直接用Client ID获取Access Token法:
1、https://fanfou.com/oauth2/authorize?client_id=ClientID&redirect_uri=回调地址&response_type=token
2、用户同意授权后会直接转向【回调地址#access_token=AccessToken&expires_in=3600&refresh_token=RefreshToken】
此方法看似简单有效,但却会将Access Token暴露在URL中,故除调试外并不推荐使用。 - 黑箱笔记:
————————————————————————————
/statuses/
————————————————————————————
/home_timeline/
方法说明:显示当前登录用户的Timeline
调用方法:GET https://rest.fanfou.com/statuses/home_timeline/?oauth_token={OA2_TOKEN}
可用参数:
count 可选 返回消息的条数,可选范围[1,60]
page 可选 返回结果的页码
since_id 可选 返回消息ID > since_id的消息
max_id 可选 返回消息ID ≤ max_id的消息
测试结果:
显示的是UID=0的Timeline,无法正常使用/user_timeline/:userid/
方法说明:显示指定用户已发送的消息
调用方法:GET https://rest.fanfou.com/statuses/user_timeline/{USER_ID}/?oauth_token={OA2_TOKEN}
可用参数:
:userid 必选 指定用户ID,@~me为当前用户
count 可选 返回消息的条数,可选范围[1,60]
page 可选 返回结果的页码
since_id 可选 返回消息ID > since_id的消息
max_id 可选 返回消息ID ≤ max_id的消息
测试结果:
@~me(未锁) 返回error: Can not view user,无法使用
@~me(已锁) 返回error: Can not view user,无法使用
未锁用户 返回该用户的消息json数组,可以正常使用
已锁且已关注用户 返回error: Can not view user,无法使用
已锁但未关注用户 返回error: Can not view user,姑且认定为工作正常/mentions/
方法说明:显示提到当前用户的信息
调用方法:GET https://rest.fanfou.com/statuses/mentions/?oauth_token={OA2_TOKEN}
可用参数:
count 可选 返回消息的条数,可选范围[1,60]
page 可选 返回结果的页码
since_id 可选 返回消息ID > since_id的消息
max_id 可选 返回消息ID ≤ max_id的消息
测试结果:
使用的是UID=0的权限,不知道显示的是哪里的Mentions,无法正常使用/photo_timeline/:userid/
方法说明:从名称猜测应该为显示用户的相册
调用方法:GET https://rest.fanfou.com/statuses/photo_timeline/{USER_ID}/?oauth_token={OA2_TOKEN}
测试结果:返回error: Route rule not found,无法使用/:statusid
方法说明:显示指定ID的消息
调用方法:GET https://rest.fanfou.com/statuses/{STATUS_ID}?oauth_token={OA2_TOKEN}
可用参数:
:statusid 必选 消息的ID
测试结果:在消息发布者对当前用户可见且消息没有被删除的情况下,正常返回指定的消息,可以使用
注意事项:statusid只能使用数字ID,不能使用现在网页版上的加密ID,否则会提示Can not view msg方法说明:删除指定ID的消息
调用方法:DELETE https://rest.fanfou.com/statuses/{STATUS_ID}?oauth_token={OA2_TOKEN}
可用参数:
:statusid 必选 消息的ID
测试结果:对于当前用户发送的消息也返回error: Can not delete msg,无法使用
注意事项:statusid只能使用数字ID,不能使用现在网页版上的加密ID/statuses/
方法说明:发送消息或带图消息
调用方法:POST https://rest.fanfou.com/statuses/
数据类型:multipart/form-data
可用参数:
status 必选 消息内容,如果上传图片则为可选
location 可选 用户当前位置
photo 可选 上传的图片数据
测试结果:
一直返回error: {“sendfrom”:[true]},含义不明,可能对可以发消息的OAuth2 App做了限制
————————————————————————————
/account/
————————————————————————————
/verify_credentials
方法说明:验证当前用户凭据
调用方法:GET https://rest.fanfou.com/account/verify_credentials?oauth_token={OA2_TOKEN}
测试结果:返回error: Route rule not found,无法使用/profile
方法说明:更新用户个人资料
调用方法:PUT https://rest.fanfou.com/account/profile?oauth_token={OA2_TOKEN}
数据类型:application/x-www-form-urlencoded
可用参数:
url 可选 指定用户个人网址
location 可选 指定用户所在地,可为任何字符串
description 可选 指定用户自述文字
name 可选 指定用户Screen Name
email 可选 指定用户邮箱地址
注:以上参数至少选择一个,否则会返回411 Length Required
测试结果:
可以成功提交,但更新的是UID=0的账号的个人资料,等于无法使用
————————————————————————————
/users/
————————————————————————————
/:userid(草稿中的/show/:userid有误)
方法说明:显示指定用户的资料
调用方法:GET https://rest.fanfou.com/users/{USER_ID}?oauth_token={OA2_TOKEN}
可用参数:
:userid 必选 要查看的用户的ID,@~me代表当前登录账户
测试结果:
指定userid时可以正常使用,但使用@~me时返回的是UID=0的账户,此时无法正常使用/names/:nickname/
方法说明:搜索指定昵称的用户
调用方法:GET https://rest.fanfou.com/users/names/{NICKNAME}/?oauth_token
可用参数:
:nickname 必选 要搜索的用户昵称
count 可选 返回结果的条数
page 可选 返回结果的页码
测试结果:
与前台搜索结果有较大出入,猜测可能为新版API实行的昵称唯一化措施所致,算是可以正常使用/:userid/friends
方法说明:显示指定用户关注的用户列表、显示指定用户的关注者列表
调用方法:GET https://rest.fanfou.com/users/{USER_ID}/friends/?oauth_token={OA2_TOKEN}
可用参数:
:userid 必选 要查看的用户的ID,@~me代表当前登录账户
count 可选 返回结果的条数
page 可选 返回结果的页码
测试结果:
未加锁用户可以正常返回,加锁用户使用的是UID=0的用户权限,多半无法正常使用/:userid/followers
方法说明:显示指定用户关注的用户列表、显示指定用户的关注者列表
调用方法:GET https://rest.fanfou.com/users/{USER_ID}/followers/?oauth_token={OA2_TOKEN}
可用参数:
:userid 必选 要查看的用户的ID,@~me代表当前登录账户
count 可选 返回结果的条数
page 可选 返回结果的页码
测试结果:
未加锁用户可以正常返回,加锁用户使用的是UID=0的用户权限,多半无法正常使用/friendships/:userid
方法说明:不明,猜测应为检查与对方的关注关系(我是否关注了对方)
调用方法:GET https://rest.fanfou.com/friendships/{USER_ID}?oauth_token={OA2_TOKEN}
测试结果:不论输入什么User ID都会直接返回该用户的资料,若实际功能与猜想一致,则该API无法正常使用方法说明:关注指定ID的用户
调用方法:POST https://rest.fanfou.com/friendships/?oauth_token={OA2_TOKEN}
数据类型:application/x-www-form-urlencoded
可用参数:
:userid 必选 要关注的用户ID
测试结果:可以正常返回用户资料(关注成功)、等待验证提示(对方加锁)以及已关注提示(对方已是你的好友),
但实际并没有加到对应Token的账户上,而是加到了UID=0的账户上,故并不能正常使用方法说明:取消关注指定ID的用户
调用方法:DELETE https://rest.fanfou.com/friendships/{USER_ID}?oauth_token={OA2_TOKEN}
可用参数:
:userid 必选 要取消关注的用户ID
测试结果:可以正常返回用户资料(取消关注成功)、以及未关注提示(对方还不是你的好友),
但实际并没有对对应Token的账户进行操作,而是操作了UID=0的账户,故并不能正常使用/favoriates/
方法说明:查看当前用户收藏的消息
调用方法:GET https://rest.fanfou.com/favoraites/?oauth_token={OA2_TOKEN}
测试结果:
favoriates明显为拼写错误,返回route file not found,/favorites/报Method Not Allowed,无法正常使用
实际可以正常使用的API为下文的/favorites/user_timeline/:userid/方法说明:向当前用户的收藏中添加消息
调用方法:POST https://rest.fanfou.com/favorites/?oauth_token={OA2_TOKEN}
数据类型:application/x-www-form-urlencoded
可用参数:
statusid 必选 要添加的消息ID
测试结果:
可以正常返回消息资料(收藏成功),但实际并没有加到对应Token的账户上,而是加到了UID=0的账户上,故并不能正常使用方法说明:从当前用户的收藏中删除消息
调用方法:DELETE https://rest.fanfou.com/favorites/{STATUS_ID}?oauth_token={OA2_TOKEN}
可用参数:
statusid 必选 要删除的消息ID
测试结果:
可以正常返回消息资料(收藏成功),但实际并没有加到对应Token的账户上,而是加到了UID=0的账户上,故并不能正常使用/favorites/user_timeline/:userid/(草稿中的/favoriates/:userid/有误)
方法说明:查看用户收藏的消息
调用方法:GET https://rest.fanfou.com/favorites/user_timeline/:userid/?oauth_token={OA2_TOKEN}
可用参数:
:userid 必选 要查看的收藏的用户ID,@~me代表当前登录账户
count 可选 返回结果的条数
page 可选 返回结果的页码
测试结果:
未加锁用户可以正常返回,加锁用户使用的是UID=0的用户权限,多半无法正常使用
https证书已过期。哎我了个去……
还在折腾饭否啊……
卡在 OAuth 1.0 的签名上了。搜了一下「饭否OAuth2」,看到了这篇博客。
真希望 OAuth 2.0 的 API 是可用的啊。