AbemaTV番組→Googleカレンダー
by
xtetsuji
2019-04-06 [2019/04/06 14:19:34]
AbemaTVの番組ページで実行すると番組放送予定をGoogleカレンダーに登録します
@@ -23,11 +23,11 @@
var base = 'http://www.google.com/calendar/event?';
return base +
'action=TEMPLATE' +
- '&text=' + param.title +
- '&details=' + (param.details||'') +
- '&location=' + (param.location||'') +
+ '&text=' + encodeURIComponent(param.title) +
+ '&details=' + encodeURIComponent(param.details||'') +
+ '&location=' + encodeURIComponent(param.location||'') +
'&dates=' + getUTC(param.sdate) + '/' + getUTC(param.edate) +
- '&sprop=' + (param.sprop||'');
+ '&sprop=' + encodeURIComponent(param.sprop||'');
};
var now = (function(){
var dnow = new Date;
/*
* @title AbemaTV番組→Googleカレンダー
* @description AbemaTVの番組ページで実行すると番組放送予定をGoogleカレンダーに登録します
* @include https://abema.tv/channels/abema-anime/slots/*
* @license MIT License
* @require
*/
var getUTC = function(date_str){
var date = new Date(date_str);
return date.getUTCFullYear() +
zerofill(date.getUTCMonth()+1) +
zerofill(date.getUTCDate()) +
'T' +
zerofill(date.getUTCHours()) +
zerofill(date.getUTCMinutes()) +
zerofill(date.getUTCSeconds()) +
'Z';
};
var zerofill = function(num){
return ('0'+num).slice(-2);
};
var get_url = function(param){
var base = 'http://www.google.com/calendar/event?';
return base +
'action=TEMPLATE' +
'&text=' + encodeURIComponent(param.title) +
'&details=' + encodeURIComponent(param.details||'') +
'&location=' + encodeURIComponent(param.location||'') +
'&dates=' + getUTC(param.sdate) + '/' + getUTC(param.edate) +
'&sprop=' + encodeURIComponent(param.sprop||'');
};
var now = (function(){
var dnow = new Date;
var now = {};
var keys = ["getFullYear", "getMonth", "getDate", "getHours", "getMinutes"];
for (var i = 0; i < keys.length; i++ ) {
var method = keys[i];
var key = method.match(/[A-Z][a-z]+$/)[0].toLocaleLowerCase();
now[key] = dnow[method]();
}
return now;
})();
var date_pair = (function(){
var digits = document.querySelectorAll(".com-tv-SlotHeader__air-time span")[0].innerText.match(/(\d+)/g);
if ( digits.length == 6 ) {
var base_date =
now.year.toString() + '-' +
zerofill(digits[0]) + '-' +
zerofill(digits[1]) + 'T';
var sdate = base_date +
zerofill(digits[2]) + ':' +
zerofill(digits[3]) + ':00+09:00';
var edate = base_date +
zerofill(digits[4]) + ':' +
zerofill(digits[5]) + ':00+09:00';
return [sdate, edate];
}
if ( digits.length == 8 ) {
var sdate =
now.year.toString() + '-' +
zerofill(digits[0]) + '-' +
zerofill(digits[1]) + 'T' +
zerofill(digits[2]) + ':' +
zerofill(digits[3]) + ':00+09:00';
var edate =
now.year.toString() + '-' +
zerofill(digits[4]) + '-' +
zerofill(digits[5]) + 'T' +
zerofill(digits[6]) + ':' +
zerofill(digits[7]) + ':00+09:00';
return [sdate, edate];
}
throw "date_pair error";
})();
var title = document.querySelectorAll(".com-tv-SlotHeader__title span")[0].innerText;
var channel = document.querySelectorAll(".com-tv-SlotHeader__channel-name span")[0].innerText
;
var details = location.href;
var url = get_url({
title: title,
details: details,
location: "AbemaTV " + channel,
sdate: date_pair[0],
edate: date_pair[1],
sprop: location.href
});
open(url);
- Permalink
- このページへの個別リンクです。
- RAW
- 書かれたコードへの直接のリンクです。
- Packed
- 文字列が圧縮された書かれたコードへのリンクです。
- Userscript
- Greasemonkey 等で利用する場合の .user.js へのリンクです。
- Loader
- @require やソースコードが長い場合に多段ロードする Loader コミのコードへのリンクです。
- Metadata
- コード中にコメントで @xxx と書かれたメタデータの JSON です。