【iOSショートカット】YouTube Liveの配信予定をカレンダー登録

# YouTubeの配信通知が使いにくい！！
　YouTubeヘビーユーザであれば誰しもが抱えてるこの悩み、解決します！
GAS、pytube、ショートカットを使って配信予定をカレンダに登録するまでを
一気通貫で解説します！！

　対象ユーザはiOS端末を使用している方となっていますが、GASから
動画情報を抜いた後の処理次第では他環境でも応用効くかと思います。

※コードはChatGPTに書いてもらっています。

# 全体像

pytubeで配信URLから動画IDを抜く
↓
動画IDをGASに投げてタイトル、概要欄、開始時刻を取得
↓
ショートカットでカレンダ登録

# GAS
```
// 動画の詳細を YouTube Data API から取得する関数
const getVideoDetails = (videoId) => {
  const response = YouTube.Videos.list('liveStreamingDetails,snippet', { id: videoId });
  return response.items && response.items.length > 0 ? response.items[0] : null;
};

// 動画が予定されたライブ配信かどうかを確認する関数
const isScheduledLiveStream = (video) =>
  video.liveStreamingDetails && video.liveStreamingDetails.scheduledStartTime;

// メイン関数：動画 ID を受け取り、タイトル、概要欄、開始予定時刻を返す
const main = (videoId) => {
  const video = getVideoDetails(videoId);

  if (!video || !isScheduledLiveStream(video)) {
    Logger.log('この動画は予定された YouTube ライブ配信ではありません。');
    return null;
  }

  const title = video.snippet.title;
  const description = video.snippet.description;
  const scheduledStartTime = video.liveStreamingDetails.scheduledStartTime;

  const result = {
    title,
    description,
    scheduledStartTime,
  };

  return result;
};

// HTTP GET リクエストを処理する doGet 関数
function doGet(e) {
  const videoId = e.parameter.videoId;
  if (!videoId) {
    return ContentService.createTextOutput('エラー: videoId パラメータが提供されていません。');
  }

  const result = main(videoId);

  if (!result) {
    return ContentService.createTextOutput('エラー: この動画は予定された YouTube ライブ配信ではありません。');
  }

  const jsonOutput = JSON.stringify(result);

  return ContentService.createTextOutput(jsonOutput).setMimeType(ContentService.MimeType.JSON);
}
```

以上のスクリプトをデプロイしてAPIキーを取得。

実行すると以下のようなjsonが返ってくる。
※改行の\nはカレンダ登録時勝手に解決してくれる。
```
Invoke-WebRequest -Method Get -Uri "https://script.google.com/macros/s/APIキー/exec?videoId=uarNiSl_uh4"
{
  "title": "Apple Event - September 9",
  "description": "Watch the special Apple Event to learn about the next generation of iPhone, Apple Watch, and AirPods, and so much more.\n\nTo watch the event interpreted in American Sign Language (ASL), please click here: https://youtu.be/PYnfJl2OSic\n\nAudio Descriptions: https://apple.co/3MF5xtw\n\n00:00:00 Introduction\n00:04:34 Apple Watch Series 10\n00:20:20 Apple Watch Ultra 2\n00:26:00 AirPods\n00:39:53 iPhone 16\n01:11:42 iPhone 16 Pro\n\n“GOOD TIMES“ by Jungle https://apple.co/GOOD-TIMES-Jungle\n“Black” by The Soft Moon https://apple.co/Black-Soft-Moon\n“Welcome to Joy” by Hark Madley https://apple.co/Welcome-To-Joy\n“Riseatsunset (Super Orange Rework)” by Krishna Canning, Habe, Reiny https://apple.co/Riseatsunset\n“To Love Again (Sofia Kourtesis Remix)“ by Vandelux https://apple.co/Love-Again-Remix\n“Drum Nation (feat. DJNZR)” by Black Magick Snakes, Day Vidya, Esaro https://apple.co/Drum-Nation\n“places to be” by Fred again.., Anderson .Paak, CHIKA https://apple.co/places-to-be\n“Peaceful Place” by Leon Bridges https://apple.co/Peaceful-Place\n“Some Act You Put On” by Fine Line https://apple.co/Some-Act-Fine-Line\n“God Gave Me Feet For Dancing” by Ezra Collective, Yazmin Lacey https://apple.co/Gave-Me-Feet\n“Ride” by Loukeman https://apple.co/Loukeman-Ride\n“ASPEN (feat. Toro y Moi)” by Channel Tres https://apple.co/ASPEN-Channel-Tres\n“TAKA“ by Ahadadream, Priya Ragu, Skrillex, contra https://apple.co/TAKA\n“Shift Souls” by Toechter https://apple.co/Shift-Souls\n“A Dam Will Always Divide” by Avalon Emerson https://apple.co/Will-Always-Divide\n“Dancing in the Flames” by The Weeknd\n\n#AppleEvent #iPhone16Pro #iPhone16 #AppleWatchSeries10 #AirPods4\n\nWelcome to the official Apple YouTube channel. Here you’ll find news about product launches, tutorials, and other great content. Apple’s more than 160,000 employees are dedicated to making the best products on earth, and to leaving the world better than we found it.",
  "scheduledStartTime": "2024-09-09T17:00:00Z"
}
```

# a-Shell
iOSの有能シェルアプリ。

https://apps.apple.com/jp/app/a-shell/id1473805438

pipでpytubeをインストール。
```
pip install pytube
```

# ショートカット
https://www.icloud.com/shortcuts/290812f755ee4fb1a9a4f86f506d3aba

読み込み時、取得したGASのAPIキーを入力してください。

# 使用方法
配信URLを共有からショートカットを選択することで予定が作成されます！！