JSFiddle - React, Tailwind, and code Playground
JavaScript
"use strict";
const gitter = require('node-gitter'),
mysql = require("mysql"),
config = require('./source/config'),
request = require('request-promise');
class Parser {
constructor() {
this.gitter = new gitter(config.token);
this.room = config.room;
this.mysql = mysql.createPool({
host: config.mysql.host,
user: config.mysql.user,
password: config.mysql.password,
database: config.mysql.database
});
}
// Request the messages from gitter.
requestMessagesFromGitter(limit, skip) {
return request('https://api.gitter.im/v1/rooms/' + config.room + '/chatMessages' +
'?access_token=' + config.token + '&limit=' + limit + '&skip=' + skip)
.catch(error => {
throw new Error('Error in the request: ', error)
}).then(JSON.parse);
}
// Process all messages.
getAllMessages(limit, skip) {
const self = this;
function getMore() {
return self.requestMessagesFromGitter(limit, skip)
.then(response => {
if (response.length === limit) {
skip += limit;
return self.saveMessages(response).then(getMore);
} else {
if (response.length) {
return self.saveMessages(response);
}
}
});
}
return getMore();
}
// Save messages to database.
saveMessages(messages) {
let query = 'INSERT INTO messages_new (user_id, username, message, sent_at) VALUES ';
for (let message of messages) {
let userId = message.fromUser.id,
username = message.fromUser.username,
text = message.text.replace(/["\\]/g, '|'),
date = message.sent;
query += '("' + userId + '", "' + username + '", "' + text + '", "' + date + '"), ';
}
query = query.substr(0, query.length - 2);
return new Promise((resolve, reject) => {
return this.mysql.getConnection((error, connection) => {
connection.query(query,...