推し活のために作ったブックマークレット
自分のために書いておくのでコードの正しさは保証できません。javascriptのことはあんまりわかりません。
Youtubeのライブ配信が開始されてからどのくらい経過したかをツイートするブックマークレット(API必須)
javascript:(function(){
let KEY = YOUTUBEの公開APIキー;
let url = location.href;
let ID = url.split('v=')[1];
let jsonData = "https://www.googleapis.com/youtube/v3/videos?id=" + ID + "&key=" + KEY + "&part=liveStreamingDetails";
let w=550,h=420;
let now = new Date();
let req = new XMLHttpRequest();
req.onreadystatechange = function() {
if(req.readyState == 4 && req.status == 200){
let jsonfile = JSON.parse(req.responseText);
let publish = jsonfile.items[0].liveStreamingDetails.actualStartTime;
let publishDate = new Date(publish);
let diff = now.getTime() - publishDate.getTime();
let diffHour = Math.floor(diff / (1000 * 60 * 60));
let diffMinute = Math.floor(diff / (1000 * 60) - (diffHour * 60));
let diffSecond = Math.floor((diff / 1000) - (diffHour * 60 * 60) - (diffMinute * 60));
let dh = ('00' + diffHour).slice(-2);
let dm = ('00' + diffMinute).slice(-2);
let ds = ('00' + diffSecond).slice(-2);
window.open("https://twitter.com/intent/tweet?text=" + dh+":"+dm+":"+ds,"_blank","width="+w+",height="+h+",left="+(screen.width-w)/2+",top="+(screen.height-h)/2+",scrollbars=yes,resizable=yes,toolbar=no,location=yes");
}
};
req.open("GET", jsonData, false);
req.send(null);
})();
APIで動画情報からライブ配信時間を取得し、現在時刻との差を計算して、経過時間をツイートするサブウィンドウを開く。
最終的に「00:00:00」形式のツイートテキストができます。それだけ。
自分がいつからライブを見始めたかとか、いつ離席したかをツイートでメモっといて後でアーカイブを見るためのやつです。
普通の動画をどこまで見たかツイートするブックマークレット
javascript:(function(){
let elements = document.getElementsByClassName('ytp-time-current');
let time = elements[0].textContent;
let viewTimeArray = time.split(':');
/* HH部分取得 */
let viewHour = Math.floor(viewTimeArray[0] * 3600);
/* MM部分取得 */
let viewMinute = Math.floor(viewTimeArray[1] * 60);
/* SS部分取得 */
let viewSecond = Math.floor(viewTimeArray[2]);
let totalViewTime = viewHour + viewMinute + viewSecond;
let url = location.href;
let w=550,h=420;
let tweet = elements[0].textContent + "まで見た\n" + url;
window.open("https://twitter.com/intent/tweet?text=" + tweet,"_blank","width="+w+",height="+h+",left="+(screen.width-w)/2+",top="+(screen.height-h)/2+",scrollbars=yes,resizable=yes,toolbar=no,location=yes");
})();
これはAPI使わない。ライブ配信じゃなくて通常の動画に使うやつ。
単純に動画ページ上で再生時間が書かれているclassから文字列を取得するだけ。
「00:00:00まで見た <動画URL>」のツイートが生成されます。URLの方にはタイムがつきません。開始時間指定のURLだと動画URL&t=00sみたいな文字列がつくのですが、それ以降はツイッターのウィンドウ上で消されました。それはダメなのね。
ということで、
時間まで含めたURLをクリップボードにコピーして手動でペースト&ツイートする方
javascript:(function(){
let ytTime = document.getElementsByClassName('ytp-time-current');
let time = ytTime[0].textContent;
let viewTimeArray = time.split(':');
if (viewTimeArray.length < 3) {
viewTimeArray.unshift('0');
}
/* HH部分取得 */
let viewHour = Math.floor(viewTimeArray[0] * 3600);
/* MM部分取得 */
let viewMinute = Math.floor(viewTimeArray[1] * 60);
/* SS部分取得 */
let viewSecond = Math.floor(viewTimeArray[2]);
let totalViewTime = viewHour + viewMinute + viewSecond;
let url = location.href;
let urlAndTime = url + "&t=" + totalViewTime + "s";
let clipText = ytTime[0].textContent + "まで見た\n" + urlAndTime;
let w=550,h=420;
/* クリップボードに文字列をコピー */
navigator.clipboard.writeText(clipText).then(function() {
/* clipboard successfully set */
window.open("https://twitter.com/intent/tweet?text=","_blank","width="+w+",height="+h+",left="+(screen.width-w)/2+",top="+(screen.height-h)/2+",scrollbars=yes,resizable=yes,toolbar=no,location=yes");
}, function() {
/* clipboard write failed */
});
})()
タイトルそのまま、時間指定まで含めたURLと投稿用のテキストをコピーして、ついでに開いたツイート用ウィンドウに手動でペーストするやつ。
あと備忘録:ブックマークレットに//でのコメントアウトは使えない。
他にこんな使い方したい人いるのか?