fme-twitter
Version:
Twitter module for aggregating twitter data
113 lines • 5.05 kB
JavaScript
"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