ptt-client
Version:
A Node client for fetching data from ptt.cc.
94 lines (70 loc) • 2.42 kB
Markdown
**ptt-client** is an unofficial client to fetch data from PTT ([ptt.cc]), the
famous BBS in Taiwan, over WebSocket. This module works in browser and Node.js.
PTT supports connection with WebSocket by [official].
[ptt.cc]: https://www.ptt.cc
[official]: https://www.ptt.cc/bbs/SYSOP/M.1496571808.A.608.html
## Installation
```
npm install ptt-client
```
## Example
```js
import Ptt from 'ptt-client';
import {Article, Board} from 'ptt-client/sites/ptt/model';
// if you are using this module in node.js, 'ws' is required as WebSocket polyfill.
// you don't need this in modern browsers
global.WebSocket = require('ws');
(async function() {
const ptt = new Ptt();
ptt.once('connect', () => {
const kickOther = true;
if (!await ptt.login('username', 'password', kickOther))
return;
// get last 20 articles from specific board. the first one is the latest
let query = ptt.select(Article).where('boardname', 'C_Chat');
let article = await query.get();
// get articles with offset
let offset = articles[article.length-1].id - 1;
query.where('id', offset);
let articles2 = await query.get();
// get articles with search filter (type: 'push', 'author', 'title')
query = ptt.select(Article)
.where('boardname', 'C_Chat')
.where('title', '閒聊')
.where('title', '京阿尼')
.where('push', '20');
articles = await query.get();
// get the content of specific article
query.where('id', articles[articles.length-1].id);
let article = await query.getOne();
// get board list
query = ptt.select(Board).where('entry', 'class');
let classBoards = await query.get();
// get hot board list
query = ptt.select(Board).where('entry', 'hot');
let hotBoards = await query.get();
// get your favorite list
query = ptt.select(Board).where('entry', 'favorite');
let favorites = await query.get();
// search board by prefix
query = ptt.select(Board).where('prefix', 'c_cha');
let boards = await query.get();
// get favorite list in a folder
if (favorites[0].folder) {
query.where('offsets', [favorites[0].id]);
let favorites2 = await query.get();
}
let mails = await ptt.getMails();
let mail = await ptt.getMail(mails[0].sn);
await ptt.logout();
});
})();
```
```
npm run test
npm run build
```
MIT