Skip to content

Instantly share code, notes, and snippets.

@totoraj930
Last active April 8, 2017 06:41
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save totoraj930/980f452d3b93d7dfb0e30b662d839272 to your computer and use it in GitHub Desktop.
Save totoraj930/980f452d3b93d7dfb0e30b662d839272 to your computer and use it in GitHub Desktop.
ニコ動の広告主をリストアップするブックマークレット

NicoAd.js

http://www.nicovideo.jp/watch/sm30944626 ←の動画の二番煎じです・・・。 ブックマークレットでもできそうだったのでつくりました。

使い方

  1. bookmarklet.jsを全てコピーしてブックマークに追加します
  2. 動画再生ページ(sm9など)でブックマークレットを実行します
  3. 画面が切り替わり広告主のリストが表示されます
  4. 設定などをしてコピペしてください

ライセンス

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]);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment