]*>/g, '');
- element.innerHTML = element.innerHTML.replace(/<\/font>/g, '');
- element.innerHTML = element.innerHTML.replace(/<\/div>/g, '');
- finalText = element.innerText;
- finalText = finalText.replace(/
/g, '\n');
- finalText = finalText.replace(/\[img=([^\]]*)\]http:\/\/images\.proboards\.com\/v5\/images\/smiley\/.*?\[\/img\]/g, '$1');
- finalText = finalText.replace(/\[img=([^\]]*)\]http:\/\/images\.proboards\.com\/v5\/smiley\/.*?\[\/img\]/g, '$1');
- return finalText;
- };
-
- findBoards = function() {
- var boardDescriptionList, boardDescriptions, boardInfo, boardLinks, boardTitles, boards, i;
- boards = document.querySelectorAll('tr.board.item td:nth-child(2) > span > a');
- boardTitles = Array.prototype.map.call(boards, function(e) {
- return e.textContent;
- });
- boardLinks = Array.prototype.map.call(boards, function(e) {
- return e.href;
- });
- boardDescriptions = document.querySelectorAll('tr.board.item td:nth-child(2) > p.description');
- boardDescriptionList = Array.prototype.map.call(boardDescriptions, function(e) {
- return e.textContent;
- });
- boardInfo = [];
- i = 0;
- while (i < boardTitles.length) {
- boardInfo.push({
- title: boardTitles[i],
- description: boardDescriptionList[i],
- link: boardLinks[i]
- });
- i++;
- }
- return boardInfo;
- };
-
- findPages = function() {
- var lastPage, maxPage, pageBase, pageInfo, pageNr, pages, shownPages;
- shownPages = document.querySelectorAll('ul.ui-pagination > li.ui-pagination-page.ui-pagination-slot > a[href]');
- lastPage = shownPages[shownPages.length - 1];
- pageInfo = /(.*\?page=)(\d*)/.exec(lastPage);
- pageBase = pageInfo[1];
- maxPage = pageInfo[2];
- return pages = (function() {
- var _i, _results;
- _results = [];
- for (pageNr = _i = 1; 1 <= maxPage ? _i <= maxPage : _i >= maxPage; pageNr = 1 <= maxPage ? ++_i : --_i) {
- _results.push("" + pageBase + pageNr);
- }
- return _results;
- })();
- };
-
- findThreads = function() {
- var i, threadIds, threadInfo, threadLinks, threadTitles, threads;
- threads = document.querySelectorAll('tr.item.thread > td:nth-child(3) a.thread-link');
- threadTitles = Array.prototype.map.call(threads, function(e) {
- return e.textContent;
- });
- threadLinks = Array.prototype.map.call(threads, function(e) {
- return e.href;
- });
- threadIds = Array.prototype.map.call(threads, function(e) {
- return /.*\/thread\/(\d*)\/.*/.exec(e.href)[1];
- });
- threadInfo = [];
- i = 0;
- while (i < threadTitles.length) {
- threadInfo.push({
- id: threadIds[i],
- title: threadTitles[i],
- link: threadLinks[i]
- });
- i++;
- }
- return threadInfo;
- };
-
- findPosts = function(replaceHtml) {
- var postInfo;
- postInfo = Array.prototype.map.call(document.querySelectorAll('tr.item.post'), function(e) {
- var attachmentName, attachmentNode, attachmentNodes, attachments, dateNode, id, linkSplit, message, messageNode, timestamp, user, userNode, _i, _len;
- messageNode = e.querySelector('td.content div.message');
- attachmentNodes = messageNode.querySelectorAll('div.post_attachments blockquote a');
- dateNode = e.querySelector('td.content span.date > abbr.time');
- userNode = e.querySelector('td.left-panel a.user-link,td.left-panel > div.mini-profile.guest-mini-profile');
- id = /post-(\d*)/.exec(e.id)[1];
- message = replaceHtml(messageNode);
- attachments = [];
- for (_i = 0, _len = attachmentNodes.length; _i < _len; _i++) {
- attachmentNode = attachmentNodes[_i];
- attachmentName = attachmentNode.text;
- if (attachmentNode.childElementCount > 0) {
- attachmentName = attachmentNode.children[0].alt;
- }
- attachments.push({
- name: attachmentName,
- url: attachmentNode.href
- });
- }
- timestamp = parseInt(dateNode.attributes['data-timestamp'].value, 10) / 1000;
- user = {};
- if (userNode.href) {
- linkSplit = userNode.href.split('/');
- user = {
- link: linkSplit[linkSplit.length - 1],
- name: userNode.textContent
- };
- } else {
- user = {
- link: '',
- name: userNode.firstChild.data.replace('\n\t', '')
- };
- }
- return {
- id: id,
- message: message,
- attachments: attachments,
- timestamp: timestamp,
- user: user
- };
- });
- return postInfo;
- };
-
- findUserLinks = function() {
- return Array.prototype.map.call(document.querySelectorAll('div.container.members a.user-link'), function(e) {
- return e.href;
- });
- };
-
- getUser = function(replaceHtml) {
- var signatureNode, statusNode, user;
- user = {};
- user.name = document.querySelectorAll('span.big_username')[0].textContent;
- signatureNode = document.querySelector('td#center-column > div.content-box:last-child');
- user.signature = '';
- if (signatureNode) {
- user.signature = replaceHtml(signatureNode);
- if (!/Signature\n/.test(user.signature)) {
- user.signature = '';
- }
- user.signature = user.signature.replace('Signature\n', '');
- }
- statusNode = document.querySelectorAll('form.form_user_status div.content-box tr span.personal-text');
- user.status = statusNode.length > 0 ? statusNode[0].textContent : '';
- user.registered = parseInt(document.querySelectorAll('td#center-column > div.content-box abbr.time')[0].attributes['data-timestamp'].value, 10) / 1000;
- return user;
- };
-
- missingArgumentError = function(argument) {
- console.log("missing the " + argument + " argument");
- return casper.exit();
- };
-
- if (casper.cli.options['board-nr']) {
- proboardNr = casper.cli.options['board-nr'];
- } else {
- missingArgumentError('board-nr');
- }
-
- if (casper.cli.options['board-name']) {
- proboardName = casper.cli.options['board-name'];
- } else {
- missingArgumentError('board-name');
- }
-
- if (casper.cli.options['user']) {
- user = casper.cli.options['user'];
- } else {
- missingArgumentError('user');
- }
-
- if (casper.cli.options['password']) {
- password = casper.cli.options['password'];
- } else {
- missingArgumentError('password');
- }
-
- proboardUrl = "http://" + proboardName + ".proboards.com/";
-
- proboardUserUrl = "" + proboardUrl + "members";
-
- casper.userAgent('Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:30.0) Gecko/20100101 Firefox/30.0');
-
- casper.start(proboardUrl, function() {});
-
- casper.thenOpen('https://login.proboards.com/forum_submit/login', {
- method: 'post',
- data: {
- forum: proboardNr,
- email: user,
- password: password,
- "continue": 'Continue'
- }
- }, function() {});
-
- readBoard = function(board) {
- return casper.thenOpen(board.link, function() {
- board.boards = this.evaluate(findBoards);
- this.each(board.boards, function(casper, subboard) {
- return readBoard(subboard);
- });
- return this.thenOpen(board.link, function() {
- var boardPages;
- this.echo("getting threads for board '" + board.title + "'...");
- board.threads = [];
- boardPages = this.evaluate(findPages);
- this.each(boardPages, function(casper, boardPage) {
- return this.thenOpen(boardPage, function() {
- return board.threads = board.threads.concat(this.evaluate(findThreads));
- });
- });
- return this.then(function() {
- this.then(function() {
- return board.threads = board.threads[0];
- });
- return this.each(board.threads, function(casper, thread) {
- thread.posts = [];
- return this.thenOpen(thread.link, function() {
- var linkParts, pollName, threadPages;
- this.echo("\tgetting posts for thread '" + thread.title + "'...");
- pollName = null;
- if (this.exists('div.poll.show.ui-poll')) {
- console.log('\t\tsaving poll...');
- linkParts = thread.link.split('/');
- pollName = "" + linkParts[linkParts.length - 1] + ".png";
- this.captureSelector("data/images/polls/" + pollName, 'div.poll.show.ui-poll');
- }
- thread.poll = pollName;
- threadPages = this.evaluate(findPages);
- this.each(threadPages, function(casper, threadPage) {
- return this.thenOpen(threadPage, function() {
- var posts;
- posts = this.evaluate(findPosts, replaceHtml);
- this.each(posts, function(casper, post) {
- var attachment, _i, _len, _ref, _results;
- post.message = loadImages(post.message.message);
- utils.dump(post);
- _ref = post.attachments;
- _results = [];
- for (_i = 0, _len = _ref.length; _i < _len; _i++) {
- attachment = _ref[_i];
- casper.download(attachment.url, "data/attachments/" + attachment.name);
- _results.push(attachment.url = "{{baseurl}}/attachments/" + attachment.name);
- }
- return _results;
- });
- utils.dump(posts);
- return thread.posts = thread.posts.concat(posts);
- });
- });
- return this.then(function() {
- if (thread.poll && thread.posts[0]) {
- thread.posts[0].message = "[img]{{baseurl}}/images/polls/" + thread.poll + "[/img]\n\n" + thread.posts[0].message;
- }
- if (thread.poll && !thread.posts[0]) {
- return console.log("how the fuck did you manage that?");
- }
- });
- });
- });
- });
- });
- });
- };
-
- proboard = {};
-
- casper.thenOpen(proboardUrl, function() {
- proboard.boards = this.evaluate(findBoards);
- return readBoard(proboard.boards[0]);
- });
-
- casper.then(function() {
- var json;
- json = JSON.stringify(proboard, null, '\t');
- return fs.write("data/" + proboardName + ".json", json, 'w');
- });
-
- casper.run();
-
-}).call(this);