投稿動画から作者のMyvideoを探す
// ==UserScript==
// @name niconico myvideo search
// @namespace http://web.zgo.jp/
// @description 投稿動画から作者のMyvideoを探す
// @include http://www.nicovideo.jp/watch/*
// @version 0.0.1.20140518104259
// ==/UserScript==
(function() {
var videoTitle = document.getElementsByClassName('video_title')[0];
if (!videoTitle) return;
var videoUserId = unsafeWindow.so.variables.videoUserId;// 投稿者のID
var userVideoURL = "http://www.nicovideo.jp/user/" + videoUserId + "/video";
window.gm_nicoUserId = videoUserId;
// get→inssert
getUserVideo(userVideoURL, insertLink);
// ユーザー投稿動画一覧が公開されているか
// 公開されているならcallbackを実行
function getUserVideo(userVideoURL, callback) {
GM_xmlhttpRequest({
method: 'GET',
url: userVideoURL,
headers: {
'User-agent': 'Mozilla/4.0 (compatible) Greasemonkey'
},
onload: function(responseDetails) {
var DOMHTML = createDocumentFromString(responseDetails.responseText);
if (isOpendVideo(DOMHTML)) {
callback();
return true;
} else {
return false;
}
},
onerror :function() {
GM_log("通信エラー myvideo")
}
});
}
// class="noList" をみて公開か判定
// 公開ならtrue,非公開ならfalse
function isOpendVideo(doc) {
var cntBody = doc.getElementById("myContBody");
return !cntBody.classList.contains("noList");
}
// タイトルの横へ挿入
function insertLink() {
var span = document.createElement('span');
span.style.cssText = 'font-size:small; margin-top:4px; line-height:1.25;';
span.innerHTML = ' <a href="http://www.nicovideo.jp/user/' + videoUserId + '/video">公開投稿動画</a>';
videoTitle.appendChild(span); // insert position
}
function createDocumentFromString(source) {
var doc;
try {
doc = document.cloneNode(false);
doc.appendChild(doc.importNode(document.documentElement, false));
} catch(e) {
doc = document.implementation.createHTMLDocument ?
document.implementation.createHTMLDocument('hogehoge') :
document.implementation.createDocument(null, 'html', null);
}
var range = document.createRange();
range.selectNodeContents(document.documentElement);
var fragment = range.createContextualFragment(source);
var headChildNames = {title: true, meta: true, link: true, script: true, style: true, /*object: true,*/ base: true/*, isindex: true,*/};
var child, head = doc.getElementsByTagName('head')[0] || doc.createElement('head'),
body = doc.getElementsByTagName('body')[0] || doc.createElement('body');
while ((child = fragment.firstChild)) {
if (
(child.nodeType === doc.ELEMENT_NODE && !(child.nodeName.toLowerCase() in headChildNames)) ||
(child.nodeType === doc.TEXT_NODE && /\S/.test(child.nodeValue))
)
break;
head.appendChild(child);
}
body.appendChild(fragment);
doc.documentElement.appendChild(head);
doc.documentElement.appendChild(body);
return doc;
}
})();