跳至内容

Jixun's Blog 填坑还是开坑,这是个好问题。

起点中文网 - 网页 API

简介 #

公众章节/书籍信息不需要小饼干,部分需要正确的引用页值。

利用这些接口应该能从起点上完整的扒下一本书,前提是你有足够的起点币 (起点官网充值)。

获取书籍信息/完整章节列表 #

GET: http://3g.if.qidian.com/Client/IGetBookInfo.aspx?bookId=<书籍ID>
{
  "BookId":0,                    // 书籍 ID
  "BookName":"起点小说 API",     // 书籍名称
  "Author":"Jixun",              // 书籍作者
  
  "ImageStatus":1,               // 图片状态 (是否有图片?)
  "BookStatus":"连载中",         // 书籍状态
  
  "CategoryId":1,                // 分类 ID
  "CategoryName":"奇幻",         // 分类名称
  "SubCategoryId":62,            // 子分类 ID
  "SubCategoryName":"剑与魔法",  // 子分类名称
  "SignStatus":"驻站作品",       // 签约状态
  
  "IscanPraise":0,               // 能否点赞 (?)
  
  "LastChapterId":11111,         // 最新章节 ID
  "LastChapterName":"序章",      // 最新章节名称
  "LastChapterTime":0,           // 最新章节更新时间
  
  "LastVipChapterId":0,          // 最新 Vip 章节 ID
  "LastVipChapterName"           // 最新 Vip 章节名称
  "LastVipChapterTime":-1,       // 最新 Vip 章节更新时间
  
  "WordsCount":0,                // 字数
  "IsQin":0,                     // 是否全勤 (?)
  
  "Chapters":[                   // 章节列表
    {
      "c":11111,                 // 章节 ID
      "n":"序章"                 // 章节名称
      "v":0,                     // 是否为 Vip 章节
      "p":0,                     // 价格
      "t":0,                     // 更新时间
      "w":0,                     // 字数
      "vc":"200"                 // 分卷 ID
      "ui":0,                    // 未知
      "pn":2,                    // 未知
      "ccs":0,                   // 未知
      "cci":0                    // 未知
    }
  ],
  "Volumes":[                    // 分卷列表
    {
      "VolumeCode":"200"         // 分卷 ID
      "VolumeName":"正文"        // 分卷名称
    }
  ],
  "EnableBookUnitLease":0,       // 允许书籍租借 (?)
  "EnableBookUnitBuy":0,         // 允许 “以某种单位” 购买??
  "Units":null,                  // “某种单位”列表
  "WholeSale":0,                 // 全本购买
  "TotalPrice":0,                // 全本价格
  "ret":0,                       // API 返回值 (0 成功)
  "msg"                          // 错误信息
}

获取公众章节正文 (方法 1) #

这个 API 使用 GBK 编码, 应该是旧版全文阅读的遗留代码没改。

GET: http://files.qidian.com/Author<书籍简码>/<书籍ID>/<章节ID>.txt

书籍简码: <书籍ID> % 8 + 1

需要稍微处理一下返回的内容,例如 http://files.qidian.com/Author1/16/11111.txt:有下述内容:

document.write('  欸嘿嘿<p>  第二行 <a href=http://jixun.moe>梦姬 jixun.moe 欢迎广大读者 ..... </a>');

购买章节 (不获取内容) #

POST http://vipreader.qidian.com/Ajax.aspx?opName=BuySingleChapterNew

数据:
bookid: 123     // 书籍 ID
chapterid: 456  // 章节 ID
type:0          // type (g)
unbuynum:0      // const 0
preChapterId:0 // const 0
status:-1       // const -1
sr:             // SimpleRead; 不再显示订阅提醒; 留空吧
ab:             // 如果为 "on" 则自动尝试购买 (否则传入 "")
validcode:0     // 短信验证码? 留 0

sk:592bca02aa40634015e258708fb1ced4 // csrf token?
skdate:2016-08-12
sktime:0

返回值在测试的时候会提示参数错误,但是订阅之后能正常查看内容。

{
  "code":0,
  "info":"参数错误",
  "buyStatus":true,
  "simpleRead":{
    "code":0,
    "info":""
  },
  "autobuy":-1,
  "chapterId":456,
  "newUserType":-1
}

sk 的值看上去像是 csrf token,随便开一个 vip 章节的页面获取即可;
应该能一次性使用一整天。

HTML 是这么个构造:

<input type="hidden" id ="sk" name ="sk" value="592bca02aa40634015e258708fb1ced4">
<input type="hidden" id ="skdate" name ="skdate" value="2016-08-12">
<input type="hidden" id ="sktime" name ="sktime" value="">

获取 Vip 章节内容 #

请求:

GET: http://vipreader.qidian.com/Ajax.aspx?opName=getvipcontent&bookId=123&chapterId=456&sk=592bca02aa40634015e258708fb1ced4&skdate=2016-08-12&sktime=0&isbig5=0

响应:

// Cookie: 购买了此章节的小饼干
// Referer: http://vipreader.qidian.com/BookReader/vip,3347598,68247056.aspx
// 中文字符全部为 \uXXXX 形式。
{
  "code":0,
  "info":"",
  "isLogin":true,
  "content":"章节内容",
  "chapter":{
    "ChapterGreat":null,
    "ChapterId":456,
    "BookName":"书籍名称",
    "VolumeId":null,
    "VolumeCode":null,
    "VolumeDesc":null,
    "VolumeName":null,
    "BookId":0,
    "ChapterName":"章节名称",
    "PreChapterId":455,
    "NextChapterId":457,
    "SeqNo":null,
    "AuthorId":0,
    "ChapterWordsCount":0,
    "Status":null,
    "StatusText":null,
    "InsertTime":null,
    "LastUpdateTime":"2016-08-12 00:00:00",
    "Summary":null,
    "Price":0,
    "AdVipPrice":0,
    "AddPrice":null,
    "BuyCount":null,
    "ChapterbuyCount":null,
    "IsVip":null,
    "ClickCount":null,
    "Content":null,
    "ChapterSize":null,
    "ChapterInitWords":0,
    "ChapterLength":null,
    "FontFamily":null,
    "IsFreeChapter":null,
    "AuditStatus":null,
    "AuthorName":"梦姬",
    "Appreciation":null,
    "Top":null,
    "PiaofuImageUrl":null,
    "PiaofuAUrl":null,
    "VipImageUrl":null,
    "Other":null,
    "FreeStatus":null,
    "CBID":null,
    "CCID":null,
    "UUID":null
  },
  "vipChapterCount":0,
  "allPrice":0,
  "isbuy":1,   // 是否已购买
  "singlePrice":0,
  "qRCode":"qr code url"
}

更新 #

网上应该已经有很多对起点 API 自动订阅的实现,参考那些可能会更加方便。

知识共享许可协议 本作品采用知识共享署名-相同方式共享 4.0 国际许可协议进行许可。

评论区