// ==UserScript==
// @name get douban info at BYRBT moive|北邮人增加豆瓣评分及收藏按钮
// @author Exhen
// @description 在北邮人增加豆瓣评分,看过的显示评分,没看过的增加“看过”“想看”按钮
// @namespace exhen_js
// @include http://bt.byr.cn/torrents.php*
// @include https://bt.byr.cn/torrents.php*
// @include http://bt.byr.cn/details.php*
// @include https://bt.byr.cn/details.php*
// @icon http://bt.byr.cn/favicon.ico
// @connect douban.com
// @grant GM_xmlhttpRequest
// @grant GM_setClipboard
// @grant GM_addStyle
// @grant GM_setValue
// @grant GM_getValue
// @version 20180115.1
// @downloadURL https://update.greasyfork.icu/scripts/36947/get%20douban%20info%20at%20BYRBT%20moive%7C%E5%8C%97%E9%82%AE%E4%BA%BA%E5%A2%9E%E5%8A%A0%E8%B1%86%E7%93%A3%E8%AF%84%E5%88%86%E5%8F%8A%E6%94%B6%E8%97%8F%E6%8C%89%E9%92%AE.user.js
// @updateURL https://update.greasyfork.icu/scripts/36947/get%20douban%20info%20at%20BYRBT%20moive%7C%E5%8C%97%E9%82%AE%E4%BA%BA%E5%A2%9E%E5%8A%A0%E8%B1%86%E7%93%A3%E8%AF%84%E5%88%86%E5%8F%8A%E6%94%B6%E8%97%8F%E6%8C%89%E9%92%AE.meta.js
// ==/UserScript==
var dialog_html = '
';
var myScriptStyle = document.createElement("style");
myScriptStyle.innerHTML = '';
document.getElementsByTagName("head")[0].appendChild(myScriptStyle);
var myScriptFunction = document.createElement('script');
myScriptFunction.innerHTML = 'function setRating(rating) { $("#n_rating").attr("rating", rating); $("#dialog #stars span").slice(0, rating).text("★"); $("#dialog #stars span").slice(0, rating).css("color", "#f9ba23"); $("#dialog #stars span").slice(rating, 5).text("☆"); $("#dialog #stars span").slice(rating, 5).css("color", "grey"); } function checkPrivate(disabled) { $("#share-shuo").attr("disabled", disabled); $(".share-shuo").css("color",disabled?"#ccc":"#666666"); } function close_dialog() { $("#dialog").remove(); } function starFocus(num, stat) { if (stat) { $("#dialog #stars span").slice(0, num).text("★"); $("#dialog #stars span").slice(0, num).css("color", "#f9ba23"); } else { $("#dialog #stars span").slice($("#n_rating").attr("rating"), num).text("☆"); $("#dialog #stars span").slice($("#n_rating").attr("rating"), num).css("color", "grey"); } }';
document.getElementsByTagName("head")[0].appendChild(myScriptFunction);
var getDoc, getJSON, parseURL, postDoc;
getDoc = function (url, meta, callback)
{
GM_xmlhttpRequest({
method: 'GET',
url: url,
headers: {
'User-agent': window.navigator.userAgent,
'Content-type': 'text/html; charset=utf-8'
},
onload: function (responseDetail)
{
var doc;
doc = '';
if (responseDetail.status == 200)
{
doc = (new DOMParser).parseFromString(responseDetail.responseText, 'text/html');
if (doc == undefined)
{
doc = document.implementation.createHTMLDocument('');
doc.querySelector('html').innerHTML = responseText;
}
}
callback(doc, responseDetail, meta);
}
});
};
postDoc = function (url, data, meta, callback)
{
GM_xmlhttpRequest({
anonymous: true,
method: 'POST',
url: url,
headers: {
'User-agent': window.navigator.userAgent,
'Content-type': 'text/html; charset=utf-8'
},
data: data,
onload: function (responseDetail)
{
callback(responseDetail.responseText, responseDetail, meta);
}
});
};
getJSON = function (url, callback)
{
GM_xmlhttpRequest({
method: 'GET',
url: url,
headers: {
'Accept': 'application/json'
},
onload: function (response)
{
if (response.status >= 200 && response.status < 400)
{
callback(JSON.parse(response.responseText), url);
} else
{
// console.log('Error getting ' + url + ': ' + response.statusText);
}
}
});
};
parseURL = function (url)
{
var a;
a = document.createElement('a');
a.href = url;
return {
source: url,
protocol: a.protocol.replace(':', ''),
host: a.hostname,
port: a.port,
query: a.search,
params: (function ()
{
var i, len, ret, s, seg;
ret = {};
seg = a.search.replace(/^\?/, '').split('&');
len = seg.length;
i = 0;
s = void 0;
while (i < len)
{
if (!seg[i])
{
i++;
continue;
}
s = seg[i].split('=');
ret[s[0]] = s[1];
i++;
}
return ret;
})(),
file: (a.pathname.match(/\/([^\/?#]+)$/i) || [, ''])[1],
hash: a.hash.replace('#', ''),
path: a.pathname.replace(/^([^\/])/, '/$1'),
relative: (a.href.match(/tps?:\/\/[^\/]+(.+)/) || [, ''])[1],
segments: a.pathname.replace(/^\//, '').split('/')
};
};
var doubanPlugin = function (imdb)
{
// console.log("i1", imdb);
var douban_icon = $('');
douban_icon.attr('imdb', imdb);
douban_icon.click(function ()
{
// console.log('i2', imdb);
var douban_id;
$('button.douban_icon').filter(function ()
{
// console.log('current checking',imdb);
return $(this).attr('imdb') == imdb;
}).hide();
getJSON('http://api.douban.com/v2/movie/search?q=' + imdb, function (res, url)
{
douban_id = res.subjects[0].id;
var douban_rating = res.subjects[0].rating.average;
// var imdb = url.slice(40);
// console.log('slice got', imdb);
// alert(douban_id);
var douban_url = 'https://movie.douban.com/j/subject/' + douban_id + '/interest';
var douban_rating_icon = $('
/10');
douban_rating_icon.find('a').attr('href', 'https://movie.douban.com/subject/' + douban_id);
// rating_icon.append('my rating');
// rating_icon.append((rating * 2));
// rating_icon.append('/10');
// rating_icon.attr('href', douban_url);
getJSON(douban_url, function (res, url)
{
var douban_html = $(res.html);
var user_stat = res.interest_status;
var user_rating = douban_html.find('#n_rating').attr('value');
var ck = douban_html.find('input[name="ck"]').attr('value');
// console.log("ck=" + ck);
if (user_stat)
{
if (user_rating)
{
// alert('yes');
var rating_icon = $('
/10');
rating_icon.find('a').attr('href', 'https://movie.douban.com/subject/' + douban_id);
// rating_icon.append('my rating');
// rating_icon.append((rating * 2));
// rating_icon.append('/10');
// rating_icon.attr('href', douban_url);
rating_icon.find('#my_rating').text(user_rating * 2);
$('.imdbRatingPlugin').filter(function ()
{
// console.log('current checking',imdb);
return $(this).attr('data-title') == imdb;
}).parent().append(rating_icon);
$('.imdbRatingPlugin').filter(function ()
{
// console.log('current checking',imdb);
return $(this).attr('data-title') == imdb;
}).parent().append(user_stat == 'wish' ? '我想看这部电影' : '我看过这部电影');
}
else
{
collectPlugin(imdb, douban_id, ck);
}
$('button.douban_rating').filter(function ()
{
// console.log('current checking',imdb);
return $(this).attr('imdb') == imdb;
}).hide();
}
else
{
wishPlugin(imdb, douban_id, ck);
collectPlugin(imdb, douban_id, ck);
}
});
douban_rating_icon.find('#my_rating').text(douban_rating);
$('.imdbRatingPlugin').filter(function ()
{
// console.log('current checking',imdb);
return $(this).attr('data-title') == imdb;
}).after(douban_rating_icon);
});
});
// console.log('inPluginThisis', $(this).attr('class'));
return douban_icon;
};
var wishPlugin = function (imdb, douban_id, ck)
{
var douban_wish = $('');
douban_wish.attr('imdb', imdb);
douban_wish.click(function open_dialog()
{
$(this).after(dialog_html);
$('#dialog .interest-form-hd h2').text('添加收藏:我想看这部电影');
$('#dialog .interest-rating').remove();
$("#dialog textarea.comment").keyup(function ()
{
var comment = $(this).attr('value');
var eng = comment.match(/[^\x00-\xff]/gi), engCount = eng ? eng.length : 0, chsCount = comment.length - engCount;
var maxlength = 140 + Math.ceil(chsCount / 2);
$("#dialog textarea.comment").attr("maxlength", maxlength);
$("#dialog span.num").text(maxlength - comment.length);
});
$(this).siblings().find('input[type="submit"]').click(function ()
{
var comment = $('#dialog').find('textarea').attr('value');
var share = $('#dialog').find('#share-shuo:checked').attr('value');
var private = $('#dialog').find('#inp-private:checked').attr('name');
// console.log('share', share);
GM_xmlhttpRequest({
method: 'POST',
url: 'https://movie.douban.com/j/subject/' + douban_id + '/interest',
data: "ck=" + ck + "&interest=wish&" + "&foldwish=U&comment=" + comment + (share ? "&share-shuo=" + share : "") + (private ? "&private=on" : ""),
headers: { "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8" },
onload: function (responseDetails)
{
alert(responseDetails.status +
' ' + responseDetails.statusText);
}
});
$('.imdbRatingPlugin').filter(function ()
{
// console.log('current checking',imdb);
return $(this).attr('data-title') == imdb;
}).parent().append('我想看这部电影');
$('button.douban_wish').filter(function ()
{
// console.log('current checking',imdb);
return $(this).attr('imdb') == imdb;
}).hide();
close_dialog();
});
// console.log(douban_id);
});
$('.imdbRatingPlugin').filter(function ()
{
// console.log('current checking',imdb);
return $(this).attr('data-title') == imdb;
}).parent().append(douban_wish);
};
var collectPlugin = function (imdb, douban_id, ck)
{
var douban_collect = $('');
douban_collect.attr('imdb', imdb);
douban_collect.click(function open_dialog()
{
$(this).after(dialog_html);
$("#dialog textarea.comment").keyup(function ()
{
var comment = $(this).attr('value');
var eng = comment.match(/[^\x00-\xff]/gi), engCount = eng ? eng.length : 0, chsCount = comment.length - engCount;
var maxlength = 140 + Math.ceil(chsCount / 2);
$("#dialog textarea.comment").attr("maxlength", maxlength);
$("#dialog span.num").text(maxlength - comment.length);
});
$(this).siblings().find('input[type="submit"]').click(function ()
{
var user_rating = $('#dialog').find('#n_rating').attr('rating');
var comment = $('#dialog').find('textarea').attr('value');
var share = $('#dialog').find('#share-shuo:checked').attr('value');
var private = $('#dialog').find('#inp-private:checked').attr('name');
// console.log('share', share);
GM_xmlhttpRequest({
method: 'POST',
url: 'https://movie.douban.com/j/subject/' + douban_id + '/interest',
data: "ck=" + ck + "&interest=collect&" + (user_rating ? 'rating=' + user_rating : '') + "&foldcollect=U&comment=" + comment + (share ? "&share-shuo=" + share : "") + (private ? "&private=on" : ""),
headers: { "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8" },
onload: function (responseDetails)
{
// alert(responseDetails.status +
// ' ' + responseDetails.statusText + '\n\n' +
// 'Feed data:\n' + responseDetails.responseText);
alert(responseDetails.status +
' ' + responseDetails.statusText);
}
});
var rating_icon = $('
/10我看过这部电影');
rating_icon.find('a').attr('href', 'https://movie.douban.com/subject/' + douban_id);
rating_icon.find('#my_rating').text(user_rating * 2);
$('.imdbRatingPlugin').filter(function ()
{
// console.log('current checking',imdb);
return $(this).attr('data-title') == imdb;
}).parent().find('span#status').remove();
$('.imdbRatingPlugin').filter(function ()
{
// console.log('current checking',imdb);
return $(this).attr('data-title') == imdb;
}).parent().append(rating_icon);
$('button').filter(function ()
{
// console.log('current checking',imdb);
return $(this).attr('imdb') == imdb;
}).hide();
close_dialog();
});
// console.log(douban_id);
});
$('.imdbRatingPlugin').filter(function ()
{
// console.log('current checking',imdb);
return $(this).attr('data-title') == imdb;
}).parent().append(douban_collect);
};
$('.torrents tbody tr .imdbRatingPlugin').each(function ()
{
$(this).before('
');
var imdb = $(this).attr('data-title');
$(this).after(doubanPlugin(imdb));
});
$('#outer h1 .imdbRatingPlugin').each(function ()
{
$(this).before('
');
var imdb = $(this).attr('data-title');
$(this).after(doubanPlugin(imdb));
$('button.douban_icon').click();
});