// ==UserScript== // @name rw_medialink // @namespace http://reader.softama.com/ // @include http://reader.softama.com/ // @version 0.21 // ==/UserScript== (function(){ var win = (typeof unsafeWindow != "undefined")? unsafeWindow: window; var re_media = [ /^https?:\/\/[^?#]*\.(?:jpg|jpeg|mp3|m4a|flv|mp4|m4v|3gp|mpg|mpeg|avi|wmv|mov)$/i, /^http:\/\/(?:[^\/]*\byoutube\.com\/(?:watch\?v=|\?v=|v\/)[\w-]+|www\.nicovideo\.jp\/watch\/[sn]m\d+|www\.dailymotion\.com\/(?:[^?#">]+\/)?(?:video|swf)\/[\w-]+|video\.google\.com\/(?:videoplay\?doc[iI]d=|googleplayer\.swf\?doc[iI]d=)[\w-]+|www\.metacafe\.com\/(?:watch\/[\w-]+\/[\w-]*\/|fplayer\/[\w-]+\/[\w-]*\.swf)|www\.veoh\.com\/.*?(?:\/watch\/|#watch%3D|permalinkId=)\w+)/ ]; if (win.RW_rule) { win.addEventListener("load", function() { win.RW_rule.addUserScript({ name: "RSS記事からメディアを抽出", scope: "rss,osr_yahoo,osr_gblog", handler: rewrite }); }, false); } const RWCMNT = ""; function rewrite(draw) { if (draw.item.body && draw.item.body.indexOf(RWCMNT) != -1) return; $add(draw.elem, "A", { text:"メディア抽出", className:"btn", href:"javascript:void(0)", style:{marginLeft:"0.5em"} }).addEventListener("click", $bind(null, openMediaLink, { itemID: draw.item.itemID, itemLink: draw.item.link }), false); } function openMediaLink(itemInfo) { $msg("RSS記事にアクセスしています..."); GM_xmlhttpRequest({ method: "GET", url: itemInfo.itemLink, onload: function(result) { $msg(null); setItemData(result, itemInfo); }, onerror: function() { $msg(null); alert("RSS記事の読み込みに失敗しました。"); } }); } function setItemData(result, itemInfo) { var item = win.RW_rule.getItemData(itemInfo.itemID); if (!item) return; var links = getMediaLinks(result.responseText); if (links.length) { links = links.map(function(link){ if (link.charAt(0) != "<") { link = /\.(?:jpg|jpeg)$/.test(link)? '': ''+link+''; } return link; }); win.RW_rule.setItemData(itemInfo.itemID, { link: result.finalUrl || itemInfo.itemLink, body: item.body+"