// ==UserScript== // @name Tumblr Message Archiver // @namespace https://github.com/chris-pie/tumblr-message-archiver // @version 2.2 // @description Archives the messages // @author Chris Pie // @match https://www.tumblr.com/message_archiver // @grant GM_xmlhttpRequest // @grant GM_log // @require https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js // @downloadURL https://update.greasyfork.icu/scripts/33024/Tumblr%20Message%20Archiver.user.js // @updateURL https://update.greasyfork.icu/scripts/33024/Tumblr%20Message%20Archiver.meta.js // ==/UserScript== (function() { 'use strict'; function timeConverter(UNIX_timestamp){ var a = new Date(UNIX_timestamp * 1000); var months = ['Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec']; var year = a.getFullYear(); var month = months[a.getMonth()]; var date = a.getDate(); var hour = a.getHours() < 10 ? '0' + a.getHours() : a.getHours(); var min = a.getMinutes() < 10 ? '0' + a.getMinutes() : a.getMinutes(); var sec = a.getSeconds() < 10 ? '0' + a.getSeconds() : a.getSeconds(); var time = date + ' ' + month + ' ' + year + ' ' + hour + ':' + min + ':' + sec ; return time; } $("head").text(""); $("body").text("").append('
').append(''); var tumblog_mine = prompt("Enter YOUR blog name (without .tumblr.com)"); var tumblog_other = prompt("Enter THE OTHER BLOG'S name (without .tumblr.com)"); var convo_id =""; var messages_list = []; var done_gathering_messages = false; function get_messages(convo_id) { var waiting = false; var url = "/svc/conversations/messages?conversation_id="+convo_id; var repeater; var repeat_counter = 0; var message_counter = 0; function get_messages_http() { if(waiting && repeat_counter < 300) { if(repeat_counter == 150) $("#error").text("Tumblr seems to not be responding. Retrying in few seconds. (onrepeat)"); repeat_counter++; return; } waiting = true; repeat_counter = 0; GM_xmlhttpRequest({ method: "GET", url: "https://www.tumblr.com"+url, headers: { "Connection": "keep-alive", "Accept": "application/json, text/javascript, */*; q=0.01", "X-Requested-With": "XMLHttpRequest", "Referer": "https://www.tumblr.com/dashboard", "Accept-Encoding": "gzip, deflate, br", }, onerror: function() { $("#error").text("Tumblr seems to not be responding. Retrying in few seconds. (onerror)"); waiting = false; return; }, timeout: 5000, ontimeout: function() { $("#error").text("Tumblr seems to not be responding. Retrying in few seconds. (ontimeout)"); waiting = false; return; }, onload: function(response) { $("#error").text(""); try { if (response.status !== 200) { waiting = false; return; } var parsed_response = JSON.parse(response.responseText); var messages = parsed_response.response.messages; for (var i = messages.data.length - 1; i>=0;i--) { var currmessage; if(messages.data[i].type === "TEXT") { currmessage = timeConverter(messages.data[i].ts.substr(0,10)) + ' ' + messages.data[i].participant + ': ' + messages.data[i].message; } else if (messages.data[i].type === "POSTREF") { currmessage = timeConverter(messages.data[i].ts.substr(0,10)) + ' ' + messages.data[i].participant + ': ' + messages.data[i].post.post_url; } else if (messages.data[i].type === "IMAGE") { var image_links = ""; for (var j = 0; j < messages.data[i].images.length; j++) { image_links = image_links + ' ' + messages.data[i].images[j].original_size.url; } currmessage = timeConverter(messages.data[i].ts.substr(0,10)) + ' ' + messages.data[i].participant + ': ' + image_links; } message_counter++; $("#counter").text("Gathered " + message_counter + " messages."); $("#counter").after(currmessage + "