Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- "use strict";
- require("babel-core/register");
- import fetch from "node-fetch";
- import striptags from 'striptags';
- import co from 'co';
- import _ from 'underscore';
- const keyWords = ["butthurt", "бугурт", "буггурт", "баттхерт", "батхерт"];
- let checkCaps = (str) => striptags(str).toUpperCase() === striptags(str);
- let countDogs = (str) => (str.match(/\@/g) || []).length;
- let detectButthurt = (thread) => {
- let expr = new RegExp(keyWords.join("|"));
- let dogsOut = countDogs(thread.comment) > 0;
- let capsOn = checkCaps(thread.comment);
- let subjContainsKw = expr.test(thread.subject.toLowerCase());
- return subjContainsKw || capsOn || dogsOut;
- };
- let fetchThreadsLight = function*(url) {
- let response = yield fetch(url);
- let parsedResponse = yield response.json();
- console.log('total threads recieved: ' + parsedResponse.threads.length);
- return parsedResponse.threads;
- };
- let findSuspiciousThreads = (threads) => {
- let suspiciousThreads = [];
- for (let thread of threads) {
- let butthurtDetected = detectButthurt(thread);
- if (butthurtDetected) {
- suspiciousThreads.push(thread);
- // console.log('------------------');
- // console.log('link: ' + 'http://2ch.hk/b/res/' + thread.num + '.html');
- // console.log('------------------');
- }
- }
- return suspiciousThreads;
- };
- let getSuspiciousThreads = function*() {
- let threads = [];
- try {
- // threads w/o posts
- threads = yield * fetchThreadsLight("http://2ch.hk/b/threads.json");
- } catch (e) {
- console.log('threads fetch failed');
- }
- return findSuspiciousThreads(threads);
- };
- let loadThreads = co.wrap(function*(threads) {
- let res = [];
- for (let thread of threads) {
- let url = "http://2ch.hk/b/res/" + thread.num + ".json";
- res.push(fetch(url));
- }
- return yield res;
- });
- let parseLoadedThreads = co.wrap(function*(threads) {
- let res = [];
- for (let thread of threads) {
- res.push(thread.json());
- }
- return yield res;
- });
- let improvedButthurdDetector = (thread) => {
- // 0 post is OP post
- // thread.threads[0].posts;
- let dogs = 0;
- for (let post of thread.threads[0].posts) {
- dogs += countDogs(post.comment);
- }
- return dogs > 3;
- };
- let runDetector = (parsedThreads) => {
- for (let thread of parsedThreads) {
- thread.butthurtDetected = improvedButthurdDetector(thread);
- }
- return _.filter(parsedThreads, (thread) => thread.butthurtDetected);
- };
- let end = (butthurtThreads) => {
- for (let thread of butthurtThreads) {
- console.log('http://2ch.hk/b/res/' + thread.current_thread + '.html');
- }
- };
- co(getSuspiciousThreads).then((suspiciousThreads) => loadThreads(suspiciousThreads))
- .then((loadedThreads) => parseLoadedThreads(loadedThreads))
- .then((parsedThreads) => runDetector(parsedThreads))
- .then((butthurtThreads) => end(butthurtThreads));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement