http://www.nicovideo.jp/watch/sm30944626 ←の動画の二番煎じです・・・。 ブックマークレットでもできそうだったのでつくりました。
- bookmarklet.jsを全てコピーしてブックマークに追加します
- 動画再生ページ(sm9など)でブックマークレットを実行します
- 画面が切り替わり広告主のリストが表示されます
- 設定などをしてコピペしてください
MITライセンスです。
http://www.nicovideo.jp/watch/sm30944626 ←の動画の二番煎じです・・・。 ブックマークレットでもできそうだったのでつくりました。
MITライセンスです。
javascript:var TJNAD=function(){var a=this;this.api="http://api.uad.nicovideo.jp/UadsCampaignService/getAdHistoryJsonp?vid=$VID&offset=$OFFSET&limit=$LIMIT&callback=$CALLBACK",this.vid="sm9",this.adLen=0,this.adList=[],this.callback=function(){},this.get=function(a,b,c,d){var e=this.api.replace("$VID",a).replace("$OFFSET",b).replace("$LIMIT",c).replace("$CALLBACK",d);console.log(e);var f=document.createElement("script");f.src=e,document.body.appendChild(f)},this.loop=function(b){if(200!=b.meta.status)return void a.error(b.meta.message);var c=b.data;if(c.length<1)return void console.log("広告なし");0===c[0].index&&(a.adLen=c[0].no,a.adList=new Array(a.adLen));for(var d=0;d<c.length;d++)a.adList[c[d].index]=c[d];var e=c.slice(-1)[0];a.adLen-e.index-1<=0?a.end():a.get(a.vid,e.index+1,100,"tjnad.loop")},this.start=function(a,b){this.vid=a,this.callback=b,this.get(this.vid,0,100,"tjnad.loop")},this.error=function(a){alert(a)},this.end=function(){this.callback(this.adList)}},tjnad=new TJNAD,tjnad2={html:'<div><label for="mode">重複設定:</label><select name="mode" id="mode"><option value="1">加工なし</option><option value="2">重複する名前を削除</option><option value="3">重複する名前を並べる</option><option value="4">重複する名前をまとめる(x[数字])</option></select><label for="sort">逆順:</label><input type="checkbox" id="sort"></div><div><label for="suffix">敬称:</label><input type="text" id="suffix"><button id="ref">設定を反映する</button></div><textarea name="result" id="result" cols="30" rows="30">取得中・・・</textarea>',start:function(a){document.body.innerHTML=tjnad2.html,tjnad2.$.mode=document.getElementById("mode"),tjnad2.$.sort=document.getElementById("sort"),tjnad2.$.suffix=document.getElementById("suffix"),tjnad2.$.result=document.getElementById("result"),tjnad2.$.ref=document.getElementById("ref"),tjnad2.$.ref.addEventListener("click",tjnad2.update),tjnad.start(a,tjnad2.init)},$:{},init:function(a){tjnad2.list=a,tjnad2.$.result.value=tjnad2.gl(1)},update:function(){tjnad2.$.result.value=tjnad2.gl(tjnad2.$.mode.value)},gl:function(a){var b=[],c=tjnad2.list,d=c.length,e=tjnad2.$.suffix.value;if(1==a)for(var f=0;f<d;f++)b.push(c[f].name+e);else if(2==a)for(var f=0;f<d;f++){var g=c[f].name;b.indexOf(g)<0&&b.push(g+e)}else if(3==a)for(var f=0;f<d;f++){var g=c[f].name,h=b.indexOf(g);h>=0?b.splice(h+1,0,g+e):b.push(g+e)}else if(4==a){for(var i=new Array(d),f=0;f<d;f++)i[f]=c[f].name;for(;;){if(i.length<=0)break;var j=i.filter(function(a){return a===i[0]}).length;b.push(i[0]+e+(j>1?" x"+j:"")),i=i.filter(function(a){return a!==i[0]})}}return tjnad2.$.sort.checked&&b.reverse(),b.join("\n")},list:[]};tjnad2.start(document.location.href.match(/sm[0-9]+/)[0]); |
var TJNAD = function () { | |
var that = this; | |
this.api = "http://api.uad.nicovideo.jp/UadsCampaignService/getAdHistoryJsonp?vid=$VID&offset=$OFFSET&limit=$LIMIT&callback=$CALLBACK"; | |
this.vid = "sm9"; | |
this.adLen = 0; | |
this.adList = []; | |
this.callback = function () {}; | |
this.get = function (vid, offset, limit, callback) { | |
var url = this.api | |
.replace("$VID", vid) | |
.replace("$OFFSET", offset) | |
.replace("$LIMIT", limit) | |
.replace("$CALLBACK", callback); | |
console.log(url); | |
var script = document.createElement("script"); | |
script.src = url; | |
document.body.appendChild(script); | |
}; | |
this.loop = function (res) { | |
if (res.meta.status != 200) { | |
that.error(res.meta.message); | |
return; | |
} | |
var data = res.data; | |
if (data.length < 1) { | |
console.log("広告なし"); | |
return; | |
} | |
if (data[0].index === 0) { | |
that.adLen = data[0].no; | |
that.adList = new Array(that.adLen); | |
} | |
for (var i=0; i < data.length; i++) { | |
that.adList[data[i].index] = data[i]; | |
} | |
var last = data.slice(-1)[0]; | |
if (that.adLen - last.index - 1 <= 0) { | |
that.end(); | |
} else { | |
that.get(that.vid, last.index+1, 100, "tjnad.loop"); | |
} | |
}; | |
this.start = function (vid, callback) { | |
this.vid = vid; | |
this.callback = callback; | |
this.get(this.vid, 0, 100, "tjnad.loop"); | |
}; | |
this.error = function (msg) { | |
alert(msg); | |
}; | |
this.end = function () { | |
this.callback(this.adList); | |
}; | |
}; | |
var tjnad = new TJNAD(); | |
var tjnad2 = { | |
html: '<div><label for="mode">重複設定:</label><select name="mode" id="mode"><option value="1">加工なし</option><option value="2">重複する名前を削除</option><option value="3">重複する名前を並べる</option><option value="4">重複する名前をまとめる(x[数字])</option></select><label for="sort">逆順:</label><input type="checkbox" id="sort"></div><div><label for="suffix">敬称:</label><input type="text" id="suffix"><button id="ref">設定を反映する</button></div><textarea name="result" id="result" cols="30" rows="30">取得中・・・</textarea>', | |
start: function (vid) { | |
document.body.innerHTML = tjnad2.html; | |
tjnad2.$.mode = document.getElementById("mode"); | |
tjnad2.$.sort = document.getElementById("sort"); | |
tjnad2.$.suffix = document.getElementById("suffix"); | |
tjnad2.$.result = document.getElementById("result"); | |
tjnad2.$.ref = document.getElementById("ref"); | |
tjnad2.$.ref.addEventListener("click", tjnad2.update); | |
tjnad.start(vid, tjnad2.init); | |
}, | |
$: {}, | |
init: function (list) { | |
tjnad2.list = list; | |
tjnad2.$.result.value = tjnad2.gl(1); | |
}, | |
update: function () { | |
tjnad2.$.result.value = tjnad2.gl(tjnad2.$.mode.value); | |
}, | |
gl: function (mode) { | |
var result = [], | |
list = tjnad2.list, | |
len = list.length, | |
suffix = tjnad2.$.suffix.value; | |
if (mode == 1) { | |
for (var i=0; i < len; i++) { | |
result.push(list[i].name+suffix); | |
} | |
} | |
else if (mode == 2) { | |
for (var i=0; i < len; i++) { | |
var name = list[i].name; | |
if (result.indexOf(name) < 0) { | |
result.push(name+suffix); | |
} | |
} | |
} | |
else if (mode == 3) { | |
for (var i=0; i < len; i++) { | |
var name = list[i].name, | |
index = result.indexOf(name); | |
if (index >= 0) { | |
result.splice(index+1, 0, name+suffix); | |
} else { | |
result.push(name+suffix); | |
} | |
} | |
} | |
else if (mode == 4) { | |
var list2 = new Array(len); | |
for (var i=0; i < len; i++) { | |
list2[i] = list[i].name; | |
} | |
while (true) { | |
if (list2.length <= 0) break; | |
var count = list2.filter(function(v){return v===list2[0]}).length; | |
result.push( | |
list2[0]+suffix+ | |
(count>1 ? " x"+count : "") | |
); | |
list2 = list2.filter(function(v){return v!==list2[0]}); | |
} | |
} | |
if (tjnad2.$.sort.checked) { | |
result.reverse(); | |
} | |
return result.join("\n"); | |
}, | |
list: [] | |
}; | |
tjnad2.start(document.location.href.match(/sm[0-9]+/)[0]); |