Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- const TIMEOUT_FOR_RECONNECTION = 2;
- var fs = require('fs');
- var clearAllTimeouts = () => {
- if(timeoutIndex.vi) {
- clearTimeout(timeoutIndex.vi);
- }
- if(timeoutIndex.cz) {
- clearTimeout(timeoutIndex.cz);
- }
- delete global_headers.cookie;
- }
- var request = require('request');
- request = request.defaults({
- followAllRedirects: true
- });
- var moment = require('moment');
- var log4js = require('log4js');
- var log4js_appenders = {};
- log4js_appenders.log = {
- type: 'file',
- filename: 'logs/email.log'
- };
- log4js.configure({
- appenders: log4js_appenders,
- categories: {
- default: {
- appenders: ["log"],
- level: 'info'
- }
- }
- });
- const logger = log4js.getLogger(profile);
- const dateSearchRange = 2; // 2 days
- const previousCode = [
- "xxxxxx",,"xxxxx"
- ];
- var timeoutIndex = {};
- var email_sending_status = false;
- var from_mail = "haithanha@seznam.cz";
- var host_mail = "smtp.seznam.cz";
- var mail_password = "Online22**";
- var destination_mail = "toilanam93@gmail.com";
- var nodemailer = require('nodemailer');
- var search_date;
- try {
- var argv = process.argv[2];
- search_date = moment(argv);
- }
- catch(e) {
- search_date = moment();
- }
- var home_urls = {
- vi: 'https://onmyojiguide.com/guide/bounty-list/',
- cz: 'https://onmyojiguide.com/guide/bounty-list/'
- }
- var global_headers = {
- 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36',
- 'referer': 'https://onmyojiguide.com/'
- }
- var regex_pattern = {
- vi: /<h2 class="article_title"><a href="([^\"]*)">[^<]*<\/a><\/h2>\s*<span class="hidden">, <\/span>\s*<p class="articleDate">([0-9\.\s\/:]*)[^<]*<span class="updated">\s*Aktualizováno:\s*<span class="time">([^<]*)<\/span>[^<]*<\/span>[^<]*<\/p>[^<]*(<img [^>]*>)?[^<]*<p class="article_perex">([^<]*)/g,
- cz: /<h2 class="article_title"><a href="([^\"]*)">[^<]*<\/a><\/h2>\s*<span class="hidden">, <\/span>\s*<p class="articleDate">([0-9\.\s\/:]*)[^<]*<span class="updated">\s*Aktualizováno:\s*<span class="time">([^<]*)<\/span>[^<]*<\/span>[^<]*<\/p>[^<]*(<img [^>]*>)?[^<]*<p class="article_perex">([^<]*)/g
- }
- var date_format = "DD.MM.YYYY / HH:mm";
- let poolConfig = {
- host: host_mail,
- port: 465,
- secure: true, // use TLS
- auth: {
- user: from_mail,
- pass: mail_password
- }
- };
- let transporter = nodemailer.createTransport(poolConfig);
- var profile = require('./profile.json');
- var message = {
- from: `${profile.fn} ${profile.ln} <${from_mail}>`,
- to: `ONM <${destination_mail}>`,
- subject: "",
- attachments: []
- };
- if(profile.dependant && profile.dependant.fn) {
- message.text = `
- Word: ${profile.fn}
- meaning: ${profile.ln}
- Similar: ${profile.Similar}
- Type: ${profile.Type}
- Ship: ${profile.Ship}
- My: ${profile.My}
- ${profile.app}
- Word: ${profile.dependant.fn}
- meaning: ${profile.dependant.ln}
- Similar: ${profile.dependant.Similar}
- Type: ${profile.dependant.Type}
- Ship: ${profile.dependant.Ship}
- My: ${profile.dependant.My}
- ${profile.dependant.app}
- `;
- }
- else {
- message.text = `
- Word: ${profile.fn}
- meaning: ${profile.ln}
- Similar: ${profile.Similar}
- Type: ${profile.Type}
- Ship: ${profile.Ship}
- My: ${profile.My}
- ${profile.app}
- `;
- }
- profile.files.forEach(function(filename) {
- message.attachments.push({
- path: filename,
- type: 'application/pdf',
- filename: filename
- })
- });
- var getCookie = (lang = 'cz') => {
- setTimeout(getCookie,2500);
- request({
- method: 'get',
- uri: home_urls[lang],
- headers: global_headers
- }, function(e, r, b) {
- if(!e) {
- var matches = /document.cookie=\"([^;]*);/g.exec(b);
- if(matches && matches.length && matches[1]) {
- global_headers.referer = home_urls[lang];
- global_headers.cookie = matches[1];
- logger.info("Successfully get cookie");
- }
- else {
- logger.error("No cookie found.");
- delete global_headers.cookie;
- }
- } else {
- logger.error("Can't get cookie. Probably blocked?");
- delete global_headers.cookie;
- }
- });
- }
- var startWorking = () => {
- logger.info("Start scanning");
- if(!global_headers.cookie) {
- getCookie();
- setTimeout(scanForNewPost, TIMEOUT_FOR_RECONNECTION*1000, 'vi');
- }
- else {
- run();
- }
- }
- //var run = () => {
- // scanPost("vi");
- // scanPost("cz");
- //}
- var scanForNewPost = (language = 'vi', date = search_date) => {
- if(!global_headers.cookie) {
- return;
- }
- if (language == 'vi') {
- language = 'cz';
- } else {
- language = 'vi';
- }
- var uri = home_urls[language];
- console.log('Scanning for new post in url', uri);
- request({
- method: 'get',
- uri: uri,
- headers: global_headers
- }, function(e, r, b) {
- if(!e) {
- regex_pattern[language].lastIndex = 0;
- var articles = b.match(regex_pattern[language]);
- if (articles != null) {
- articles.forEach(function(article) {
- regex_pattern[language].lastIndex = 0;
- var elements = regex_pattern[language].exec(article);
- if(elements && elements.length >= 3) {
- var url = elements[1];
- var published_date = moment(elements[2].trim(), date_format);
- var edited_date = moment(elements[3].trim(), date_format);
- var content = elements[5];
- var code = findCodeInString(content);
- if(code && code != "OLDCODE" && !email_sending_status) {
- email_sending_status = true;
- message.subject = code;
- transporter.sendMail(message, function(err, message) {
- console.log(err || message);
- });
- }
- // var recent = Math.floor(Math.abs((date - published_date) / 86400000)) <= dateSearchRange || Math.floor(Math.abs((date - edited_date) / 86400000)) <= dateSearchRange
- // if(recent) {
- // logger.info(language + " Found a new post " + url);
- scanForNewCode(url, language);
- // return;
- // }
- }
- });
- logger.info(language + " No new post, retry");
- if(!email_sending_status) {
- scanForNewPost(language);
- }
- } else {
- logger.error(language + " No new articles, scan again!");
- clearAllTimeouts();
- setTimeout(scanForNewPost, TIMEOUT_FOR_RECONNECTION*1000, language);
- }
- }
- else {
- logger.error(language + " Can't fetch page for new posts. Probably banned?");
- clearAllTimeouts();
- setTimeout(scanForNewPost, TIMEOUT_FOR_RECONNECTION*1000, language);
- }
- })
- }
- var scanForNewCode = (url, language = 'vi') => {
- var uri = 'https://onmyojiguide.com/' + url;
- console.log('Scanning for new code in url', uri);
- request({
- method: 'get',
- uri: uri,
- headers: global_headers
- }, function(e, r, b) {
- if(!e) {
- var content = b.match(/<div class="article_content">[^]*<div id="menu_container" class="noprint">/g);
- if(content && content[0]) {
- if(content && content[0]) {
- var code = findCodeInString(content[0]);
- if(code && code != "OLDCODE" && !email_sending_status) {
- email_sending_status = true;
- message.subject = code;
- transporter.sendMail(message, function(err, message) {
- console.log(err || message);
- });
- }
- else {
- logger.info(language + " No code in post");
- }
- }
- } else {
- logger.error(language + " Can't fetch article. Probably blocked?");
- clearAllTimeouts();
- setTimeout(scanForNewPost, TIMEOUT_FOR_RECONNECTION*1000, language);
- }
- }
- else {
- logger.error(language + " Can't fetch article. Probably blocked?");
- clearAllTimeouts();
- setTimeout(scanForNewPost, TIMEOUT_FOR_RECONNECTION*1000, language);
- }
- })
- }
- var findCodeInString = (s) => {
- var code = s.match(/[a-z0-9]{12}/g);
- if(code && code[0]) {
- if (!isNaN(code[0])) {
- return false;
- }
- console.log(code[0]);
- if(previousCode.indexOf(code[0]) == -1) {
- return code[0];
- }
- else {
- return "OLDCODE";
- }
- }
- else {
- return false;
- }
- }
- var prepare = () => {
- if(!global_headers.cookie) {
- setTimeout(prepare, 1500);
- }
- else {
- run();
- }
- }
- var run = () => {
- scanForNewPost('vi');
- }
- console.log('~~~~~ Started the working.. ~~~~~');
- var retryGettingCookie = () => {
- console.log(`Can not get the result successfully!! Will try again after ${TIMEOUT_FOR_RECONNECTION} seconds`);
- logger.error(`Can not get the result successfully!! Will try again after ${TIMEOUT_FOR_RECONNECTION} seconds`);
- setTimeout(() => {
- startWorking();
- }, 1000 * TIMEOUT_FOR_RECONNECTION);
- }
- var startWorking = () => {
- getCookie();
- prepare();
- }
- startWorking();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement