NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Quora Answer Export // @namespace http://tampermonkey.net/ // @version 0.1.01 // @description Export Answers from your Quora Account // @author Simon Gardner // @license MIT // @copyright Simon Gardner (http://holisticsystems.co.uk/) // @match https://www.quora.com/content?content_types=answers* // @match https://quora.com/content?content_types=answers* // @run-at document-end // @grant none // @require http://code.jquery.com/jquery-latest.js // ==/UserScript== (function() { 'use strict'; //add export answers option to Quora menu $(".UserContentFilterContentType ul").append('<li class="filter_option" style="position:relative"><a id="exportAnswersLink" class="filter_option_link" href="#">Export Answers</a></li>'); $("#exportAnswersLink").click(exportAnswers); console.log("script active"); function exportAnswers() { showDialog(); var ary = []; //extract a list of questions / hrefs from the content list page $(".UserContentMain .UserContentListItem A.question_link").each( function(i,ele){ ary.push({ question:$(ele).text(), href:$(ele).attr("href"), meta:$(ele).parent().parent().parent().find(".metadata").text() }); }); //console.log(ary.length + " answers found"); $("#exportAnswersDialogAnswers").append("<p>exporting answer <span id=\"exportsAnswersProcessingCounter\">0</span> of "+ary.length+"</p>"); //recurse the list of questions retrieving the answers //could have used async.js to do this more nicely but didn't for reasons ... function asyncRecurse (idx) { if (idx < ary.length) { var a = ary[idx]; $.get(a.href, function(data){ $("#exportsAnswersProcessingCounter").html((idx+1)); a.answer = $(data).find(".AnswerBase .inline_editor_value .ui_qtext_rendered_qtext").html(); if ($("#exportAnswersDialog").length) { //only contine processing if the exportAnswersDialog is present setTimeout(function() { asyncRecurse(++idx); }, 1000); //pause for a while to be nice to Quora before fetching the next answer } }); } else { console.log("ary", ary); outputAnswers(ary); } } asyncRecurse(0); return false; } function outputAnswers(ary) { $("#exportAnswersDialogAnswers").append("<p>Your content has been exported below as raw Html. Use Cut/Paste to extract.</p><textarea cols='80' rows='6'>"+htmlTemplate(ary.map(formatAnswer).join(""))+"</textArea>"); } function formatAnswer(answer) { return "<section><h2 class=\"question_text\"><a href=\"https://www.quora.com/"+answer.href+"\">"+answer.question+"</a></h2>\r\n<div class=\"meta\">"+answer.meta+"</div>\r\n<div class=\"answer\">"+answer.answer+"</div>\r\n</section>\r\n"; } function htmlTemplate(content) { return "<!DOCTYPE html><html lang=\"en\"><head><meta http-equiv=\"Content-type\" content=\"text/html;charset=UTF-8\" /></head><body>"+content+"</body></html>"; } function showDialog() { $("#exportAnswersLink").parent().append("<div id=\"exportAnswersDialog\" style=\"position:absolute; right:50px;\"><div class=\"hover_menu white_bg show_nub\" style=\"width:500px;\"><div class=\"hover_menu_contents\" style=\"padding:1em;\"><h2>Exporting Answers ...</h2><div id=\"exportAnswersDialogAnswers\"></div><div style=\"text-align:right\"><a href=\"javascript:$('#exportAnswersDialog').remove();\" class=\"Button\">Done</a></div></div></div></div></div>"); } function closeDialog() { //not currently used - this code directly embeded into html. //TODO: find a way to do this better $("#exportAnswersDialog").remove(); } })();