All Projects → kevinptt0323 → Ptt Client

kevinptt0323 / Ptt Client

Licence: mit
A Node.js/Browser client for fetching data from ptt.cc

Programming Languages

javascript
184084 projects - #8 most used programming language
typescript
32286 projects

Projects that are alternatives of or similar to Ptt Client

Ejdb
🏂 EJDB 2.0 — Embeddable JSON Database engine C library. Simple XPath like query language (JQL). Websockets / Android / iOS / React Native / Flutter / Java / Dart / Node.js bindings. Docker image.
Stars: ✭ 1,187 (+1421.79%)
Mutual labels:  websocket
Deps Report
Generate reports about dependencies and dependents of your JavaScript/TypeScript files through an AST. It supports import and require statements.
Stars: ✭ 76 (-2.56%)
Mutual labels:  npm-package
Bilibili danmuji
(Bilibili)B站直播礼物答谢、定时广告、关注感谢,自动回复工具,房管工具,自动打卡,Bilibili直播弹幕姬(使用websocket协议),java版B站弹幕姬,基于springboot。
Stars: ✭ 76 (-2.56%)
Mutual labels:  websocket
Delay Cli
Delay execution for a given amount of seconds
Stars: ✭ 74 (-5.13%)
Mutual labels:  npm-package
Just An Email
App to share files & texts between your devices without installing anything
Stars: ✭ 75 (-3.85%)
Mutual labels:  websocket
Wscelery
Real time celery monitoring using websockets
Stars: ✭ 76 (-2.56%)
Mutual labels:  websocket
Cebsocket
Lightweight WebSocket library for C.
Stars: ✭ 73 (-6.41%)
Mutual labels:  websocket
Minimal Feedback
🗳 minimal-feedback is a blazingly fast and highly customizable component to get user feedback.
Stars: ✭ 78 (+0%)
Mutual labels:  npm-package
Vue Scroll Progress Bar
Vue.js plugin for page scroll progress bar
Stars: ✭ 76 (-2.56%)
Mutual labels:  npm-package
Deno Websocket
🦕 A simple WebSocket library like ws of node.js library for deno
Stars: ✭ 74 (-5.13%)
Mutual labels:  websocket
Parse Ms
Parse milliseconds into an object
Stars: ✭ 74 (-5.13%)
Mutual labels:  npm-package
Gowog
Gowog, Golang based Web multiplayer Online Game
Stars: ✭ 75 (-3.85%)
Mutual labels:  websocket
Incompose
A inferno utility belt for function components and higher-order components
Stars: ✭ 76 (-2.56%)
Mutual labels:  npm-package
Wechat Pc Hook Ws
微信PcHooker websocket api
Stars: ✭ 74 (-5.13%)
Mutual labels:  websocket
Huobi golang
Go SDK for Huobi Spot API
Stars: ✭ 76 (-2.56%)
Mutual labels:  websocket
Github Files Fetcher
Download a specific folder or file from a GitHub repo through command line
Stars: ✭ 73 (-6.41%)
Mutual labels:  npm-package
Vue C3
vue-c3 is a reusable vue component for c3 charts
Stars: ✭ 76 (-2.56%)
Mutual labels:  npm-package
Voten
The code that powers voten.co
Stars: ✭ 1,215 (+1457.69%)
Mutual labels:  websocket
Gowebsocket
Gorilla websockets based simplified websocket-client implementation in GO.
Stars: ✭ 77 (-1.28%)
Mutual labels:  websocket
Noduino
JavaScript and Node.js Framework for controlling Arduino with HTML and WebSockets
Stars: ✭ 1,202 (+1441.03%)
Mutual labels:  websocket

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.

Installation

npm install ptt-client

Example

import Ptt from 'ptt-client';
import {Article, Board, Mail} 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();
    }

    // get mails
    query = ptt.select(Mail);
    let mails = await query.get();

    // get mail
    query.where('id', mails[0].sn);
    let mail = await query.getOne();

    await ptt.logout();

  });
})();

Development

npm run test
npm run build

License

MIT

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].