推し活のために作ったブックマークレット

自分のために書いておくのでコードの正しさは保証できません。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と投稿用のテキストをコピーして、ついでに開いたツイート用ウィンドウに手動でペーストするやつ。

あと備忘録:ブックマークレットに//でのコメントアウトは使えない。

他にこんな使い方したい人いるのか?

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA