UNPKG

fme-twitter

Version:

Twitter module for aggregating twitter data

113 lines 5.05 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); const fme_logger_1 = require("fme-logger"); var L = new fme_logger_1.Log("FmeTwitter"); L.setLevel("info"); const Twit = require("twit"); const users_1 = require("./models/users"); const score_1 = require("./models/score"); class FmeTwitter { constructor(db, keys) { this.adaptiveFilter = ["#breaking"]; this.blockedUsers = []; this.importantUsers = []; this.addBlockedUser = (id) => { this.blockedUsers.push(id); this.users.addBlock(id); }; this.isImportant = (id) => { var index = this.importantUsers.findIndex((a) => { return a.id === id; }); if (index > -1) return true; return false; }; this.score = (tweet) => __awaiter(this, void 0, void 0, function* () { var tweetScore = 0; var textArray = tweet.text.match(/\b(\w+)\b/g); if (textArray) { for (var i in textArray) { var word = textArray[i]; if (word.length < 3) continue; var score = yield this.wordScore.get(word); tweetScore += score; } } return tweetScore; }); this.startStream = () => __awaiter(this, void 0, void 0, function* () { return new Promise((resolve, reject) => __awaiter(this, void 0, void 0, function* () { try { L.debug("Initialiaze twitter stream"); L.debug("Getting Blocked Users"); this.blockedUsers = (yield this.users.getBlocked()); L.debug("Getting important users"); this.importantUsers = (yield this.users.getImportant()); var ids = this.importantUsers.map(a => a.id.toString()); L.debug("Starting twitter stream", this.importantUsers.length); this.stream = this.twit.stream('statuses/filter', { "track": this.adaptiveFilter, "lang": "en", "follow": ids }); this.stream.on("tweet", (tweet) => __awaiter(this, void 0, void 0, function* () { // var user = await this.users.incPostCount(tweet.user); if (typeof this.listen == "function") { L.debug("pushing to the listener(s)"); this.listen(tweet); } })); this.stream.on("message", (m) => { L.debug("message", m); }); this.stream.on("connected", (m) => { L.debug("connected", m); }); this.stream.on("delete", (m) => { L.debug("twitter Stream delete", m); }); this.stream.on("limit", (m) => { L.debug("twitter Stream Limit", m); }); this.stream.on("connect", (m) => { L.debug("twitter-stream connect", m.method); }); this.stream.on("connected", (m) => { L.debug("twitter-stream connected", m); }); this.stream.on("error", (m) => { L.debug("Twitter Error", m); }); } catch (err) { L.error(err); reject(err); return; } L.debug("stream start completed"); resolve(); })); }); this.stopStream = () => { this.stream.stop(); }; this.send = (message) => { this.twit.post('statuses/update', { status: message }); }; this.twit = new Twit(keys); if (db) { this.users = new users_1.TwitterUsers(db); this.wordScore = new score_1.WordScore(db); } } } exports.FmeTwitter = FmeTwitter; //# sourceMappingURL=fme-twitter.js.map