您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Reblog posts from any archive.
// ==UserScript== // @name Tumblr - Archive Reblog // @namespace http://script.b9mx.com/tumblr-archive-reblog.user.js // @description Reblog posts from any archive. // @include http*://*/archive // @include https://www.tumblr.com/dashboard?blogme* // @version 2 // @grant none // ==/UserScript== window.setTumblelogs = function(html){ // setTumblelogs - v2 - for trickier blog objects var tumblelogs = false; var spare = []; if(typeof html !== "undefined"){ var div = jQuery("<div></div>").html(html); try{ tumblelogs = JSON.parse( jQuery("<div></div>").html( div.find("noscript#bootloader").attr("data-bootstrap") ).text() )["Components"]["AbuseForm"]["tumblelogs"]; }catch(e){ return spare; } return tumblelogs; } }; var dlh = document.location.href; var deh = document.documentElement.innerHTML; window.reblog_key_fetch_queue = []; window.reblog_key_fetch_queue_id = []; window.after_work = false; window.fetch_reblog_key = function(id){ jQuery("#arc_reblog_"+id).html('<img src="https://31.media.tumblr.com/2706639e7c88a85aaca555acb3fd8c57/tumblr_inline_n7vxmyg06N1rcl671.gif">'); var api = 'fuiKNFp9vQFvjLNvx4sUwti4Yb5yGutBN4Xh10LXZhhRKjWlV4'; var url = '//api.tumblr.com/v2/blog/' + window.tumblog + '.tumblr.com/posts?api_key=' + api + '&id=' + id + "&reblog_info=true"; jQuery.ajax({ url:url, dataType:'jsonp', success:function(re){ if(typeof re !== "undefined" && re.hasOwnProperty("response") && re["response"].hasOwnProperty("posts") && jQuery.type(re["response"]["posts"][0]) === "object" && re["response"]["posts"][0].hasOwnProperty("reblog_key")){ var reblog_key = re["response"]["posts"][0]["reblog_key"]; jQuery("#arc_reblog_" + id).attr("onclick", "window.open('https://www.tumblr.com/dashboard?blogme=" + window.tumblog + "&id=" + id + "&key=" + reblog_key + "'" + ",'win2'," + "'width=200,height=90," + "location=0,menubar=0,scrollbars=1,status=0,toolbar=0,resizable=1');"+ "return false;" ).val("Reblog").css("color","#000"); }else{ jQuery("#arc_reblog_"+id).text("API error").attr("title","Click to try again.").css("color","#f00"); } }, error: function(e){ jQuery("#arc_reblog_"+id).text("API error").attr("title","Click to try again.").css("color","#f00") } }); } window.reblog_win2 = function(id){ return jQuery('<input>').val("Load Key").attr({ "type":"button", "id":"arc_reblog_"+id, "onClick": "window.fetch_reblog_key('"+id+"');return false;" }); } if(dlh.match("www.tumblr.com/dashboard\\?blogme")!==null){ // run this as the blog list window if(dlh.match(/\?blogme=[^&]+&/) === null && dlh.match(/&id=[^&]+&/) === null && dlh.match(/&key=[^$]+$/) === null){ var css = jQuery('<style type="text/css">').append( '*{margin:0;padding:0;}' + 'body{' + 'font-family:arial,sans-serif;' + 'font-size:16px;' + 'color:#000;' + 'background-color:#fff;' + '}' + 'label{margin:5px 0}' + 'input[type=radio]:checked,' + 'input[type=radio]:checked + label{' + 'background-color:#afcfdf;' + '}' ); var title = jQuery("<title>").text("Archive Reblog Options"); jQuery("head").html(""); jQuery("body").html("loading..."); jQuery.ajax({ url:"https://www.tumblr.com/dashboard", type:'get', beforeSend: function(xhr) { xhr.setRequestHeader('X-Requested-With',{toString:function(){return '';}}); }, success: function(x){ var tumblogs = window.setTumblelogs(x); jQuery("head").append(css,title); var form = jQuery('<div/>').append( jQuery('<label for="as_draft">').append( jQuery('<input id="as_draft" type="checkbox">').change(function(){ if(jQuery(this).prop("checked")){ set_cookie("gm_ar_draft", "yes", 999); }else{ unset_cookie("gm_ar_draft"); } }).prop("checked", function(){ return get_cookie("gm_ar_draft") !== false && get_cookie("gm_ar_draft").value === "yes"; }), "Reblog posts as draft" ), "<br><br>Select a blog to reblog to." ); var first = ""; jQuery.each(tumblogs, function(i, bl){ var name = bl.name; if(first.length === 0) first = name; form.append( jQuery("<div>").append( jQuery('<input>').attr({ "type": "radio", "name": "gm_ar_poster", "id": name }).prop("checked", function(){ return get_cookie("gm_ar_poster") !== false && get_cookie("gm_ar_poster").value === name; }).change(function(){ if(jQuery(this).prop("checked")){ set_cookie( "gm_ar_poster", jQuery(this).attr("id"), 999 ); } }), jQuery('<label>').attr({ "for":name }).append(name) ) ) }); if(form.find("input:checked").length === 0){ form.find("#" + first).prop("checked", true); set_cookie("gm_ar_poster", first, 999); } form.append( jQuery('<input>').val("Close Window").attr({ "type":"button", "onClick":"window.close();" }),"<br><br>" ); jQuery("body").html(form); } }); }else{ // reblogging window var name = dlh.match(/\?blogme=([^&]+)&/)[1]; var id = dlh.match(/&id=([^&]+)&/)[1]; var reblog_key = dlh.match(/&key=([^$]+$)/)[1]; var form_key = jQuery("#tumblr_form_key").attr("content"); var css = jQuery('<style type="text/css">').append( '*{margin:0;padding:0;}' + 'body{' + 'font-family:arial,sans-serif;' + 'font-size:16px;' + 'color:#000;' + 'background-color:#fff;' + '}' ); var title = jQuery("<title>").text("Archive Reblog " + id); jQuery("head").html(""); jQuery("head").append(css,title); jQuery("body").html(""); if(get_cookie("gm_ar_poster") === false){ jQuery("body").html("Error: Must set blog options first."); }else{ jQuery("body").css("color","").html( '<img src="https://31.media.tumblr.com/2706639e7c88a85aaca555acb3fd8c57/tumblr_inline_n7vxmyg06N1rcl671.gif"> Reblogging '+id ); window.tag_fetch_not_running = true; jQuery.ajax({ url: 'https://www.tumblr.com/svc/post/fetch', type: 'post', data:'{"reblog_id":"' + id + '",' + '"reblog_key": "' + reblog_key + '",'+ '"channel_id":"' + name + '",' + '"post_type":false,' + '"form_key":"'+ form_key +'"}', success: function(x){ var post_object = x; var reblog_name = ((post_object["post"]["reblog_name"] !== null)? post_object["post"]["reblog_name"] : blog_name) var reblog_post_id = ((post_object["post"]["root_id"] !== null)? post_object["post"]["root_id"] : id); var blog_name = get_cookie("gm_ar_poster").value; var draft = get_cookie("gm_ar_draft") !== false && get_cookie("gm_ar_draft").value === "yes"; jQuery.ajax({ url: 'https://www.tumblr.com/svc/secure_form_key', type: 'post', data: '', headers: { 'X-tumblr-form-key': form_key }, success: function(x2, b, r){ var sform_key = r.getResponseHeader('X-tumblr-secure-form-key'); var isset = function(val, type){ if(jQuery.type(type) === "undefined") type = jQuery.type(val); return jQuery.type(val) !== "undefined" && val !== null && val !== false && jQuery.type(val) === type } var changes_to_post = { "channel_id": blog_name, "detached": true, "reblog": true, "post[date]": "", "reblog_id": id.toString(), "reblog_post_id": id.toString(), "reblog_key": reblog_key, "is_recommended": false, "placement_id": false, "rbpt": "", "post[publish_on]": "", "safe_edit": true, "post_context_page": "dashboard", "created_post": (isset(post_object["created_post"])?post_object["created_post"]:true), "post[tags]":(isset(post_object.post.tags)?post_object.post.tags:null), "form_key": form_key, "errors": false, "context_page": "dashboard", // context page queue/drafts? maybe not needed // "post": post_object.post, // maybe these are vestigial ? ?? // "post_tumblelog", post_object["post_tumblelog"], "silent": true, "context_id": reblog_name, "editor_type": "rich", "is_rich_text[one]": "0", "is_rich_text[two]": "1", "is_rich_text[three]": "1", "post[slug]": "", "post[source_url]": (isset(post_object.post["source_url"])? post_object.post["source_url"] : "http://" ), "post[three]": (isset(post_object.post.three)? post_object.post.three: ""), "post[type]": post_object.post.type, "post[one]": (isset(post_object.post.two)? post_object.post.one: ""), "post[two]": (isset(post_object.post.two)? post_object.post.two: ""), "post[three]": (isset(post_object.post.three)? post_object.post.three: ""), "post[tags]": (isset(post_object.post.tags)? post_object.post.tags: ""), "post[state]": (draft ? "1":"0 3"), }; if(isset(post_object.post.photos,"array")){ var order = ""; var oneone = ""; jQuery.each(post_object.post.photos, function(i,photo){ order += photo.id+","; oneone += "1"; var srt = photo.url; var src = srt.replace(/500\.(\w{3,4}$)/,"1280.$1"); var test_1280 = jQuery("<img>").attr({ "src":src }).bind("error",function(){ src = srt; }).ready(function(){ jQuery(this).remove(); }); changes_to_post["images["+photo.id+"]"] = src; changes_to_post["caption["+photo.id+"]"] = isset(photo.caption)? photo.caption: ""; }); changes_to_post["post[photoset_layout]"] = isset(post_object.post["photoset_layout"]) ? post_object.post["photoset_layout"]: oneone; changes_to_post["post[photoset_order]"] = order.replace(/,$/,''); changes_to_post["MAX_FILE_SIZE"] = "10485760"; } if(isset(post_object.post.type) && post_object.post.type === "audio"){ jQuery.extend(changes_to_post,{ "pre_upload": "", "preuploaded_url": "", "remove_album_art": "", "artwork_pre_upload": "1", "MAX_FILE_SIZE": "10485760", "album_art": isset(post_object.post["audio_artwork"])? post_object.post["audio_artwork"] : "" }); if(isset(post_object.post["id3_tags"],"array")){ jQuery.each(post_object.post["id3_tags"], function(i, id3){ changes_to_post['id3_tags['+i+']'] = id3; }); } } if(isset(post_object.post.type) && post_object.post.type === "video"){ jQuery.extend(changes_to_post,{ "post[one]": post_object["post"]["video"]["embed_code"], "pre_upload": "", "MAX_FILE_SIZE": "10485760", "preuploaded_url": "", "preuploaded_ch": "", "valid_embed_code": "1" }); } jQuery.ajax({ url: 'https://www.tumblr.com/svc/post/update', type: 'post', headers: { 'X-tumblr-form-key': form_key, 'X-tumblr-puppies': sform_key }, data: JSON.stringify(changes_to_post), success: function(){ jQuery("body").css("color","green").html( "Post " + id + " reblogged to " + blog_name + (draft ? " as a draft":"") + "!" ); setTimeout(function(){ window.close(); }, 2500); } }); } }); } }); } } }else if(dlh.match(/\/archive(\/\d{4}\/\d{1,2})?$/)!==null && jQuery("header#nav_archive").length > 0){ // run this on any archive page window.tumblog = deh.match(/&name=([^"]+)"/)[1]; window.append_timer = setInterval(function(){ if(!window.after_work && jQuery('.post_glass').length !== jQuery('.post_glass.with_re').length){ window.after_work = true; jQuery('.post_glass:not(.with_re)').each(function(){ jQuery(this).addClass("with_re"); if(jQuery(this).find('input').length === 0){ var id = jQuery(this).parents('.post_micro').attr("id").substr(11); jQuery(this).prepend(window.reblog_win2(id)); } }); }else{ window.after_work = false; } }, 1000); jQuery("head").append( jQuery('<style type="text/css">').text( '.post_micro input{bottom:2px;cursor:pointer;height:20px;' + 'position:absolute;right:2px;width:90px;z-index:9999;}' ) ); jQuery("#nav_archive").append( jQuery('<input>').val("Open Reblog Options").attr({ "type":"button", "onClick": "window.open('https://www.tumblr.com/dashboard?blogme','win1'," + "'width=300,height=200," + "location=0,menubar=0,scrollbars=1,status=0,toolbar=0,resizable=1')" }) ); }