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();
}
})();