UNPKG

ptt-client

Version:

A Node client for fetching data from ptt.cc.

94 lines (70 loc) 2.42 kB
# ptt-client **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(); }); })(); ``` ## Development ``` npm run test npm run build ``` ## License MIT