Youtubeの動画更新をSlackに通知するスクリプトを組毛としていたら、YoutubeのAPIを使うにはGoogle Cloudのde APIキーを発行する必要があるとのこと。これはメンドーだと思いつつも、他に手段がないと思っていたので、最初はそれでやってました。

後日、調べたら、YoutubeのチャネルIDからRSSフィードのURLが生成できることを知りました。これを使えばAPIキーなしで、動画のリストを取得できます。もちろん、APIを使った方が検索条件をいろいろ設定できるのだが、今回は動画更新があれば通知するということをやりたいので、RSSで十分だったりする。

チャネルIDからRSSのURLを作る

YoutubeのチャネルIDはURLをみるとわかる。例えば、ブラウザでYoutubeに行ってそのチャネルを開いて、

  • https://www.youtube.com/channel/UC_ak3ZurSDtT3Kv1RFdrgiA

というURLであれば

  • チャネルID: UC_ak3ZurSDtT3Kv1RFdrgiA

ということになる。

後はこのチャネルのRSSのURLは以下の通りになる。

  • RSSのURL => https://www.youtube.com/feeds/videos.xml?channel_id=UC_ak3ZurSDtT3Kv1RFdrgiA

Python Beautiful Soupを使って日時とタイトルとURLを抜き出す

後は、スクリプトを書けば良いだけになる。RSSのダウンロードはRequestsを、パースはおなじみのBeautiful Soupを使う。

import requests
from bs4 import BeautifulSoup

ret = requests.get('https://www.youtube.com/feeds/videos.xml?channel_id=UC_ak3ZurSDtT3Kv1RFdrgiA')
soup = BeautifulSoup(ret.text, 'html.parser')

# contents: List like [('2014-07-02T00:25:08+00:00', 'New Contents!', 'https://www.youtube.com/watch?v=LmR123'), ...]
contents=[]
for e in soup.find_all('entry'):
    date = e.published.get_text()
    title = e.title.get_text()
    url = e.link['href']
    contents.append( (date, title, url) )

結果を見てみる。

print( contents )

[結果]
[('2022-02-18T10:30:18+00:00',
  '島田。キャンピングカーのレンタル業 始めるってよ。',
  'https://www.youtube.com/watch?v=LC0xO_yAb4k'),
 ('2022-01-28T10:15:00+00:00',
  '無人島3DAYS 〜#3 最後の無人島',
  'https://www.youtube.com/watch?v=LSECLa_SGw4'),
 ('2022-01-25T09:45:01+00:00',
  '砂浜でお菓子パーティー',
  'https://www.youtube.com/watch?v=fPbHXiaLHDc'),
 ('2022-01-20T09:29:07+00:00',
  '無人島3DAYS 〜予報雨 翌朝晴れ~',
  'https://www.youtube.com/watch?v=qL38jX842s4'),
 ('2022-01-18T09:45:01+00:00',
  '太陽が海に消える瞬間',
  'https://www.youtube.com/watch?v=BzOZP3Ucwcw'),
 ('2022-01-14T09:45:00+00:00',
  '無人島3DAYS\u3000〜#1  極寒からの逃避〜',
  'https://www.youtube.com/watch?v=O181eJ9YmZc'),
 ('2022-01-07T09:30:10+00:00',
  '装備紹介〜無人島 3泊4日バージョン〜',
  'https://www.youtube.com/watch?v=x2d4w7pDaR8'),
 ('2021-12-24T09:45:03+00:00',
  'ヒロシ鉄板で簡単焼肉',
  'https://www.youtube.com/watch?v=QU2bIWoK8hU'),
 ('2021-12-17T12:46:47+00:00',
  '雄大な阿蘇の景色を見ながら菓子パンを食う',
  'https://www.youtube.com/watch?v=UC1eZk7w1ZI'),
 ('2021-11-29T09:45:01+00:00',
  '焚火会大集合!〜2022 ヒロシと愉快な仲間たち〜\u3000ロケ終了後',
  'https://www.youtube.com/watch?v=3jY3Nd7Y_RA'),
 ('2021-11-18T10:30:07+00:00',
  '今夜私が頂くのは、バターチキンカレー 〜秋のキャンプ#2〜',
  'https://www.youtube.com/watch?v=lTodjRgkU9Y'),
 ('2021-11-12T11:00:12+00:00',
  '野でピザを焼く 〜秋のキャンプ#1〜',
  'https://www.youtube.com/watch?v=yYADk7WQjoA'),
 ('2021-10-27T09:45:00+00:00',
  '秋の沖縄キャンプ',
  'https://www.youtube.com/watch?v=1bVI9zudef0'),
 ('2021-10-22T09:00:26+00:00',
  '南国弁当',
  'https://www.youtube.com/watch?v=ztahi7lIGFY'),
 ('2021-10-16T08:00:29+00:00',
  '秋雨の中 肉を喰う',
  'https://www.youtube.com/watch?v=qgkY4u6wycw')]

うまくいきました。後はSlackに投げるだけです。