Advertisement
Guest User

Untitled

a guest
Nov 12th, 2016
159
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. "use strict";
  2.  
  3. require("babel-core/register");
  4.  
  5. import fetch from "node-fetch";
  6. import striptags from 'striptags';
  7. import co from 'co';
  8. import _ from 'underscore';
  9.  
  10. const keyWords = ["butthurt", "бугурт", "буггурт", "баттхерт", "батхерт"];
  11.  
  12. let checkCaps = (str) => striptags(str).toUpperCase() === striptags(str);
  13. let countDogs = (str) => (str.match(/\@/g) || []).length;
  14.  
  15. let detectButthurt = (thread) => {
  16.     let expr = new RegExp(keyWords.join("|"));
  17.     let dogsOut = countDogs(thread.comment) > 0;
  18.     let capsOn = checkCaps(thread.comment);
  19.     let subjContainsKw = expr.test(thread.subject.toLowerCase());
  20.  
  21.     return subjContainsKw || capsOn || dogsOut;
  22. };
  23.  
  24. let fetchThreadsLight = function*(url) {
  25.     let response = yield fetch(url);
  26.     let parsedResponse = yield response.json();
  27.     console.log('total threads recieved: ' + parsedResponse.threads.length);
  28.     return parsedResponse.threads;
  29. };
  30.  
  31. let findSuspiciousThreads = (threads) => {
  32.     let suspiciousThreads = [];
  33.  
  34.     for (let thread of threads) {
  35.         let butthurtDetected = detectButthurt(thread);
  36.         if (butthurtDetected) {
  37.             suspiciousThreads.push(thread);
  38.             // console.log('------------------');
  39.             // console.log('link: ' + 'http://2ch.hk/b/res/' + thread.num + '.html');
  40.             // console.log('------------------');
  41.         }
  42.     }
  43.     return suspiciousThreads;
  44. };
  45.  
  46. let getSuspiciousThreads = function*() {
  47.     let threads = [];
  48.  
  49.     try {
  50.         // threads w/o posts
  51.         threads = yield * fetchThreadsLight("http://2ch.hk/b/threads.json");
  52.     } catch (e) {
  53.         console.log('threads fetch failed');
  54.     }
  55.  
  56.     return findSuspiciousThreads(threads);
  57. };
  58.  
  59. let loadThreads = co.wrap(function*(threads) {
  60.     let res = [];
  61.     for (let thread of threads) {
  62.         let url = "http://2ch.hk/b/res/" + thread.num + ".json";
  63.         res.push(fetch(url));
  64.     }
  65.     return yield res;
  66. });
  67.  
  68. let parseLoadedThreads = co.wrap(function*(threads) {
  69.     let res = [];
  70.     for (let thread of threads) {
  71.         res.push(thread.json());
  72.     }
  73.     return yield res;
  74. });
  75.  
  76. let improvedButthurdDetector = (thread) => {
  77.     // 0 post is OP post
  78.     // thread.threads[0].posts;
  79.     let dogs = 0;
  80.     for (let post of thread.threads[0].posts) {
  81.         dogs += countDogs(post.comment);
  82.     }
  83.     return dogs > 3;
  84. };
  85.  
  86. let runDetector = (parsedThreads) => {
  87.     for (let thread of parsedThreads) {
  88.         thread.butthurtDetected = improvedButthurdDetector(thread);
  89.     }
  90.     return _.filter(parsedThreads, (thread) => thread.butthurtDetected);    
  91. };
  92.  
  93. let end = (butthurtThreads) => {
  94.     for (let thread of butthurtThreads) {
  95.         console.log('http://2ch.hk/b/res/' + thread.current_thread + '.html');
  96.     }
  97. };
  98.  
  99. co(getSuspiciousThreads).then((suspiciousThreads) => loadThreads(suspiciousThreads))
  100.     .then((loadedThreads) => parseLoadedThreads(loadedThreads))
  101.     .then((parsedThreads) => runDetector(parsedThreads))
  102.     .then((butthurtThreads) => end(butthurtThreads));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement