Skip to content

Instantly share code, notes, and snippets.

@Qofar
Last active December 24, 2015 07:39
Show Gist options
  • Save Qofar/6765648 to your computer and use it in GitHub Desktop.
Save Qofar/6765648 to your computer and use it in GitHub Desktop.
[NicoCache_nl] nicofetchにInoReader、DiggReader、The Old Reader、feedly、Feedeen を追加した
// ==UserScript==
// @name nicofetch
// @namespace http://www.nicovideo.jp/
// @description Add the nicofetch function for some web applications.
// @include http://www.google.tld/reader/*
// @include https://www.google.tld/reader/*
// @include http://www.inoreader.com/*
// @include https://www.inoreader.com/*
// @include http://us.inoreader.com/*
// @include https://us.inoreader.com/*
// @include http://theoldreader.com/*
// @include https://theoldreader.com/*
// @include http://cloud.feedly.com/*
// @include https://cloud.feedly.com/*
// @include http://digg.com/reader*
// @include https://digg.com/reader*
// @include http://feedeen.com/*
// @include https://feedeen.com/*
// @require http://www.nicovideo.jp/local/nlMovieFetcher.js
// ==/UserScript==
(function() {
if (!window.nlMovieFetcher) {
GM_log("nlMovieFetcher not found."); return;
}
window.nlMovieFetcher.prototype.callAPI = function(param, callback) {
GM_xmlhttpRequest({
method: 'GET',
url: "http://www.nicovideo.jp/cache/fetch?"+param,
onload: callback
});
}
const WATCH_URL = "http://www.nicovideo.jp/watch/";
const HOSTNAME = document.location.host;
const PATHNAME = document.location.pathname;
function getVideoId(href) {
if (href.indexOf(WATCH_URL) != 0)
return null;
return href.substring(href.lastIndexOf("/") + 1);
}
function appendFetchLink(target, reftarget, id, frame, anchor) {
var link = document.createElement('A');
link.href = "javascript:void(0)";
link.target = "_self";
// link.textContent = "fetch";
link.addEventListener('click', function() {
var fetcher = new window.nlMovieFetcher(id, link, frame, anchor);
fetcher.fetch();
}, false);
var img = document.createElement('IMG');
img.src = "http://www.nicovideo.jp/favicon.ico";
link.appendChild(img);
var div = document.createElement('DIV');
div.style.fontWeight = 'bold';
div.style.margin = '1px 5px';
div.style.display = 'inline-block';
// div.textContent = "nlMovieFetcher: ";
div.appendChild(link);
if(reftarget===null) target.appendChild(div);
else target.insertBefore(div, reftarget);
}
var AppFunctions = [
function() { // Google Reader
if (HOSTNAME.indexOf("www.google.") != 0) return;
if (PATHNAME.indexOf("/reader/") != 0) return;
document.body.addEventListener('DOMNodeInserted', function(e) {
var element = e.target;
if (!element.className || element.className.indexOf("entry") != 0)
return;
var anchor = element.getElementsByClassName("entry-title-link")[0];
if (!anchor) return;
var id = getVideoId(anchor.href);
if (!id) return;
var frame = (element.className.indexOf("entry-container") != -1) ?
element : element.getElementsByClassName("entry-container")[0];
appendFetchLink(anchor.parentNode.parentNode, null, id, frame, anchor);
}, false);
},
function() { // InoReader
if (HOSTNAME.indexOf("inoreader.com") == -1) return;
document.body.addEventListener('DOMNodeInserted', function(e) {
var element = e.target;
if (!element.className || element.className.indexOf("article") != 0)
return;
var anchor = element.getElementsByClassName("article_title_link")[0];
if (!anchor) return;
var id = getVideoId(anchor.href);
if (!id) return;
var frame = element.parentNode;
var target = frame;
var reftarget = frame.getElementsByClassName("article_footer")[0];
appendFetchLink(target, reftarget, id, frame, anchor);
}, false);
},
function() { // DiggReader
if (HOSTNAME.indexOf("digg.com") != 0) return;
if (PATHNAME.indexOf("/reader") != 0) return;
document.body.addEventListener('DOMNodeInserted', function(e) {
var element = e.target;
if (element.className &&
(element.className.indexOf("story-detail-view") != 0 || element.className.indexOf(" expanded") != 0)) {
var head = element.getElementsByClassName("story-title")[0];
var anchor = head.getElementsByTagName("A")[0];
if (!anchor) return;
var id = getVideoId(anchor.href);
if (!id) return;
var frame = element.getElementsByClassName("story-detail-content")[0];
var target = frame;
appendFetchLink(target, null, id, frame, anchor);
}
}, false);
},
function() { // The Old Reader
if (HOSTNAME.indexOf("theoldreader.com") != 0) return;
document.body.addEventListener('DOMNodeInserted', function(e) {
var element = e.target;
if (!element.className || element.className.indexOf("slide") != 0)
return;
var posts = element.getElementsByClassName("post");
for (var i = 0, length = posts.length; i < length; i++) {
var anchor = posts[i].getElementsByTagName("h3")[0].firstElementChild;
if (!anchor) continue;
var id = getVideoId(anchor.href);
if (!id) continue;
var reftarget = posts[i].getElementsByClassName("btns")[0];
var frame = reftarget.parentNode
var target = frame;
appendFetchLink(target, reftarget, id, frame, anchor);
}
}, false);
},
function() { // feedly
if (HOSTNAME.indexOf("cloud.feedly.com") != 0) return;
document.body.addEventListener('DOMNodeInserted', function(e) {
var element = e.target;
if (element.tagName === "TABLE" ||
typeof element.className !== "undefined" && (
element.className.indexOf("u5Entry") > -1 ||
element.className.indexOf("u4Entry") > -1 ||
element.className.indexOf("u100Frame") > -1 )) {
var anchor = element.getElementsByClassName("title")[0];
if (!anchor) return;
var id = getVideoId(anchor.href);
// id = id.replace(/\?utm_source=feedly/, '');
if (!id) return;
var frame = element;
var target = element;
if (!target) return;
appendFetchLink(target, null, id, frame, anchor);
}
}, false);
},
function() { // Feedeen
if (HOSTNAME.indexOf("feedeen.com") != 0) return;
document.body.addEventListener('DOMNodeInserted', function(e) {
var element = e.target;
if (!element.className || element.className.indexOf("fd_item") === -1)
return;
var anchor = element.getElementsByClassName("B-Ab-Uc")[0].firstElementChild;
if (!anchor) return;
var id = getVideoId(anchor.href);
if (!id) return;
var frame = element.getElementsByClassName("B-Ab-O")[0];
var target = element.getElementsByClassName("B-Ab-ab")[0];
appendFetchLink(target, null, id, frame, anchor);
}, false);
},
function(){} // End of AppFunctions
];
for (i in AppFunctions) AppFunctions[i]();
})();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment