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に投げるだけです。