UNPKG

pixiv-illust

Version:

A third-party Node.js library for Pixiv.

248 lines (174 loc) 6.39 kB
# pixiv-illust 一个 Pixiv 的第三方 Node.js 库。 ## 安装 ### 通过 Git ``` git clone https://github.com/HakurouKen/pixiv-illust.git cd pixiv-illust && npm install npm link ``` 注意: `npm link` 将会把 `pixiv-download` 链接为全局指令。如果你不想设置全局的别名,也可以直接使用 `./bin/download`。 ### 通过 npm ``` npm install pixiv-illust -g ``` 注意:如果你只想使用 javascript API 而不是全局 `pixiv-download` 指令时,只需 `npm install pixiv-illust --save`。 ## 命令行 ### 基础参数 ``` -h, --help 输出帮助信息 -u --user <username> 用户名 -p --password <password> 密码 -c --cookies <cookies> JSON 格式的 cookie 文件 -d --dest [folder] 文件下载路径 ``` 如果指定了 `-u -p` 参数,`-c` 参数将会被忽略。 登录后,登陆的 cookies 将会被缓存到 `.cookies.json` 中。如果指定没有登录参数,将会默认尝试加载这个缓存 cookies. ### 插画 通过 ID 下载插画。 ``` pixiv-download illust <id> ``` ### Bookmark 下载所有书签。 ``` pixiv-download bookmark ``` ### 作者 通过作者 ID 下载 ``` pixiv-downoad author <id> ``` ### 排行 下载排行榜 Option: `-m --mode <mode>` 排行榜模式,默认为 `daily`. `-t --date <date>` 格式为 yyyyMMdd 的日期, 默认为30小时前的日期。 `-r --rank <rank>` 前 n 个排名,默认 `50` ``` pixiv-download rank ``` ### 示例 ``` # 下载单个(组)图片 pixiv-download illust 59615212 -u username -p password -d ../ # 采用缓存的 cookie 下载图片 pixiv-download illust 59657563 # 下载一个作者的作品 pixiv-download author 8895868 # 下载所有收藏 pixiv-download bookmarks # 下载排行榜 pixiv-download rank # 下载周排行 TOP50 pixiv-download rank -m weekly -n 50 # 下载 2016-10-01 最受男性欢迎作品排行榜 TOP100 pixiv-download rank -m daily -t 20161001 -n 100 ``` ## Api ### 登录 (login) 登录 Pixiv(CN). 大多数操作需要登录态,所以最好在做其它操作前进行登录。 如果在登录前,进行了需要登录的行为,将会跑出一个异常。 当登录之后,你可以使用 `login.dumps` 缓存 cookies 到一个 json 文件, 在下一次登录时,你可以使用 `login.loads` 从文件中加载登录态。 通过 `login.reset` 可以清空所有的登录态。注意登录操作中这是唯一的同步方法。 ```javascript var login = require('pixiv-illust').login; // 返回一个 response 的 Promise login.login('PIXIV_ACCOUNT','PIXIV_PASSWORD').then(function(resp){ // 已登录. console.log(resp); // 保存 cookies. return login.dumps('./.cookies.json'); }).then(function(){ // 清空 cookies. login.reset(); }).catch(function(err){ // 登录时出现异常 }); // 你也可以从文件中加载 cookies. login.loads('./cookies.json').then(function(){ console.log('Already logged in.'); }); ``` ### 图片 (Illust) 通过 ID 获取图片。 `Illust.prototype.getInfo()` : 获取图片信息. `Illust.prototype.download(pathTemplate)` : 下载图片到指定路径. 被双大括号`{{}}`包裹的字符(如: `{{title}}`),将会被当作模板字符串处理, 将会被图片信息中对应的值所替代. 可选值 `id`,`title`,`suffix`,`author`,`date`. ```javascript var pixiv = require('pixiv-illust'); var login = pixiv.login, Illust = pixiv.Illust; var loggedIn = login.login('PIXIV_ACCOUNT','PIXIV_PASSWORD'); var illust = new Illust(36486718); // 获取图片信息. loggedIn.then(function(){ return illust.getInfo(); }).then(function(info){ console.log(info); // { id: 36486718, // title: 'セーラームーン', // author: 'SALT', // tools: [ 'Photoshop' ], // page: 'http://www.pixiv.net/member_illust.php?mode=medium&illust_id=36486718', // date: '2013年6月19日 02:26' } }) // 下载. loggedIn.then(function(){ illust.download('{{author}} - {{title}}{{suffix}}'); }); ``` ### 收藏 (Bookmark) 获取所有收藏. `Bookmark.prototype.getPage(page=1)`: 获取指定页面的信息. `Bookmark.prototype.get(page=1)`: `getPage` 的别名. `Bookmark.prototype.getPageContent(page=1)`: 获取指定页面的所有收藏(只包括图片的信息,不包括分页信息). `Bookmark.prototype.getAll()`: 获取所有收藏. ```javascript var pixiv = require('pixiv-illust'); var login = pixiv.login, Illust = pixiv.Illust, Bookmark = pixiv.Bookmark; var loggedIn = login.loads('./.cookies.json'); var downloadIllusts = function(list) { list = list || []; var illust, info = list[0]; if (!info) { return Promise.resolve(null); } illust = new Illust(info.illust_id); return illust.download().then(function(){ return downloadIllusts(list.slice(1)); }); } // 下载第一页. loggedIn.then(function(){ var bookmark = new Bookmark(); return bookmark.getPageContent(1); }).then(downloadIllusts).catch(console.error); ``` ### 作者 (Author) 获取坐着的信息. `Author.prototype.getInfo()`: 获取作者信息详情的数组. `Author.prototype.getIllusts(page=1)`: 获取该作者第 `page` 页的所有作品. `Author.prototype.getIllustsContent(page=1)`: 获取指定页的所有作品(不包含分页信息). `Author.prototype.getAllIllusts()`: 获取指定作者的所有作品. ### 排行榜 (Rank) `Rank.prototype.constructor(mode='daily',date=null)`: 构造器需要 mode/date 两个参数. 可选模式有 `daily`,`weekly`,`monthly`,`rookie`,`male`,`female` (无需登录), `daily_r18`,`weekly_r18`,`r18g`,`male_r18`, `female_r18` (r18 需要登录). 参数 `date` 需要是 `yyyyMMdd`格式的字符串或 Date 对象, 默认为30小时前的日期. `Rank.prototype.getPage(page=1)`: 获取指定排行榜的对应分页数据。 `Rank.prototype.get(page)`: `getPage`的别名. `Rank.prototype.getRank(rank=500)`: 获取指定排行榜的 TOP N . `Rank.prototype.getAll()`: 获取指定榜单的全部数据. ```javascript var pixiv = require('pixiv-illust'); var login = pixiv.login Rank = pixiv.Rank; var loggedIn = login.loads('./.cookies.json'); loggedIn.then(function(){ var rank = new Date('weekly','20161001'); // 获取 2016-10-01 的周榜前 100 return rank.getRank(100); }).then(console.log); ``` ## 许可 MIT