CC98-node-API
这是一个用来抓取cc98帖子的脚本.
[由于cc98只能在浙江大学内网访问,所以此API只能在能访问浙江大学内网的机子上使用.]
配置
- 本API基于
Node.js
,运行时需要在Node.js的环境下. - 请运行
npm install cc98-node-api
来安装.
开始
var _98 = require("cc98-node-api");
var account = {
user:, /*your user name*/
password:, /*your password*/
hash: /*如果能提供它的md5码的话,就写上去.这不是必要的.*/
}
var cc98 = new _98(account);
cc98.login(function(data){
console.log(data);
});
测试此API
首先进入 test/
文件夹,创建一个名为user_config.js的文件,写入一下代码:
module.exports = {
user:, /*your user name*/
password:, /*your password*/
}
然后用node运行此目录下任意一个文件即可得到测试结果。 (注意,有些数据(如读站短的ID)要根据自己的情况在测试源代码里修改。)
函数说明
以下仅摘录部分api,完整的api请参阅下面链接:
- api_basic.md --基本的API,如读取帖子列表,读取今日十大等等。
- api_search.md --帖子搜索有关的API。
- api_user.md --与用户操作有关的API,如发帖,读站短,定制版块等等。
- api_user_profile.md --修改用户个人信息的API。
cc98.login(callback)
说明:用自己的帐号登录cc98. 如果跳过这一步,以游客身份访问cc98的话,只有部分功能能够工作. 请注意自己的配置设置.
此函数会调用形如 callback(data)
的函数,其中data是一个json变量:
data = {
status : 0 | 1 //0或1,0表示示登录,1表示已登录.
spec : "success" | "password error" | ERROR_CODES
}
注[1]:cc98中,对于不同类型的错误会返回不同的代码,信息如下:
var LOGIN_SUCCESS = 9898,
USER_NOT_EXIST = 1001,
USER_LOCKED = 1002,
PASSWORD_ERROR = 1003,
USERNAME_NULL = 101,
PASSWORD_NULL = 102,
XMLHTTP_ERROR = 103;
cc98.getBoard(callback)
说明:返回首页上各版的信息.
返回数据:形如 callback(data)
的格式, data
为以下格式的json数据:
{
timestamp:new Date(), //收到数据的时间
board:
[
{
name:String, //版名
boardid:String, //版的boardid(用于写URL)
boardNumber:String, //下属的子论坛数量
boardManager:String, //版务
todayPosts:String, //今日发帖量
totalPosts:String //总发贴量
},
...
]
}
cc98.getChildBoard(boardid,callback)
说明:返回版面列表上各子版的信息.
返回数据:形如 callback(data)
的格式, data
为以下格式的json数据:
{
timestamp:new Date(), //收到数据的时间
board:
[
{
name:String, //版名
intro:String,
boardid:String, //版的boardid(用于写URL)
hasChildBoard:Boolean, //看看有没有子版
boardManager:Array, //版务
todayPosts:Number, //今日发帖量
totalTopics:Number //总共话题数
totalPosts:Number //总发贴量
},
...
]
}
cc98.getAllPostList(boardid,min_page,max_page,callback)
说明: 抓取到某个版块中所有的帖子标题信息.
参数:
boardid
: 版块的ID.这个可以见于每个版块所对应的URL中,或者getBoard()所返回的函数.
min_page
: 抓取的最小页数.最小为1.
max_page
: 抓取的最大页数.很不幸,即使不知道这个版块有多少页,这个参数也得填.不过当你真的想把所有页都搞下来的话,写Infinity
吧.
callback
: 是一个函数.形如callback(data)
的格式.
其中,data是一段json数据,格式如下:
[
{totalPages:***,todayPosts:***,boardid:***,totalPosts:***},
{
timestamp:new Date(),
pageNumber:***,
list:
[
{
topicName:****,
topicStatus:****,
postId:*****,
author:*****,
replyNum:****,
visitNum:****,
lastReply:new Date(),
replier:****
},
...
]
},
...
]
cc98.getPostInfo(boardid,postid,min_page,max_page,callback)
说明 : 把一个帖子里的所有内容给抓下来.
boardid
: 版块的ID.这个可以见于每个版块所对应的URL中,或者getBoard()所返回的函数.这是98一个很神经的地方.这个参数必须要要.
postid
: 这个帖子的ID.在URL中可见(形如 ID=***
的格式),也可以在getAllPostList()中获得.
min_page
: 抓取的最小页数.最小为1.
max_page
: 抓取的最大页数.很不幸,即使不知道这个版块有多少页,这个参数也得填.不过当你真的想把所有页都搞下来的话,写Infinity
吧.
callback
: 是一个函数.形如callback(data)
的格式.
其中,data是一段json数据,格式如下:
[
{totalPosts:***},
{
timestamp:new Date(),
pageNumber:***,
list:
[
{
postTime:new Date(),
author:****,
authorFaceURL:****,
face:****,
subTitle:****,
info:****,
qmd:***
},
...
]
},
...
]
附注: 这里稍微说明一下list中各参数的含义:
postTime
: 发这个帖子的时间.
author
: 发这个帖子的user ID.
face
: 在98中每发一个帖子都会默认选定一个'发帖心情',默认为7.这个数字是从它的图片名字中提出来的.
subTitle
: 紧接着face后面的小标题.一般除了首楼上会发这个玩意儿之外别的楼都不会发.
info
: 帖子的内容.注意是UBB格式.
qmd
: 签名档
cc98.Top10(callback)
说明:返回98的十大帖子.
返回数据:形如 callback(data)
的格式, data
为以下格式的json数据:
{
timestamp:new Date(), //收到数据的时间
posts:
[
{
rank:Number, //排名
name:String, //帖子标题
author:String, //作者
boardid:"", //帖子所属板块ID
postid:"", //帖子ID
postTime:Date, //发贴时间
focus:"", //关注人数
replyPosts:"", //回帖数
hit:"" //点击
},
...
]
}