Skip to content

Instantly share code, notes, and snippets.

@nobodyplace
Created May 2, 2012 03:16
Show Gist options
  • Save nobodyplace/2573333 to your computer and use it in GitHub Desktop.
Save nobodyplace/2573333 to your computer and use it in GitHub Desktop.
ニコニコ動画のブログ貼り付け用コードを動画画面に表示するGreasemonkey(Zero対応)
// ==UserScript==
// @name Nico Blogparts
// @version 0.2.1
// @namespace https://gist.github.com/2573333
// @description ニコニコ動画のブログ貼り付け用コードを動画画面に表示するGreasemonkey
// @include http://www.nicovideo.jp/watch/*
// @updated 2011/05/02 16:30:00
// ==/UserScript==
// 0.0.1 - 2009/11/01 リリース
// 0.0.2 - 2009/11/08 チャンネル動画のvideoId(ex. http://www.nicovideo.jp/watch/1255083605)に対応
// 0.0.3 - 2010/05/31 videoId取得を変更
// 0.0.4 - 2010/05/31 canonicalを通常の動画URLに置き換えるようにした
// 0.0.5 - 2010/06/02 全角スペースがundefineになる問題を修正
// 0.0.6 - 2010/10/14 動画視聴ページのリニューアルに対応
// 0.0.7 - 2010/10/25 チャンネル動画対応のため動画IDを変更
// 0.0.8 - 2010/11/07 二重表示対策 / 誕生日おめでとう>妹
// 0.0.9 - 2011/10/01 表示位置変更
// 0.1.0 - 2011/10/02 canonical置き換えを削除他
// 0.2.0 - 2012/05/02 Zero対応
// 0.2.1 - 2012/05/02 動画のページ遷移に対応
(function(doc){
'use strict';
var createTag = function(id, title) {
if(!id || !title) return;
//外部プレイヤー
var extPlayer = '<script type="text/javascript" src="http://ext.nicovideo.jp/thumb_watch/'+id+'"></script>' + '<noscript><a href="http://www.nicovideo.jp/watch/'+id+'">'+title+'</a></noscript>';
//動画情報
var movieInfo = '<iframe width="312" height="176" src="http://ext.nicovideo.jp/thumb/'+id+'" scrolling="no" style="border:solid 1px #CCC;" frameborder="0"><a href="http://www.nicovideo.jp/watch/'+id+'">'+title+'</a></iframe>';
//HTMLエスケープ
var htmlEscape = function(str){
var map = {"<":"&lt;", ">":"&gt;", "&":"&amp;", "'":"&#39;", "\"":"&quot;", " ":"&nbsp;", " ":"&#8195;"};
var replaceStr = function(s){ return map[s]; };
return str.replace(/<|>|&|'|"|\s| /g, replaceStr);
}
//表示するテキストを作成
var str =
'<table cellspacing="0">'+
'<tr><th class="font10">外部プレイヤー</th></tr>'+
'<tr><td><form name="form_script"><input type="text" style="width: 250px;" readonly="true" name="script_code" onclick="javascript:document.form_script.script_code.focus(); document.form_script.script_code.select();" value="'+htmlEscape(extPlayer)+'"></form></td></tr>'+
'<tr><th class="font10">動画情報</th></tr>'+
'<tr><td><form name="form_iframe"><input type="text" style="width: 250px;" readonly="true" name="iframe_code" onclick="javascript:document.form_iframe.iframe_code.focus(); document.form_iframe.iframe_code.select();" value="'+htmlEscape(movieInfo)+'"></form></td></tr>'+
'</table>'
;
//表示
var dId = 'blog_parts_area'; //二重表示防止のため
var t = doc.getElementById(dId);
if(t) {
t.innerHTML = str;
} else {
var e = doc.getElementById('playerCommentPanelOuter');
var d = doc.createElement('div');
d.id = dId;
d.style.marginLeft = "7px";
d.style.marginTop = "50px";
d.style.color = "#fff";
d.style.fontSize = "x-small";
d.innerHTML = str;
e.insertBefore(d, e.lastChild);
}
}
//control
//ページ内遷移時は取得するwatchAPIDataContainerに新しい動画データが反映されていないのでタイトルとURLからパーツ作成
var timer = 0;
var h2 = doc.getElementsByTagName('h2')[0];
h2.addEventListener('DOMNodeInserted', function() {
if(timer) return; // timerが初期化されていなければはじく
timer = setTimeout(function() {
if(h2.innerHTML) {
createTag(location.pathname.match(/watch\/(.+)$/)[1], h2.innerHTML);
timer = 0;
return;
}
timer = 0;
}, 30);
}, false);
//初回読み込み時はwatchAPIDataContainerからデータを取得してパーツ作成
var data = JSON.parse(document.querySelector("#watchAPIDataContainer").innerHTML);
createTag(data.videoDetail.id, data.videoDetail.title);
})(document);
// ==UserScript==
// @name Nico Blogparts / Textarea
// @version 0.2.1t
// @namespace https://gist.github.com/2573333
// @description ニコニコ動画のブログ貼り付け用コードを動画画面に表示するGreasemonkey / テキストエリア版
// @include http://www.nicovideo.jp/watch/*
// @updated 2011/05/03 11:24:00
// ==/UserScript==
// 0.0.1 - 2009/11/01 リリース
// 0.0.2 - 2009/11/08 チャンネル動画のvideoId(ex. http://www.nicovideo.jp/watch/1255083605)に対応
// 0.0.3 - 2010/05/31 videoId取得を変更
// 0.0.4 - 2010/05/31 canonicalを通常の動画URLに置き換えるようにした
// 0.0.5 - 2010/06/02 全角スペースがundefineになる問題を修正
// 0.0.6 - 2010/10/14 動画視聴ページのリニューアルに対応
// 0.0.7 - 2010/10/25 チャンネル動画対応のため動画IDを変更
// 0.0.8 - 2010/11/07 二重表示対策 / 誕生日おめでとう>妹
// 0.0.9 - 2011/10/01 表示位置変更
// 0.1.0 - 2011/10/02 canonical置き換えを削除他
// 0.2.0 - 2012/05/02 Zero対応
// 0.2.1 - 2012/05/02 動画のページ遷移に対応
// 0.2.1t - 2012/05/03 「動画情報」をinputからtextareaに変更
(function(doc){
'use strict';
var createTag = function(id, title, author) {
if(!id || !title) return;
//外部プレイヤー
var extPlayer = '<script type="text/javascript" src="http://ext.nicovideo.jp/thumb_watch/'+id+'"></script>' + '<noscript><a href="http://www.nicovideo.jp/watch/'+id+'">'+title+'</a></noscript>';
//動画情報
var movieInfo = '<iframe width="312" height="176" src="http://ext.nicovideo.jp/thumb/'+id+'" scrolling="no" style="border:solid 1px #CCC;" frameborder="0"><a href="http://www.nicovideo.jp/watch/'+id+'">'+title+'</a></iframe>';
//HTMLエスケープ
var htmlEscape = function(str){
var map = {"<":"&lt;", ">":"&gt;", "&":"&amp;", "'":"&#39;", "\"":"&quot;", " ":"&nbsp;", " ":"&#8195;"};
var replaceStr = function(s){ return map[s]; };
return str.replace(/<|>|&|'|"|\s| /g, replaceStr);
}
//表示するテキストを作成
var str =
'<table cellspacing="0">'+
'<tr><th class="font10">外部プレイヤー</th></tr>'+
'<tr><td><form name="form_script"><input type="text" style="width: 250px;" readonly="true" name="script_code" onclick="javascript:document.form_script.script_code.focus(); document.form_script.script_code.select();" value="'+htmlEscape(extPlayer)+'"></form></td></tr>'+
'<tr><th class="font10">動画情報</th></tr>'+
'<tr><td><form name="form_iframe"><textarea style="width: 250px;" readonly="true" name="iframe_code" onclick="javascript:document.form_iframe.iframe_code.focus(); document.form_iframe.iframe_code.select();">'+'***'+htmlEscape(title)+'('+htmlEscape(author)+')'+"\n"+htmlEscape(movieInfo)+'</textarea></form></td></tr>'+
'</table>'
;
//表示
var dId = 'blog_parts_area'; //二重表示防止のため
var t = doc.getElementById(dId);
if(t) {
t.innerHTML = str;
} else {
var e = doc.getElementById('playerCommentPanelOuter');
var d = doc.createElement('div');
d.id = dId;
d.style.marginLeft = "7px";
d.style.marginTop = "50px";
d.style.color = "#fff";
d.style.fontSize = "x-small";
d.innerHTML = str;
e.insertBefore(d, e.lastChild);
}
}
//control
//ページ内遷移時は取得するwatchAPIDataContainerに新しい動画データが反映されていないのでタイトルとURLからパーツ作成
var timer = 0;
var h2 = doc.getElementsByTagName('h2')[0];
h2.addEventListener('DOMNodeInserted', function() {
if(timer) return; // timerが初期化されていなければはじく
timer = setTimeout(function() {
if(h2.innerHTML) {
createTag(location.pathname.match(/watch\/(.+)$/)[1], h2.innerHTML, '');
timer = 0;
return;
}
timer = 0;
}, 30);
}, false);
//初回読み込み時はwatchAPIDataContainerからデータを取得してパーツ作成
var data = JSON.parse(document.querySelector("#watchAPIDataContainer").innerHTML);
createTag(data.videoDetail.id, data.videoDetail.title, data.uploaderInfo.nickname);
})(document);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment