<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>YouTube on IT 空間</title><link>https://blog.jiatool.com/tags/YouTube/</link><description>Recent content in YouTube on IT 空間</description><generator>Hugo -- gohugo.io</generator><language>zh</language><managingEditor>jia@jiatool.com (Jia)</managingEditor><webMaster>jia@jiatool.com (Jia)</webMaster><copyright>&amp;copy;{year}, Jia All Rights Reserved</copyright><lastBuildDate>Mon, 30 Mar 2026 21:15:00 +0800</lastBuildDate><atom:link href="https://blog.jiatool.com/tags/YouTube/index.xml" rel="self" type="application/rss+xml"/><item><title>「YouTube 播放清單篩選器」瀏覽器擴充功能(Extension)</title><link>https://blog.jiatool.com/posts/youtube-playlist-filter/</link><pubDate>Mon, 30 Mar 2026 21:15:00 +0800</pubDate><author>jia@jiatool.com (Jia)</author><atom:modified>Sat, 16 May 2026 13:30:00 +0800</atom:modified><guid>https://blog.jiatool.com/posts/youtube-playlist-filter/</guid><description>前言 不知道大家是不是都一樣，我 YouTube 的「稍後觀看」清單裡面影片數量高達 7、800 部 (我有努力在清了&amp;hellip;)，此時有時想過濾某頻道的影片</description><content:encoded>&lt;h2 id="前言">前言&lt;/h2>
&lt;p>不知道大家是不是都一樣，我 YouTube 的「稍後觀看」清單裡面影片數量高達 7、800 部 (我有努力在清了&amp;hellip;)，此時有時想過濾某頻道的影片，或有個短時間的空檔，想找 10 分鐘以內的影片填充，原生網頁沒有任何篩選工具，就像大海撈針&amp;hellip;&lt;/p>
&lt;p>最近我就想到，現在 Vibe Coding 當道，自己做一款這種用途的瀏覽器擴充功能(Extension) 應該不難，因此就誕生出「YouTube 播放清單篩選器」~&lt;/p>
&lt;br/>
&lt;div class="notices info" data-title="連結">
Chrome 線上應用程式商店：&lt;br />
&lt;a href="https://chromewebstore.google.com/detail/hbffnboipbkgkphpnjddfaofiahmcolh">「YouTube 播放清單篩選器」擴充功能&lt;/a>
&lt;/div>
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/youtube_playlist_filter/scrolling_image.jpg" alt="「YouTube 播放清單篩選器」瀏覽器擴充功能" data-caption="「YouTube 播放清單篩選器」瀏覽器擴充功能" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='600px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:600px;height:;"/>
&lt;figcaption style="text-align: center;">
「YouTube 播放清單篩選器」瀏覽器擴充功能
&lt;/figcaption>
&lt;/figure>
&lt;br/>
&lt;h2 id="介紹">介紹&lt;/h2>
&lt;p>前往 Chrome 線上應用程式商店 找到「&lt;a href="https://chromewebstore.google.com/detail/hbffnboipbkgkphpnjddfaofiahmcolh" target="_blank" rel="noopener">
YouTube 播放清單篩選器
&lt;/a>」擴充功能 (Edge 應該也可以安裝使用)。&lt;/p>
&lt;br/>
&lt;p>安裝完成後前往 YouTube 的「稍後觀看」頁面 (或任何「播放清單」頁面)，上方就會出現此工具 UI。&lt;/p>
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/youtube_playlist_filter/screenshot0.jpg" alt="在「稍後觀看」頁面上方會顯示此工具 UI" data-caption="在「稍後觀看」頁面上方會顯示此工具 UI" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='900px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:900px;height:;"/>
&lt;figcaption style="text-align: center;">
在「稍後觀看」頁面上方會顯示此工具 UI
&lt;/figcaption>
&lt;/figure>
&lt;h3 id="-核心功能">🌟 核心功能&lt;/h3>
&lt;ol>
&lt;li>頻道篩選：自動抓取清單中的所有頻道，只想看哪個特定創作者的影片直接過濾。&lt;/li>
&lt;li>影片長度過濾：
&lt;ul>
&lt;li>滑桿控制：自由設定影片時間長度範圍。&lt;/li>
&lt;li>快捷按鈕：預設「5分鐘內」、「10-30分鐘」&amp;hellip;等常用區間，快速過濾。&lt;/li>
&lt;/ul>
&lt;/li>
&lt;li>關鍵字搜尋：輸入關鍵字，搜尋影片標題和頻道名稱。&lt;/li>
&lt;li>多種排序：支援依影片時長、觀看次數、頻道名稱進行升序/降序排列。&lt;/li>
&lt;li>全自動加載：一鍵加載所有播放清單影片，無需手動慢慢向下滾動。&lt;/li>
&lt;li>色彩主題：支援「淺色」與「深色」主題，自動依照你 YouTube 的設定切換。&lt;/li>
&lt;li>佈局優化：提供「預設」與「緊湊」兩種顯示佈局，「緊湊」模式可以在相同畫面下呈現更多影片。&lt;/li>
&lt;/ol>
&lt;br>
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/youtube_playlist_filter/screenshot2.jpg" alt="支援「淺色」與「深色」主題" data-caption="支援「淺色」與「深色」主題" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='700px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:700px;height:;"/>
&lt;figcaption style="text-align: center;">
支援「淺色」與「深色」主題
&lt;/figcaption>
&lt;/figure>
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/youtube_playlist_filter/screenshot3.jpg" alt="「緊湊」佈局可以在相同畫面下呈現更多影片" data-caption="「緊湊」佈局可以在相同畫面下呈現更多影片" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='700px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:700px;height:;"/>
&lt;figcaption style="text-align: center;">
「緊湊」佈局可以在相同畫面下呈現更多影片
&lt;/figcaption>
&lt;/figure>
&lt;br>
&lt;h3 id="-隱私與資安">🔒 隱私與資安&lt;/h3>
&lt;p>並且為了確保隱私與資安，它是 100% 都在你的瀏覽器本地運行，我也完全不收集任何數據，大家可以放心使用。&lt;/p>
&lt;br>
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/youtube_playlist_filter/approval_successful.jpg" alt="等了一個禮拜，通過審查並上架成功~" data-caption="等了一個禮拜，通過審查並上架成功~" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='450px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:450px;height:;"/>
&lt;figcaption style="text-align: center;">
等了一個禮拜，通過審查並上架成功~
&lt;/figcaption>
&lt;/figure>
&lt;br>
&lt;!--adsense-->
&lt;br/>
&lt;h2 id="結語">結語&lt;/h2>
&lt;p>此擴充功能一開始是我自己想用，不過應該也有不少人有這個需求，所以我再花了一些時間 (還有花 150 元才能成為開發人員&amp;hellip;) 上架到官方，歡迎大家多多使用。&lt;/p>
&lt;p>如果有任何問題或建議，都可以留言或發 Email 反饋給我~&lt;/p>
&lt;br/>
&lt;p>對生成式 AI 感興趣的讀者，記得追蹤 FB 粉專『&lt;a href="https://www.facebook.com/jiatool" target="_blank" rel="noopener">
IT空間
&lt;/a>』，以免錯過最新的發文通知呦~🔔&lt;/p>
&lt;br/>
&lt;br/>
&lt;hr />
&lt;br/>
&lt;blockquote>
&lt;p>「真正的死亡，是世界上再沒有一個人記得你。」&lt;br />
The real death is that no one in the world remembers you.&lt;/p>
&lt;p align="right">—— 《可可夜總會》&lt;/p>
&lt;/blockquote></content:encoded><dc:creator>Jia</dc:creator><media:content url="https://blog.jiatool.comimages/cover/youtube_playlist_filter.jpg" medium="image"><media:title type="html">featured image</media:title></media:content><media:content url="https://blog.jiatool.comimages/posts/youtube_playlist_filter_meta.jpg" medium="image"><media:title type="html">meta image</media:title></media:content><category>網頁</category><category>YouTube</category><category>瀏覽器</category><category>自製小工具</category></item><item><title>YouTube「剪輯片段」新功能 - 完整說明與教學</title><link>https://blog.jiatool.com/posts/youtube_clips/</link><pubDate>Wed, 14 Jul 2021 17:50:00 +0800</pubDate><author>jia@jiatool.com (Jia)</author><atom:modified>Wed, 14 Jul 2021 17:50:00 +0800</atom:modified><guid>https://blog.jiatool.com/posts/youtube_clips/</guid><description>前言 YouTube 今年(西元2021年) 1/29 在 YouTube Help 發了一篇文章 ，宣布推出一個「剪輯片段」的新功能，可以選擇並分享影片中某一個片段，觀看時會一直重播那個片段</description><content:encoded>&lt;h2 id="前言">前言&lt;/h2>
&lt;p>YouTube 今年(西元2021年) 1/29 在 YouTube Help 發了&lt;a href="https://support.google.com/youtube/thread/95526465/testing-clips-on-youtube" target="_blank" rel="noopener">
一篇文章
&lt;/a>，宣布推出一個「剪輯片段」的新功能，可以選擇並分享影片中某一個片段，觀看時會一直重播那個片段，而且還有「我的短片」頁面，紀錄片段的觀看次數、剪輯日期時間，不過此功能目前還處於實驗階段。&lt;/p>
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/youtube_clips/description.png" alt="「剪輯片段」功能說明" data-caption="「剪輯片段」功能說明" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='700px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:700px;height:;"/>
&lt;figcaption style="text-align: center;">
「剪輯片段」功能說明
&lt;/figcaption>
&lt;/figure>
&lt;div class="notices warning" data-title="特別說明">
官方有標明：&lt;br />
&amp;quot;這項功能處於實驗階段，僅供少數創作者試用。日後我們會開放更多創作者使用這項功能。&amp;quot;
&lt;/div>
&lt;br/>
&lt;!--adsense-->
&lt;h2 id="製作並分享剪輯片段">製作並分享剪輯片段&lt;/h2>
&lt;p>登入 YouTube 帳戶後，進入想剪輯的影片頁面，因為目前只有少數頻道有這個功能，我底下列出幾部影片，讓各位網友方便測試：&lt;/p>
&lt;ul>
&lt;li>Ryu`s 遊戲頻道 &lt;a href="https://www.youtube.com/watch?v=qA9spj8SWDI">https://www.youtube.com/watch?v=qA9spj8SWDI&lt;/a>&lt;/li>
&lt;li>阿神 &lt;a href="https://www.youtube.com/watch?v=oSK5skkZvgI">https://www.youtube.com/watch?v=oSK5skkZvgI&lt;/a>&lt;/li>
&lt;li>建盛 &lt;a href="https://www.youtube.com/watch?v=EQZz4EpZehY">https://www.youtube.com/watch?v=EQZz4EpZehY&lt;/a>&lt;/li>
&lt;li>PowerTech淮特 &lt;a href="https://www.youtube.com/watch?v=WAO1ePed3XA">https://www.youtube.com/watch?v=WAO1ePed3XA&lt;/a>&lt;/li>
&lt;li>Alan Games / 阿倫遊戲 &lt;a href="https://www.youtube.com/watch?v=NbheWX-Mw_A">https://www.youtube.com/watch?v=NbheWX-Mw_A&lt;/a>&lt;/li>
&lt;li>老高遊戲頻道 &lt;a href="https://www.youtube.com/watch?v=IO1uFnnBat4">https://www.youtube.com/watch?v=IO1uFnnBat4&lt;/a>&lt;/li>
&lt;/ul>
&lt;br/>
&lt;p>點擊影片下方的「剪輯片段」圖示按鈕。&lt;br />
(如果沒有出現此圖示，代表影片未啟用剪輯片段功能，或此功能尚未開放給此頻道。)&lt;/p>
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/youtube_clips/clip_button.jpg" alt="「剪輯片段」圖示按鈕" data-caption="「剪輯片段」圖示按鈕" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='800px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:800px;height:;"/>
&lt;figcaption style="text-align: center;">
「剪輯片段」圖示按鈕
&lt;/figcaption>
&lt;/figure>
&lt;br/>
&lt;p>此時畫面右方會出現剪輯片段的「操作介面」，&lt;br />
為你的片段命名(標題)，透過輸入時間或下方滑桿還設定片段時間範圍。&lt;br />
(還可以看見左方影片的時間軸也同步出現黃色標記)&lt;/p>
&lt;p>它有幾點限制：&lt;/p>
&lt;ol>
&lt;li>剪輯片段的長度只能介於 5 ~ 60 秒。&lt;/li>
&lt;li>剪輯片段的名稱最多 140 個字元。&lt;/li>
&lt;/ol>
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/youtube_clips/clip_ui.jpg" alt="剪輯片段的操作介面" data-caption="剪輯片段的操作介面" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='900px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:900px;height:;"/>
&lt;figcaption style="text-align: center;">
剪輯片段的操作介面
&lt;/figcaption>
&lt;/figure>
&lt;br/>
&lt;p>完成後，按一下 &amp;quot;分享剪輯片段&amp;quot;。&lt;br />
顯示分享對話框，官方文件說有&amp;quot;社群網站&amp;quot;、&amp;quot;電子郵件&amp;quot;、&amp;quot;複製連結&amp;quot;、&amp;quot;嵌入&amp;quot;四種方式，但實際上這邊沒看到&amp;quot;嵌入&amp;quot;的選項，不知道是否因為目前是實驗階段的關係。&lt;/p>
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/youtube_clips/share_box.jpg" alt="「分享剪輯片段」對話框" data-caption="「分享剪輯片段」對話框" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='600px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:600px;height:;"/>
&lt;figcaption style="text-align: center;">
「分享剪輯片段」對話框
&lt;/figcaption>
&lt;/figure>
&lt;br/>
&lt;p>這是我以上測試出來的連結，可以點進去看實際效果：&lt;br />
&lt;a href="https://youtube.com/clip/Ugwg075LtI11G6G0UEd4AaABCQ">https://youtube.com/clip/Ugwg075LtI11G6G0UEd4AaABCQ&lt;/a>&lt;/p>
&lt;p>實際觀看「剪輯片段」介面如下，其餘部分會淡化處理，讓你知道目前正在觀看剪輯片段。&lt;br />
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/youtube_clips/watch_clip.jpg" alt="觀看「剪輯片段」介面" data-caption="觀看「剪輯片段」介面" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='900px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:900px;height:;"/>
&lt;figcaption style="text-align: center;">
觀看「剪輯片段」介面
&lt;/figcaption>
&lt;/figure>&lt;/p>
&lt;p>* 有個要小地方要注意，如果使用自己帳號剪輯片段，那在觀看此剪輯片段時，會預設跳到&amp;quot;完整播放&amp;quot;，需要點擊左下角的「返回剪輯片段頁面」來跳回。&lt;/p>
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/youtube_clips/back_clip_page.png" alt="返回剪輯片段頁面" data-caption="返回剪輯片段頁面" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='450px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:450px;height:;"/>
&lt;figcaption style="text-align: center;">
返回剪輯片段頁面
&lt;/figcaption>
&lt;/figure>
&lt;h2 id="我的短片">我的短片&lt;/h2>
&lt;p>自己剪輯的片段全部都會儲存至「我的短片」頁面裡，前往的圖示按鈕位於左方選單內。&lt;br />
在此頁面中，可以查閱自己全部的剪輯片段，記錄著剪輯片段的資訊(包含片段的&amp;quot;觀看次數&amp;quot;與&amp;quot;發佈日期&amp;quot;)，忘記分享連結，也可以從這裡來複製。&lt;/p>
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/youtube_clips/my_clip.jpg" alt="「我的短片」頁面" data-caption="「我的短片」頁面" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='700px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:700px;height:;"/>
&lt;figcaption style="text-align: center;">
「我的短片」頁面
&lt;/figcaption>
&lt;/figure>
&lt;br/>
&lt;!--adsense-->
&lt;h2 id="qa-說明">Q&amp;amp;A 說明&lt;/h2>
&lt;h3 id="哪些頻道會搶先支援此功能">哪些頻道會搶先支援此功能？&lt;/h3>
&lt;p>就我目前的觀察，「遊戲頻道(創作者)」很高機率會有這個功能。&lt;/p>
&lt;p>而且並不是只有新影片，舊影片也可以剪輯片段。&lt;br />
像是&lt;a href="https://www.youtube.com/watch?v=IO1uFnnBat4" target="_blank" rel="noopener">
老高的遊戲頻道
&lt;/a>，從 2019 年 2 月之後就沒有再更新影片了，但還是出現了剪輯片段按鈕。&lt;/p>
&lt;h3 id="手機-app-版">手機 APP 版&lt;/h3>
&lt;p>手機 APP 版與網頁版有類似的操作，但目前貌似只在 Android APP 支援，iOS 可能要再等等。&lt;/p>
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/youtube_clips/mobile.jpg" alt="手機 APP 版" data-caption="手機 APP 版" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='600px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:600px;height:;"/>
&lt;figcaption style="text-align: center;">
手機 APP 版
&lt;/figcaption>
&lt;/figure>
&lt;h3 id="禁止觀眾摘錄你的內容">禁止觀眾摘錄你的內容&lt;/h3>
&lt;p>如果你是影片發布者，不希望觀看的人可以在你的影片使用「剪輯片段」功能，那你可以透過以下方式來關閉：&lt;/p>
&lt;ol>
&lt;li>前往 &lt;a href="http://studio.youtube.com/" target="_blank" rel="noopener">
studio.youtube.com
&lt;/a> 頻道資訊主頁。&lt;/li>
&lt;li>按一下左側的「設定」。&lt;/li>
&lt;li>前往「頻道」&amp;gt;「進階設定」。&lt;/li>
&lt;li>勾選&amp;quot;剪輯片段&amp;quot;下的「不允許觀眾摘錄我的內容」選項。&lt;/li>
&lt;/ol>
&lt;p>* 感覺起來可以只能針對頻道開關，沒辦法設定單一影片的開關，不過因為我還沒有此設定，所以實際情形並不知道。&lt;/p>
&lt;h3 id="為何沒有剪輯片段按鈕">為何沒有「剪輯片段」按鈕&lt;/h3>
&lt;p>確保符合以下條件：&lt;/p>
&lt;ul>
&lt;li>登入 YouTube。&lt;/li>
&lt;li>頻道必須符合剪輯片段的使用資格，並在影片上開啟該功能，觀眾才能製作剪輯片段。&lt;/li>
&lt;li>目前此功能位於實驗階段，僅開放少數創作者使用&lt;/li>
&lt;/ul>
&lt;p>並且影片不能是以下類型：&lt;/p>
&lt;ul>
&lt;li>為兒童打造的影片&lt;/li>
&lt;li>未啟用 DVR 功能的直播影片&lt;/li>
&lt;li>長度超過 8 小時的直播影片&lt;/li>
&lt;li>仍在直播中的首播內容&lt;/li>
&lt;/ul>
&lt;h3 id="觀看剪輯片段會有廣告嗎">觀看剪輯片段會有廣告嗎？&lt;/h3>
&lt;p>還是有😭，只是這部分收益不知道有沒有分給影片創作者？&lt;br />
&amp;quot;如果原始影片有放送廣告，摘錄自該影片的剪輯片段就可能會顯示廣告。&amp;quot;&lt;/p>
&lt;br/>
&lt;!--adsense-->
&lt;h2 id="結語">結語&lt;/h2>
&lt;p>YouTube 有更多不同的新功能出來，還是令人期待，可惜「剪輯片段」目前不能從一個影片中挑出多個片段，畢竟一部影片的精華不可能只集中在一處啊~&lt;/p>
&lt;p>還有從今年 1 月公布到現在 7 月了，竟然還沒有正式放到全部的頻道，不知道在做什麼調整？&lt;/p>
&lt;br/>
&lt;p>如希望取得最新文章通知🔔，歡迎追蹤『&lt;a href="https://www.facebook.com/jiatool" target="_blank" rel="noopener">
IT空間
&lt;/a>』FB 粉專。&lt;/p>
&lt;br/>
&lt;br/>
&lt;hr />
&lt;p>參考：&lt;br />
&lt;a href="https://support.google.com/youtube/answer/10332730" target="_blank" rel="noopener">
分享剪輯片段 - YouTube說明
&lt;/a>&lt;/p>
&lt;br/></content:encoded><dc:creator>Jia</dc:creator><media:content url="https://blog.jiatool.comimages/cover/youtube_clips.jpg" medium="image"><media:title type="html">featured image</media:title></media:content><media:content url="https://blog.jiatool.comimages/posts/youtube_clips_meta.jpg" medium="image"><media:title type="html">meta image</media:title></media:content><category>YouTube</category><category>新功能</category><category>其他</category></item><item><title>[Python爬蟲實例] YouTube-使用 youtube_dl 套件</title><link>https://blog.jiatool.com/posts/youtube_spider_dl/</link><pubDate>Sun, 13 Dec 2020 20:20:00 +0800</pubDate><author>jia@jiatool.com (Jia)</author><atom:modified>Sun, 13 Dec 2020 20:20:00 +0800</atom:modified><guid>https://blog.jiatool.com/posts/youtube_spider_dl/</guid><description>前言 在之前 [Python爬蟲實例] YouTube-使用 YouTube Data API 教學是使用 YouTube Data API 來取得影片相關資訊，不過如果你只是想抓取影片基本訊息，但不想麻煩</description><content:encoded>&lt;h2 id="前言">前言&lt;/h2>
&lt;p>在之前 &lt;a href="https://blog.jiatool.com/posts/youtube_spider_api/" target="_blank" rel="noopener">
[Python爬蟲實例] YouTube-使用 YouTube Data API
&lt;/a> 教學是使用 YouTube Data API 來取得影片相關資訊，不過如果你只是想抓取影片基本訊息，但不想麻煩去申請 API Key，或許可以改使用一個非常有名的套件 — youtube_dl。&lt;/p>
&lt;p>備註：此文僅教育學習，切勿用作商業用途，個人實作皆屬個人行為，本作者不負任何法律責任&lt;/p>
&lt;h2 id="套件">套件&lt;/h2>
&lt;p>本次主要使用到的套件：&lt;/p>
&lt;ul>
&lt;li>youtube-dl [&lt;a href="http://ytdl-org.github.io/youtube-dl/" target="_blank" rel="noopener">
官網
&lt;/a>] [&lt;a href="https://github.com/ytdl-org/youtube-dl" target="_blank" rel="noopener">
GitHub
&lt;/a>]&lt;/li>
&lt;/ul>
&lt;h2 id="-爬蟲程式">📘 爬蟲程式&lt;/h2>
&lt;p>youtube_dl 主要提供從 YouTube 及其他多個網站下載影片，使用方法非常簡單：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre class="chroma">&lt;code class="language-Python" data-lang="Python">&lt;span class="k">with&lt;/span> &lt;span class="n">youtube_dl&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">YoutubeDL&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">ydl&lt;/span>&lt;span class="p">:&lt;/span>
&lt;span class="n">info&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ydl&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">extract_info&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s2">&amp;#34;影片網址&amp;#34;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">download&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="bp">False&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>因為我們只是想取得影片資訊，並沒有要下載影片，因此 download 帶入 False。&lt;/p>
&lt;p>函式回傳的資料即是 dict (字典) 資料型別，我們可以只挑選需要的內容。&lt;br />
程式碼如下：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre class="chroma">&lt;code class="language-Python" data-lang="Python">&lt;span class="kn">from&lt;/span> &lt;span class="nn">pprint&lt;/span> &lt;span class="kn">import&lt;/span> &lt;span class="n">pprint&lt;/span>
&lt;span class="kn">import&lt;/span> &lt;span class="nn">youtube_dl&lt;/span>
&lt;span class="k">def&lt;/span> &lt;span class="nf">get_video_info&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">youtube_url&lt;/span>&lt;span class="p">):&lt;/span>
&lt;span class="n">video_info&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{}&lt;/span>
&lt;span class="k">with&lt;/span> &lt;span class="n">youtube_dl&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">YoutubeDL&lt;/span>&lt;span class="p">()&lt;/span> &lt;span class="k">as&lt;/span> &lt;span class="n">ydl&lt;/span>&lt;span class="p">:&lt;/span>
&lt;span class="n">info&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">ydl&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">extract_info&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">youtube_url&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">download&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="bp">False&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="c1"># pprint(info)&lt;/span>
&lt;span class="n">video_info&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;ID&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">info&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;id&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="n">video_info&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;標題&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">info&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;title&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="n">video_info&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;影片縮圖&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">info&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;thumbnail&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="n">video_info&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;上傳者&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">info&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;uploader&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="n">video_info&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;上傳者網址&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">info&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;uploader_url&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="n">video_info&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;影片長度(秒)&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">info&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;duration&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="n">video_info&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;觀看次數&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">info&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;view_count&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="n">video_info&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;留言數&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">info&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;comment_count&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span> &lt;span class="c1"># -&lt;/span>
&lt;span class="n">video_info&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;喜歡數&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">info&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;like_count&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="n">video_info&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;不喜歡數&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">info&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;dislike_count&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="n">video_info&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;平均評分&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">info&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;average_rating&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="n">video_info&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;描述&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">info&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;description&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="n">video_info&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;標籤&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">info&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;tags&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="n">video_info&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;網頁網址&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">info&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;webpage_url&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="n">video_info&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;上傳日期&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">info&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;upload_date&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="k">return&lt;/span> &lt;span class="n">video_info&lt;/span>
&lt;span class="k">if&lt;/span> &lt;span class="vm">__name__&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="s1">&amp;#39;__main__&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span>
&lt;span class="n">video_info&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">get_video_info&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;https://www.youtube.com/watch?v=YculJhe_iPk&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="n">pprint&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">video_info&lt;/span>&lt;span class="p">)&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>回傳影片相關資訊結果：&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre class="chroma">&lt;code class="language-Python" data-lang="Python">&lt;span class="p">{&lt;/span>&lt;span class="s1">&amp;#39;ID&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s1">&amp;#39;YculJhe_iPk&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="s1">&amp;#39;上傳日期&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s1">&amp;#39;20201206&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="s1">&amp;#39;上傳者&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s1">&amp;#39;Onion Man&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="s1">&amp;#39;上傳者網址&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s1">&amp;#39;http://www.youtube.com/channel/UCzxN4G3s9uR9ao5_O5DoXmA&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="s1">&amp;#39;不喜歡數&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">230&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="s1">&amp;#39;喜歡數&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">13735&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="s1">&amp;#39;平均評分&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mf">4.9341211&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="s1">&amp;#39;影片縮圖&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s1">&amp;#39;https://i.ytimg.com/vi_webp/YculJhe_iPk/maxresdefault.webp?v=5fccb8d3&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="s1">&amp;#39;影片長度(秒)&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">299&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="s1">&amp;#39;描述&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s1">&amp;#39;你的請客值有多少?&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>
&lt;span class="s1">&amp;#39;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>
&lt;span class="s1">&amp;#39;【訂閱】及觀看洋蔥更多影片: https://goo.gl/ijP3Eb&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>
&lt;span class="s1">&amp;#39;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>
&lt;span class="s1">&amp;#39;工作合作：service@weido.biz&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>
&lt;span class="s1">&amp;#39;Onion Man 百萬追蹤粉絲團:goo.gl/Z5CSvw&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>
&lt;span class="s1">&amp;#39;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>
&lt;span class="s1">&amp;#39;最新阿文貼圖:https://reurl.cc/GxYjA&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>
&lt;span class="s1">&amp;#39;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>
&lt;span class="s1">&amp;#39;第一代阿文line貼圖:https://reurl.cc/Wroxx&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>
&lt;span class="s1">&amp;#39;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>
&lt;span class="s1">&amp;#39;洋蔥私生活IG:https://www.instagram.com/onionman__/&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>
&lt;span class="s1">&amp;#39;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>
&lt;span class="s1">&amp;#39;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>
&lt;span class="s1">&amp;#39;運動漫畫裡的中二老梗劇情&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>
&lt;span class="s1">&amp;#39;►第一集:https://youtu.be/cMoV1rPH35k&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>
&lt;span class="s1">&amp;#39;►第二集:https://youtu.be/iW7LM00lny0&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>
&lt;span class="s1">&amp;#39;►第三集:https://youtu.be/2G5wu61uCM0&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>
&lt;span class="s1">&amp;#39;►第四集:https://youtu.be/-rP1abYv8n4&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>
&lt;span class="s1">&amp;#39;&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>
&lt;span class="s1">&amp;#39;Onion Man 關鍵字:&lt;/span>&lt;span class="se">\n&lt;/span>&lt;span class="s1">&amp;#39;&lt;/span>
&lt;span class="s1">&amp;#39;中二 肥宅 單身漢 單身 魯蛇 屌絲 肥宅&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="s1">&amp;#39;標籤&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;onion&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;man&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;阿文&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;黑鳳梨&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;插畫&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;爆笑&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;搞笑&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;玩笑&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>&lt;span class="o">...&lt;/span>&lt;span class="s1">&amp;#39;綜藝大熱門&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;de&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;jun&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;上班不要看&amp;#39;&lt;/span>&lt;span class="p">],&lt;/span>
&lt;span class="s1">&amp;#39;標題&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s1">&amp;#39;Onion Man | 我不想出錢 但要裝闊&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="s1">&amp;#39;留言數&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="bp">None&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="s1">&amp;#39;網頁網址&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="s1">&amp;#39;https://www.youtube.com/watch?v=YculJhe_iPk&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="s1">&amp;#39;觀看次數&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="mi">555986&lt;/span>&lt;span class="p">}&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>* 我發現它 YouTube 好像無法取得留言數。🤔&lt;/p>
&lt;p>但它是需要透過影片網址來取得影片相關資訊，如果我們想要像&lt;a href="https://blog.jiatool.com/posts/youtube_spider_api/" target="_blank" rel="noopener">
上次
&lt;/a>一樣，針對某個頻道抓取最近的五部影片，可能就要先透過網路爬蟲取得網頁的方式來獲取影片網址，才可以使用了 youtube_dl 套件。&lt;/p>
&lt;h2 id="完整程式碼">完整程式碼&lt;/h2>
&lt;p>附上完整程式碼：&lt;a href="https://blog.jiatool.com/code/youtube_spider_dl.py" target="_blank" rel="noopener">
youtube_dl.py
&lt;/a>&lt;br />
(對超連結右鍵 &amp;gt; 另存連結為)&lt;/p>
&lt;h2 id="延伸練習">延伸練習&lt;/h2>
&lt;ol>
&lt;li>
&lt;p>在上方教學中，我們是透過影片網址取得影片資訊。&lt;br />
那你可以寫支程式自動抓取&lt;a href="https://www.youtube.com/feed/trending" target="_blank" rel="noopener">
發燒影片
&lt;/a>的前10名影片資訊嗎？&lt;/p>
&lt;/li>
&lt;li>
&lt;p>youtube_dl 套件最主要是用來從 YouTube 及其他多個網站下載影片，你何不來嘗試看看呢？&lt;/p>
&lt;/li>
&lt;/ol>
&lt;h2 id="結語">結語&lt;/h2>
&lt;p>如果你只是想取得影片的基本資訊，使用 youtube_dl 套件會比較容易哦~&lt;/p>
&lt;p>我有陸續寫一些網站的&lt;a href="https://blog.jiatool.com/series/Python%e7%b6%b2%e8%b7%af%e7%88%ac%e8%9f%b2%e5%af%a6%e4%be%8b/" target="_blank" rel="noopener">
Python網路爬蟲實例
&lt;/a>，如果你正好是剛開始想學爬蟲的新手、想知道某個網站如何爬取資料，或者遇到其他問題，歡迎過來參考和在底下留言~👇&lt;/p>
&lt;br/>
&lt;br/>
&lt;hr />
&lt;p>參考：&lt;br />
&lt;a href="https://github.com/ytdl-org/youtube-dl" target="_blank" rel="noopener">
youtube-dl GitHub
&lt;/a>&lt;/p>
&lt;br/>
&lt;blockquote>
&lt;p>有夢就去追啊，愣在原地做什麽。&lt;/p>
&lt;/blockquote></content:encoded><dc:creator>Jia</dc:creator><media:content url="https://blog.jiatool.comimages/cover/youtube_spider_dl.jpg" medium="image"><media:title type="html">featured image</media:title></media:content><category>Python</category><category>YouTube</category><category>網路爬蟲</category><category>Python網路爬蟲實例</category></item><item><title>[Python爬蟲實例] YouTube-使用 YouTube Data API</title><link>https://blog.jiatool.com/posts/youtube_spider_api/</link><pubDate>Sun, 01 Nov 2020 20:40:00 +0800</pubDate><author>jia@jiatool.com (Jia)</author><atom:modified>Thu, 03 Nov 2022 21:45:00 +0800</atom:modified><guid>https://blog.jiatool.com/posts/youtube_spider_api/</guid><description>前言 來到Python網路爬蟲實例系列 第四篇，本篇使用 Python 透過官方 YouTube Data API v3 來爬取 YouTube ，包含頻道資訊、影片清單、影片資訊等等資料。 從在 Google 雲端平台(G</description><content:encoded>&lt;h2 id="前言">前言&lt;/h2>
&lt;p>來到&lt;a href="https://blog.jiatool.com/series/Python%e7%b6%b2%e8%b7%af%e7%88%ac%e8%9f%b2%e5%af%a6%e4%be%8b/" target="_blank" rel="noopener">
Python網路爬蟲實例系列
&lt;/a>第四篇，本篇使用 Python 透過官方 YouTube Data API v3 來爬取 &lt;a href="https://www.youtube.com" target="_blank" rel="noopener">
YouTube
&lt;/a>，包含頻道資訊、影片清單、影片資訊等等資料。&lt;/p>
&lt;p>從在 Google 雲端平台(Google Cloud Platform)創建一個專案開始，包括獲取 API 授權憑證、取得 API key，到撰寫抓取程式皆會一步步講解如何操作。最後同樣會附上完整程式碼供參考。&lt;/p>
&lt;p>而如果你是想下載 YouTube 影片的話，本篇內容並不會提及，這部分可參考其他套件，例如 &lt;a href="https://github.com/nficano/pytube" target="_blank" rel="noopener">
pytube
&lt;/a>。&lt;br />
之前還有另外一個套件 Youtube-dl，但在寫這篇文章時發現美國唱片業協會（RIAA）點名 Youtube-dl 程式碼違反著作權法，並要求GitHub將它們移除(&lt;a href="https://www.ithome.com.tw/news/140720" target="_blank" rel="noopener">
來源
&lt;/a>)。&lt;/p>
&lt;p>備註：此文僅教育學習，切勿用作商業用途，個人實作皆屬個人行為，本作者不負任何法律責任&lt;/p>
&lt;h2 id="套件">套件&lt;/h2>
&lt;p>本次主要使用到的套件：&lt;/p>
&lt;ul>
&lt;li>Requests [&lt;a href="https://requests.readthedocs.io/en/master/" target="_blank" rel="noopener">
Doc
&lt;/a>] [&lt;a href="https://github.com/psf/requests" target="_blank" rel="noopener">
GitHub
&lt;/a>]&lt;/li>
&lt;/ul>
&lt;br/>
&lt;!--adsense-->
&lt;h2 id="流程">流程&lt;/h2>
&lt;p>要使用官方 YouTube Data API 抓取資料前，要先取得 API Key。&lt;/p>
&lt;p>先到 Google 雲端平台(Google Cloud Platform)創建一個專案，並將 YouTube Data API 加入置專案內，獲取 API 授權憑證、取得 API key。&lt;/p>
&lt;p>爬取資料這邊以 &lt;a href="https://www.youtube.com/c/%E5%85%AD%E6%8C%87%E6%B7%B5Huber" target="_blank" rel="noopener">
&lt;strong>六指淵 Huber&lt;/strong>
&lt;/a> 頻道當範例，到上傳的影片列表抓取最新的前五則影片，再到影片內取得影片相關資訊及留言。&lt;br />
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/youtube_spider_api/huber.jpg" alt="六指淵 Huber 頻道" data-caption="六指淵 Huber 頻道" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='800px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:800px;height:;"/>
&lt;figcaption style="text-align: center;">
六指淵 Huber 頻道
&lt;/figcaption>
&lt;/figure>&lt;/p>
&lt;h2 id="-取得-youtube-data-api-key">🔑 取得 YouTube Data API Key&lt;/h2>
&lt;p>先到&lt;a href="https://console.developers.google.com/" target="_blank" rel="noopener">
Google 雲端平台(Google Cloud Platform)
&lt;/a>創建一個專案，如果是第一次進來會跳出服務條款，點選同意後繼續。&lt;br />
點擊右上角顯示&amp;quot;建立專案&amp;quot;，或到上方的&amp;quot;選取專案&amp;quot;處建立。&lt;br />
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/youtube_spider_api/google_cloud_platform.jpg" alt="服務條款" data-caption="服務條款" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='800px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:800px;height:;"/>
&lt;figcaption style="text-align: center;">
服務條款
&lt;/figcaption>
&lt;/figure>&lt;/p>
&lt;p>右上角&amp;quot;新增專案&amp;quot;。&lt;br />
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/youtube_spider_api/create_project_1.jpg" alt="創建專案" data-caption="創建專案" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='800px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:800px;height:;"/>
&lt;figcaption style="text-align: center;">
創建專案
&lt;/figcaption>
&lt;/figure>&lt;/p>
&lt;p>輸入&amp;quot;專案名稱&amp;quot;，點選&amp;quot;建立&amp;quot;。&lt;br />
(專案ID也可以修改)&lt;br />
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/youtube_spider_api/create_project_2.png" alt="創建專案" data-caption="創建專案" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='600px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:600px;height:;"/>
&lt;figcaption style="text-align: center;">
創建專案
&lt;/figcaption>
&lt;/figure>&lt;/p>
&lt;p>等它跑完後會進到此頁面，接下來要將我們需要使用的 API 加進來啟用。&lt;br />
點選&amp;quot;啟用 API 和服務&amp;quot;。&lt;br />
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/youtube_spider_api/enable_api_1.jpg" alt="啟用 API" data-caption="啟用 API" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='800px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:800px;height:;"/>
&lt;figcaption style="text-align: center;">
啟用 API
&lt;/figcaption>
&lt;/figure>&lt;/p>
&lt;p>找到 YouTube Data API v3。&lt;br />
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/youtube_spider_api/enable_api_2.png" alt="啟用 API" data-caption="啟用 API" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='800px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:800px;height:;"/>
&lt;figcaption style="text-align: center;">
啟用 API
&lt;/figcaption>
&lt;/figure>&lt;/p>
&lt;p>點擊&amp;quot;啟用&amp;quot;。&lt;br />
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/youtube_spider_api/enable_api_3.png" alt="啟用 API" data-caption="啟用 API" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='700px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:700px;height:;"/>
&lt;figcaption style="text-align: center;">
啟用 API
&lt;/figcaption>
&lt;/figure>&lt;/p>
&lt;p>最後要建立憑證，並取得 API Key。&lt;br />
點擊右方&amp;quot;建立憑證&amp;quot;，或者點擊左方的&amp;quot;憑證&amp;quot;。&lt;br />
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/youtube_spider_api/create_credential_1.png" alt="建立憑證" data-caption="建立憑證" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='800px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:800px;height:;"/>
&lt;figcaption style="text-align: center;">
建立憑證
&lt;/figcaption>
&lt;/figure>&lt;/p>
&lt;p>如果你是點擊左方&amp;quot;憑證&amp;quot;，則依下圖所示建立 API 金鑰 (API Key)。&lt;br />
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/youtube_spider_api/create_credential_2.jpg" alt="建立憑證" data-caption="建立憑證" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='800px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:800px;height:;"/>
&lt;figcaption style="text-align: center;">
建立憑證
&lt;/figcaption>
&lt;/figure>&lt;/p>
&lt;p>如果你是點擊右方&amp;quot;建立憑證&amp;quot;，則依下圖選擇，並點擊&amp;quot;我需要那些憑證&amp;quot;。&lt;br />
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/youtube_spider_api/create_credential_3.png" alt="建立憑證" data-caption="建立憑證" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='760px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:760px;height:;"/>
&lt;figcaption style="text-align: center;">
建立憑證
&lt;/figcaption>
&lt;/figure>&lt;/p>
&lt;p>它會跳到此頁面，將 API 金鑰複製下來，待之後程式使用。&lt;br />
(也可以&amp;quot;為金鑰新增限制&amp;quot;)&lt;br />
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/youtube_spider_api/create_credential_4.png" alt="建立憑證" data-caption="建立憑證" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='740px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:740px;height:;"/>
&lt;figcaption style="text-align: center;">
建立憑證
&lt;/figcaption>
&lt;/figure>&lt;/p>
&lt;p>到這邊就完成 YouTube Data API Key 的取得，看似步驟很多，但實際操作過一遍就會了解了。&lt;/p>
&lt;p>* &lt;a href="https://developers.google.com/youtube/v3/getting-started#before-you-start" target="_blank" rel="noopener">
官方說明文檔
&lt;/a>&lt;/p>
&lt;h2 id="-爬蟲程式">📘 爬蟲程式&lt;/h2>
&lt;p>本次是直接使用 API，因此在送出請求時就不需要加入 header 中 User-Agent 欄位了。&lt;/p>
&lt;p>先在上方定義剛剛取得的 API Key，待之後發出請求時帶入。&lt;br />
(&lt;code>YOUR_YOUTUBE_API_KEY&lt;/code> 換成剛剛在上一步取得的 API Key)&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre class="chroma">&lt;code class="language-Python" data-lang="Python">&lt;span class="n">YOUTUBE_API_KEY&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s2">&amp;#34;YOUR_YOUTUBE_API_KEY&amp;#34;&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="api-說明">API 說明&lt;/h3>
&lt;p>在&lt;a href="https://developers.google.com/youtube/v3/docs" target="_blank" rel="noopener">
官方 API 文件
&lt;/a>內，可以查詢各種資源及各種請求方法。&lt;/p>
&lt;p>在本次程式中會用到幾種資源 (這邊都只需使用 list 方法)：&lt;/p>
&lt;ul>
&lt;li>&lt;a href="https://developers.google.com/youtube/v3/docs/channels/list" target="_blank" rel="noopener">
channels
&lt;/a>：取得頻道&amp;quot;上傳影片清單&amp;quot;的 ID&lt;/li>
&lt;li>&lt;a href="https://developers.google.com/youtube/v3/docs/playlistItems/list" target="_blank" rel="noopener">
playlistItems
&lt;/a>：取得清單中的影片列表&lt;/li>
&lt;li>&lt;a href="https://developers.google.com/youtube/v3/docs/videos/list" target="_blank" rel="noopener">
videos
&lt;/a>：取得影片資訊&lt;/li>
&lt;li>&lt;a href="https://developers.google.com/youtube/v3/docs/commentThreads/list" target="_blank" rel="noopener">
commentThreads
&lt;/a>：取得影片底下留言&lt;/li>
&lt;/ul>
&lt;p>本教學都只使用到 list 方法(GET)，因此網址串好後可以直接貼到瀏覽器上測試，觀看它回傳的資料。&lt;/p>
&lt;br>
&lt;p>因為每一次送出請求皆需要帶上 API Key，而且回傳資料要轉換JSON，所以可以另外寫一個用於組合網址、請求的函式，也可在裡面做當請求失敗的處理。&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;span class="lnt">9
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre class="chroma">&lt;code class="language-Python" data-lang="Python">&lt;span class="k">def&lt;/span> &lt;span class="nf">get_html_to_json&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">path&lt;/span>&lt;span class="p">):&lt;/span>
&lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;組合 URL 後 GET 網頁並轉換成 JSON&amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;span class="n">api_url&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="s2">&amp;#34;{self.base_url}{path}&amp;amp;key={self.api_key}&amp;#34;&lt;/span>
&lt;span class="n">r&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">requests&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">api_url&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="k">if&lt;/span> &lt;span class="n">r&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">status_code&lt;/span> &lt;span class="o">==&lt;/span> &lt;span class="n">requests&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">codes&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">ok&lt;/span>&lt;span class="p">:&lt;/span>
&lt;span class="n">data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">r&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">json&lt;/span>&lt;span class="p">()&lt;/span>
&lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;span class="n">data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="bp">None&lt;/span>
&lt;span class="k">return&lt;/span> &lt;span class="n">data&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;p>* 為了較清楚的了解流程，以下範例程式內沒有加入太多的例外處理。&lt;/p>
&lt;h3 id="取得頻道上傳影片清單的-id">取得頻道&amp;quot;上傳影片&amp;quot;清單的 ID&lt;/h3>
&lt;p>想要抓取頻道內上傳的影片前，需要先抓到&amp;quot;上傳影片&amp;quot;清單的 ID，再用此 ID 去取的影片清單。&lt;/p>
&lt;p>使用&lt;a href="https://developers.google.com/youtube/v3/docs/channels/list" target="_blank" rel="noopener">
channels
&lt;/a>路徑來取得，需帶上&amp;quot;id&amp;quot;、&amp;quot;key&amp;quot;、&amp;quot;part&amp;quot;等查詢參數。&lt;br />
&lt;code>id&lt;/code> 代表頻道 ID；&lt;code>key&lt;/code> 代表我們的 API Key；&lt;code>part&lt;/code> 代表想取得的資源屬性。&lt;/p>
&lt;p>頻道ID的取得方式可以先到頻道首頁，觀察網址後方帶的數值，例如：&lt;br />
&lt;code>https://www.youtube.com/channel/UC7ia-A8gma8qcdC6GDcjwsQ&lt;/code>&lt;br />
&amp;quot;channel/&amp;quot;後方的 &lt;code>UC7ia-A8gma8qcdC6GDcjwsQ&lt;/code> 就代表此頻道的 ID。&lt;/p>
&lt;p>不過有時會發現網址是呈現以下形式：&lt;br />
&lt;code>https://www.youtube.com/c/六指淵Huber&lt;/code>&lt;br />
別擔心，此時隨便點擊頻道底下的其中一支影片，在點中間的頻道名稱進入後，一樣即可看到網址後方的數值。&lt;br />
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/youtube_spider_api/channel_id.jpg" alt="如何取得頻道 ID" data-caption="如何取得頻道 ID" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='800px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:800px;height:;"/>
&lt;figcaption style="text-align: center;">
如何取得頻道 ID
&lt;/figcaption>
&lt;/figure>&lt;/p>
&lt;p>至於&amp;quot;part&amp;quot;需帶什麼數值可以參考&lt;a href="https://developers.google.com/youtube/v3/docs/channels/list#parameters" target="_blank" rel="noopener">
官方 API 文檔
&lt;/a>說明，也可以一個一個嘗試看看會回傳什麼資料。&lt;br />
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/youtube_spider_api/parameters.jpg" alt="part 查詢參數" data-caption="part 查詢參數" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='600px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:600px;height:;"/>
&lt;figcaption style="text-align: center;">
part 查詢參數
&lt;/figcaption>
&lt;/figure>&lt;/p>
&lt;p>因為請求方式是使用 &lt;code>GET&lt;/code>，因此可以直接貼到瀏覽器上測試。&lt;br />
&lt;code>https://www.googleapis.com/youtube/v3/channels?part=contentDetails&amp;amp;id=UC7ia-A8gma8qcdC6GDcjwsQ&amp;amp;key={YOUR_API_KEY}&lt;/code>&lt;br />
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/youtube_spider_api/channels.png" alt="取得上傳影片清單的 ID" data-caption="取得上傳影片清單的 ID" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='400px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:400px;height:;"/>
&lt;figcaption style="text-align: center;">
取得上傳影片清單的 ID
&lt;/figcaption>
&lt;/figure>&lt;br />
==&amp;gt; &lt;a href="https://blog.jiatool.com/code/youtube_api/channels.json" target="_blank" rel="noopener">
回應資料範例
&lt;/a>&lt;/p>
&lt;p>其中 &lt;code>uploads&lt;/code> 後面那串就是此頻道&amp;quot;上傳影片&amp;quot;清單的 ID，這邊是 &lt;code>UU7ia-A8gma8qcdC6GDcjwsQ&lt;/code>。&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre class="chroma">&lt;code>&lt;span class="lnt">1
&lt;/span>&lt;span class="lnt">2
&lt;/span>&lt;span class="lnt">3
&lt;/span>&lt;span class="lnt">4
&lt;/span>&lt;span class="lnt">5
&lt;/span>&lt;span class="lnt">6
&lt;/span>&lt;span class="lnt">7
&lt;/span>&lt;span class="lnt">8
&lt;/span>&lt;span class="lnt">9
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre class="chroma">&lt;code class="language-Python" data-lang="Python">&lt;span class="k">def&lt;/span> &lt;span class="nf">get_channel_uploads_id&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">channel_id&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">part&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;contentDetails&amp;#39;&lt;/span>&lt;span class="p">):&lt;/span>
&lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;取得頻道上傳影片清單的ID&amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;span class="n">path&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="s1">&amp;#39;channels?part={part}&amp;amp;id={channel_id}&amp;#39;&lt;/span>
&lt;span class="n">data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_html_to_json&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="k">try&lt;/span>&lt;span class="p">:&lt;/span>
&lt;span class="n">uploads_id&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">data&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;items&amp;#39;&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="s1">&amp;#39;contentDetails&amp;#39;&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="s1">&amp;#39;relatedPlaylists&amp;#39;&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="s1">&amp;#39;uploads&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;span class="k">except&lt;/span> &lt;span class="ne">KeyError&lt;/span>&lt;span class="p">:&lt;/span>
&lt;span class="n">uploads_id&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="bp">None&lt;/span>
&lt;span class="k">return&lt;/span> &lt;span class="n">uploads_id&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="取得清單中的影片列表">取得清單中的影片列表&lt;/h3>
&lt;p>好的，接下來取得&amp;quot;上傳影片&amp;quot;清單的影片吧~&lt;/p>
&lt;p>使用&lt;a href="https://developers.google.com/youtube/v3/docs/playlistItems/list" target="_blank" rel="noopener">
playlistItems
&lt;/a>路徑來取得，需帶上&amp;quot;playlistId&amp;quot;、&amp;quot;key&amp;quot;、&amp;quot;part&amp;quot;等查詢參數。&lt;br />
&lt;code>playlistId&lt;/code> 代表播放列表 ID；&lt;code>key&lt;/code> 代表我們的 API Key；&lt;code>part&lt;/code> 代表想取得的資源屬性。&lt;/p>
&lt;p>這邊代的參數大部分與上方雷同，可以自行參考官方 API 文檔說明，就不多說介紹了。&lt;br />
我們要抓此頻道上傳影片，所以 &lt;code>playlistId&lt;/code> 帶入上一步抓到的&amp;quot;上傳影片&amp;quot;清單的 ID。&lt;/p>
&lt;p>&lt;code>https://www.googleapis.com/youtube/v3/playlistItems?part=contentDetails&amp;amp;playlistId=UU7ia-A8gma8qcdC6GDcjwsQ&amp;amp;key={YOUR_API_KEY}&lt;/code>&lt;br />
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/youtube_spider_api/playlistItems.png" alt="取得影片ID" data-caption="取得影片ID" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='400px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:400px;height:;"/>
&lt;figcaption style="text-align: center;">
取得影片ID
&lt;/figcaption>
&lt;/figure>&lt;br />
==&amp;gt; &lt;a href="https://blog.jiatool.com/code/youtube_api/playlistItems.json" target="_blank" rel="noopener">
回應資料範例
&lt;/a>&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre class="chroma">&lt;code class="language-Python" data-lang="Python">&lt;span class="k">def&lt;/span> &lt;span class="nf">get_playlist&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">playlist_id&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">part&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;contentDetails&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">max_results&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">10&lt;/span>&lt;span class="p">):&lt;/span>
&lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;取得影片清單ID中的影片&amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;span class="n">path&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="s1">&amp;#39;playlistItems?part={part}&amp;amp;playlistId={playlist_id}&amp;amp;maxResults={max_results}&amp;#39;&lt;/span>
&lt;span class="n">data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_html_to_json&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="k">if&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="n">data&lt;/span>&lt;span class="p">:&lt;/span>
&lt;span class="k">return&lt;/span> &lt;span class="p">[]&lt;/span>
&lt;span class="n">video_ids&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[]&lt;/span>
&lt;span class="k">for&lt;/span> &lt;span class="n">data_item&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">data&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;items&amp;#39;&lt;/span>&lt;span class="p">]:&lt;/span>
&lt;span class="n">video_ids&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">append&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">data_item&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;contentDetails&amp;#39;&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="s1">&amp;#39;videoId&amp;#39;&lt;/span>&lt;span class="p">])&lt;/span>
&lt;span class="k">return&lt;/span> &lt;span class="n">video_ids&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="取得影片資訊">取得影片資訊&lt;/h3>
&lt;p>針對每一支影片，來取得其影片相關資訊吧~&lt;/p>
&lt;p>使用&lt;a href="https://developers.google.com/youtube/v3/docs/videos/list" target="_blank" rel="noopener">
videos
&lt;/a>路徑來取得，需帶上&amp;quot;id&amp;quot;、&amp;quot;key&amp;quot;、&amp;quot;part&amp;quot;等查詢參數。&lt;br />
&lt;code>id&lt;/code> 代表影片 ID；&lt;code>key&lt;/code> 代表我們的 API Key；&lt;code>part&lt;/code> 代表想取得的資源屬性。&lt;/p>
&lt;p>&lt;code>https://www.googleapis.com/youtube/v3/videos?part=snippet,statistics&amp;amp;id=lM7ltxkXE40&amp;amp;key={YOUR_API_KEY}&lt;/code>&lt;br />
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/youtube_spider_api/videos.png" alt="取得影片資訊" data-caption="取得影片資訊" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='500px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:500px;height:;"/>
&lt;figcaption style="text-align: center;">
取得影片資訊
&lt;/figcaption>
&lt;/figure>&lt;br />
==&amp;gt; &lt;a href="https://blog.jiatool.com/code/youtube_api/videos.json" target="_blank" rel="noopener">
回應資料範例
&lt;/a>&lt;/p>
&lt;p>回傳資料有影片標題、頻道名稱、發布時間、縮圖網址、觀看數、留言數&amp;hellip;&amp;hellip;等等許多相關資訊。&lt;/p>
&lt;p>* 謝謝網友提醒，&lt;code>dislikeCount&lt;/code> 資訊現在無法取得了，這應該也是因應 YouTube 現在不能看到 Dislike 的數量了。&lt;/p>
&lt;blockquote>
&lt;p>Note: The statistics.dislikeCount property was made private as of December 13, 2021. This means that the property is included in an API response only if the API request was authenticated by the video owner. See the revision history for more information.&lt;/p>
&lt;/blockquote>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre class="chroma">&lt;code class="language-Python" data-lang="Python">&lt;span class="k">def&lt;/span> &lt;span class="nf">get_video&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">video_id&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">part&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;snippet,statistics&amp;#39;&lt;/span>&lt;span class="p">):&lt;/span>
&lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;取得影片資訊&amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;span class="n">path&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="s1">&amp;#39;videos?part={part}&amp;amp;id={video_id}&amp;#39;&lt;/span>
&lt;span class="n">data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_html_to_json&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="k">if&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="n">data&lt;/span>&lt;span class="p">:&lt;/span>
&lt;span class="k">return&lt;/span> &lt;span class="p">{}&lt;/span>
&lt;span class="c1"># 以下整理並提取需要的資料&lt;/span>
&lt;span class="n">data_item&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">data&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;items&amp;#39;&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="mi">0&lt;/span>&lt;span class="p">]&lt;/span>
&lt;span class="k">try&lt;/span>&lt;span class="p">:&lt;/span>
&lt;span class="n">time_&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">datetime&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">strptime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">data_item&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;snippet&amp;#39;&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="s1">&amp;#39;publishedAt&amp;#39;&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="s1">&amp;#39;%Y-%m-&lt;/span>&lt;span class="si">%d&lt;/span>&lt;span class="s1">T%H:%M:%SZ&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="k">except&lt;/span> &lt;span class="ne">ValueError&lt;/span>&lt;span class="p">:&lt;/span>
&lt;span class="c1"># 日期格式錯誤&lt;/span>
&lt;span class="n">time_&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="bp">None&lt;/span>
&lt;span class="n">url_&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="s2">&amp;#34;https://www.youtube.com/watch?v={data_item[&amp;#39;id&amp;#39;]}&amp;#34;&lt;/span>
&lt;span class="n">info&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">{&lt;/span>
&lt;span class="s1">&amp;#39;id&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">data_item&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;id&amp;#39;&lt;/span>&lt;span class="p">],&lt;/span>
&lt;span class="s1">&amp;#39;channelTitle&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">data_item&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;snippet&amp;#39;&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="s1">&amp;#39;channelTitle&amp;#39;&lt;/span>&lt;span class="p">],&lt;/span>
&lt;span class="s1">&amp;#39;publishedAt&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">time_&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="s1">&amp;#39;video_url&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">url_&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="s1">&amp;#39;title&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">data_item&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;snippet&amp;#39;&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="s1">&amp;#39;title&amp;#39;&lt;/span>&lt;span class="p">],&lt;/span>
&lt;span class="s1">&amp;#39;description&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">data_item&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;snippet&amp;#39;&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="s1">&amp;#39;description&amp;#39;&lt;/span>&lt;span class="p">],&lt;/span>
&lt;span class="s1">&amp;#39;likeCount&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">data_item&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;statistics&amp;#39;&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="s1">&amp;#39;likeCount&amp;#39;&lt;/span>&lt;span class="p">],&lt;/span>
&lt;span class="c1"># &amp;#39;dislikeCount&amp;#39;: data_item[&amp;#39;statistics&amp;#39;][&amp;#39;dislikeCount&amp;#39;],&lt;/span>
&lt;span class="s1">&amp;#39;commentCount&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">data_item&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;statistics&amp;#39;&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="s1">&amp;#39;commentCount&amp;#39;&lt;/span>&lt;span class="p">],&lt;/span>
&lt;span class="s1">&amp;#39;viewCount&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">data_item&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;statistics&amp;#39;&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="s1">&amp;#39;viewCount&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;span class="p">}&lt;/span>
&lt;span class="k">return&lt;/span> &lt;span class="n">info&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="取得留言資訊">取得留言資訊&lt;/h3>
&lt;p>那該如何取得影片底下的留言呢？&lt;/p>
&lt;p>使用&lt;a href="https://developers.google.com/youtube/v3/docs/commentThreads/list" target="_blank" rel="noopener">
commentThreads
&lt;/a>路徑來取得，需帶上&amp;quot;videoId&amp;quot;、&amp;quot;key&amp;quot;、&amp;quot;part&amp;quot;等查詢參數。&lt;br />
&lt;code>videoId&lt;/code> 代表播放列表 ID；&lt;code>key&lt;/code> 代表我們的 API Key；&lt;code>part&lt;/code> 代表想取得的資源屬性。&lt;/p>
&lt;p>&lt;code>https://www.googleapis.com/youtube/v3/commentThreads?part=snippet&amp;amp;videoId=lM7ltxkXE40&amp;amp;key={YOUR_API_KEY}&lt;/code>&lt;br />
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/youtube_spider_api/commentThreads.png" alt="取得留言資訊" data-caption="取得留言資訊" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='500px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:500px;height:;"/>
&lt;figcaption style="text-align: center;">
取得留言資訊
&lt;/figcaption>
&lt;/figure>&lt;br />
==&amp;gt; &lt;a href="https://blog.jiatool.com/code/youtube_api/commentThreads.json" target="_blank" rel="noopener">
回應資料範例
&lt;/a>&lt;/p>
&lt;div class="highlight">&lt;div class="chroma">
&lt;table class="lntable">&lt;tr>&lt;td class="lntd">
&lt;pre class="chroma">&lt;code>&lt;span class="lnt"> 1
&lt;/span>&lt;span class="lnt"> 2
&lt;/span>&lt;span class="lnt"> 3
&lt;/span>&lt;span class="lnt"> 4
&lt;/span>&lt;span class="lnt"> 5
&lt;/span>&lt;span class="lnt"> 6
&lt;/span>&lt;span class="lnt"> 7
&lt;/span>&lt;span class="lnt"> 8
&lt;/span>&lt;span class="lnt"> 9
&lt;/span>&lt;span class="lnt">10
&lt;/span>&lt;span class="lnt">11
&lt;/span>&lt;span class="lnt">12
&lt;/span>&lt;span class="lnt">13
&lt;/span>&lt;span class="lnt">14
&lt;/span>&lt;span class="lnt">15
&lt;/span>&lt;span class="lnt">16
&lt;/span>&lt;span class="lnt">17
&lt;/span>&lt;span class="lnt">18
&lt;/span>&lt;span class="lnt">19
&lt;/span>&lt;span class="lnt">20
&lt;/span>&lt;span class="lnt">21
&lt;/span>&lt;span class="lnt">22
&lt;/span>&lt;span class="lnt">23
&lt;/span>&lt;span class="lnt">24
&lt;/span>&lt;span class="lnt">25
&lt;/span>&lt;span class="lnt">26
&lt;/span>&lt;span class="lnt">27
&lt;/span>&lt;span class="lnt">28
&lt;/span>&lt;span class="lnt">29
&lt;/span>&lt;span class="lnt">30
&lt;/span>&lt;span class="lnt">31
&lt;/span>&lt;span class="lnt">32
&lt;/span>&lt;span class="lnt">33
&lt;/span>&lt;span class="lnt">34
&lt;/span>&lt;span class="lnt">35
&lt;/span>&lt;span class="lnt">36
&lt;/span>&lt;span class="lnt">37
&lt;/span>&lt;span class="lnt">38
&lt;/span>&lt;span class="lnt">39
&lt;/span>&lt;/code>&lt;/pre>&lt;/td>
&lt;td class="lntd">
&lt;pre class="chroma">&lt;code class="language-Python" data-lang="Python">&lt;span class="k">def&lt;/span> &lt;span class="nf">get_comments&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="bp">self&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">video_id&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">page_token&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">part&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="s1">&amp;#39;snippet&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">max_results&lt;/span>&lt;span class="o">=&lt;/span>&lt;span class="mi">100&lt;/span>&lt;span class="p">):&lt;/span>
&lt;span class="s2">&amp;#34;&amp;#34;&amp;#34;取得影片留言&amp;#34;&amp;#34;&amp;#34;&lt;/span>
&lt;span class="n">path&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">f&lt;/span>&lt;span class="s1">&amp;#39;commentThreads?part={part}&amp;amp;videoId={video_id}&amp;amp;maxResults={max_results}&amp;amp;pageToken={page_token}&amp;#39;&lt;/span>
&lt;span class="n">data&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="bp">self&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get_html_to_json&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">path&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="k">if&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="n">data&lt;/span>&lt;span class="p">:&lt;/span>
&lt;span class="k">return&lt;/span> &lt;span class="p">[],&lt;/span> &lt;span class="s1">&amp;#39;&amp;#39;&lt;/span>
&lt;span class="c1"># 下一頁的數值&lt;/span>
&lt;span class="n">next_page_token&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">data&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;nextPageToken&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="c1"># 以下整理並提取需要的資料&lt;/span>
&lt;span class="n">comments&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="p">[]&lt;/span>
&lt;span class="k">for&lt;/span> &lt;span class="n">data_item&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">data&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;items&amp;#39;&lt;/span>&lt;span class="p">]:&lt;/span>
&lt;span class="n">data_item&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">data_item&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;snippet&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;span class="n">top_comment&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">data_item&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;topLevelComment&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;span class="k">try&lt;/span>&lt;span class="p">:&lt;/span>
&lt;span class="n">time_&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">datetime&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">strptime&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">top_comment&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;snippet&amp;#39;&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="s1">&amp;#39;publishedAt&amp;#39;&lt;/span>&lt;span class="p">],&lt;/span> &lt;span class="s1">&amp;#39;%Y-%m-&lt;/span>&lt;span class="si">%d&lt;/span>&lt;span class="s1">T%H:%M:%SZ&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="k">except&lt;/span> &lt;span class="ne">ValueError&lt;/span>&lt;span class="p">:&lt;/span>
&lt;span class="c1"># 日期格式錯誤&lt;/span>
&lt;span class="n">time_&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="bp">None&lt;/span>
&lt;span class="k">if&lt;/span> &lt;span class="s1">&amp;#39;authorChannelId&amp;#39;&lt;/span> &lt;span class="ow">in&lt;/span> &lt;span class="n">top_comment&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;snippet&amp;#39;&lt;/span>&lt;span class="p">]:&lt;/span>
&lt;span class="n">ru_id&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">top_comment&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;snippet&amp;#39;&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="s1">&amp;#39;authorChannelId&amp;#39;&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="s1">&amp;#39;value&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>
&lt;span class="k">else&lt;/span>&lt;span class="p">:&lt;/span>
&lt;span class="n">ru_id&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;&amp;#39;&lt;/span>
&lt;span class="n">ru_name&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="n">top_comment&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;snippet&amp;#39;&lt;/span>&lt;span class="p">]&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">get&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="s1">&amp;#39;authorDisplayName&amp;#39;&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="s1">&amp;#39;&amp;#39;&lt;/span>&lt;span class="p">)&lt;/span>
&lt;span class="k">if&lt;/span> &lt;span class="ow">not&lt;/span> &lt;span class="n">ru_name&lt;/span>&lt;span class="p">:&lt;/span>
&lt;span class="n">ru_name&lt;/span> &lt;span class="o">=&lt;/span> &lt;span class="s1">&amp;#39;&amp;#39;&lt;/span>
&lt;span class="n">comments&lt;/span>&lt;span class="o">.&lt;/span>&lt;span class="n">append&lt;/span>&lt;span class="p">({&lt;/span>
&lt;span class="s1">&amp;#39;reply_id&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">top_comment&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;id&amp;#39;&lt;/span>&lt;span class="p">],&lt;/span>
&lt;span class="s1">&amp;#39;ru_id&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">ru_id&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="s1">&amp;#39;ru_name&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">ru_name&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="s1">&amp;#39;reply_time&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">time_&lt;/span>&lt;span class="p">,&lt;/span>
&lt;span class="s1">&amp;#39;reply_content&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="n">top_comment&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;snippet&amp;#39;&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="s1">&amp;#39;textOriginal&amp;#39;&lt;/span>&lt;span class="p">],&lt;/span>
&lt;span class="s1">&amp;#39;rm_positive&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nb">int&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">top_comment&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;snippet&amp;#39;&lt;/span>&lt;span class="p">][&lt;/span>&lt;span class="s1">&amp;#39;likeCount&amp;#39;&lt;/span>&lt;span class="p">]),&lt;/span>
&lt;span class="s1">&amp;#39;rn_comment&amp;#39;&lt;/span>&lt;span class="p">:&lt;/span> &lt;span class="nb">int&lt;/span>&lt;span class="p">(&lt;/span>&lt;span class="n">data_item&lt;/span>&lt;span class="p">[&lt;/span>&lt;span class="s1">&amp;#39;totalReplyCount&amp;#39;&lt;/span>&lt;span class="p">])&lt;/span>
&lt;span class="p">})&lt;/span>
&lt;span class="k">return&lt;/span> &lt;span class="n">comments&lt;/span>&lt;span class="p">,&lt;/span> &lt;span class="n">next_page_token&lt;/span>
&lt;/code>&lt;/pre>&lt;/td>&lt;/tr>&lt;/table>
&lt;/div>
&lt;/div>&lt;h3 id="其他查詢參數">其他查詢參數&lt;/h3>
&lt;p>還有其他常用的查詢參數：&lt;/p>
&lt;p>像是 &lt;code>maxResults&lt;/code> 可以限制回傳筆數，搭配 commentThreads 帶入 &lt;code>maxResults=10&lt;/code> 代表最多回傳 10 筆留言。&lt;/p>
&lt;p>又例如 &lt;code>pageToken&lt;/code> 是用來換頁的，什麼意思呢？&lt;br />
像是 API 有限制留言最多一次只能抓 100 筆留言，就算你帶入 &lt;code>maxResults=200&lt;/code> 也只能抓到 100 筆。&lt;br />
但在回傳的資料中可以發現一個 &lt;code>nextPageToken&lt;/code> 欄位，代表你再用一樣的網址請求一次，帶上 &lt;code>pageToken=QURTSl9pMmhMYktBc25xOHZtZTg3enJBTFFXNTFPbldJY05zTFFTTjdMM25VYThmdTBwWS1CNGFPZm1kQUU0WkJac0dWZkw3cWI2V1owOA==&lt;/code> 就能取得下一頁的資料(例如：101~200 筆留言)。&lt;br />
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/youtube_spider_api/nextPageToken.png" alt="nextPageToken 欄位" data-caption="nextPageToken 欄位" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='800px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:800px;height:;"/>
&lt;figcaption style="text-align: center;">
nextPageToken 欄位
&lt;/figcaption>
&lt;/figure>&lt;br />
在像是有多個留言(commentThreads)或多支影片(playlistItems)時需要用到。&lt;br />
以上一段取得留言為例，會像是如下：&lt;br />
&lt;code>https://www.googleapis.com/youtube/v3/commentThreads?part=snippet&amp;amp;videoId=lM7ltxkXE40&amp;amp;pageToken=QURTSl9pMmhMYktBc25xOHZtZTg3enJBTFFXNTFPbldJY05zTFFTTjdMM25VYThmdTBwWS1CNGFPZm1kQUU0WkJac0dWZkw3cWI2V1owOA==&amp;amp;key={YOUR_API_KEY}&lt;/code>&lt;/p>
&lt;br/>
&lt;!--adsense-->
&lt;h2 id="完整程式碼">完整程式碼&lt;/h2>
&lt;p>附上完整程式碼：&lt;a href="https://blog.jiatool.com/code/youtube_spider_api.py" target="_blank" rel="noopener">
youtube_spider_api.py
&lt;/a>&lt;br />
(對超連結右鍵 &amp;gt; 另存連結為)&lt;/p>
&lt;h2 id="注意事項">注意事項&lt;/h2>
&lt;p>要注意的是這個 API 有額度的限制，為每天 10,000 個單位(&lt;a href="https://developers.google.com/youtube/v3/getting-started#quota" target="_blank" rel="noopener">
官方說明
&lt;/a>)，如果想將影片的留言都抓下來，可能就會耗費較多額度。&lt;br />
像上方使用的查詢都是消耗 1 單位。&lt;/p>
&lt;p>在&lt;a href="https://console.cloud.google.com/apis/api/youtube.googleapis.com/quotas" target="_blank" rel="noopener">
配額頁面
&lt;/a>可以查看此專案目前耗費的單位。&lt;br />
&lt;figure >
&lt;img data-src="https://res.cloudinary.com/jiablog/youtube_spider_api/quotas.png" alt="配額頁面" data-caption="配額頁面" src="data:image/svg+xml,%0A%3Csvg xmlns='http://www.w3.org/2000/svg' width='800px' height='' viewBox='0 0 24 24'%3E%3Cpath fill='none' d='M0 0h24v24H0V0z'/%3E%3Cpath fill='%23aaa' d='M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-1 16H6c-.55 0-1-.45-1-1V6c0-.55.45-1 1-1h12c.55 0 1 .45 1 1v12c0 .55-.45 1-1 1zm-4.44-6.19l-2.35 3.02-1.56-1.88c-.2-.25-.58-.24-.78.01l-1.74 2.23c-.26.33-.02.81.39.81h8.98c.41 0 .65-.47.4-.8l-2.55-3.39c-.19-.26-.59-.26-.79 0z'/%3E%3C/svg%3E" class="lazyload" style="width:800px;height:;"/>
&lt;figcaption style="text-align: center;">
配額頁面
&lt;/figcaption>
&lt;/figure>&lt;/p>
&lt;h2 id="延伸練習">延伸練習&lt;/h2>
&lt;ol>
&lt;li>
&lt;p>在上方教學中，影片清單只有取得前 5 則影片，那如果我想取得前 100 則影片呢？是不是會遇到什麼問題？需不需要加上什麼參數？&lt;br />
* 提示：參考教學中爬取留言的方法，使用 &lt;code>pageToken&lt;/code> 參數。&lt;/p>
&lt;/li>
&lt;li>
&lt;p>上方教學只說抓取留言，那我如何想取得留言的回覆呢？是要帶入什麼參數嗎？或者是使用不同的方法？&lt;br />
* 提示：&lt;code>part&lt;/code> 中的 &lt;a href="https://developers.google.com/youtube/v3/docs/commentThreads/list#parameters" target="_blank" rel="noopener">
replies
&lt;/a>，或&lt;a href="https://developers.google.com/youtube/v3/docs/comments/list" target="_blank" rel="noopener">
Comments
&lt;/a>資源。&lt;/p>
&lt;/li>
&lt;/ol>
&lt;h2 id="結語">結語&lt;/h2>
&lt;p>我會陸續寫一些網站的&lt;a href="https://blog.jiatool.com/series/Python%e7%b6%b2%e8%b7%af%e7%88%ac%e8%9f%b2%e5%af%a6%e4%be%8b/" target="_blank" rel="noopener">
Python網路爬蟲實例
&lt;/a>，如果你正好是剛開始想學爬蟲的新手、想知道某個網站如何爬取資料，或者遇到其他問題，歡迎過來參考和在底下留言~👇&lt;/p>
&lt;br/>
&lt;br/>
&lt;hr />
&lt;p>參考：&lt;br />
&lt;a href="https://developers.google.com/youtube/v3" target="_blank" rel="noopener">
官方 YouTube Data API 範例文檔
&lt;/a>&lt;/p>
&lt;br/>
&lt;blockquote>
&lt;p>每一個成功者都有一個開始。&lt;br />
勇於開始，才能找到成功的路。&lt;/p>
&lt;/blockquote></content:encoded><dc:creator>Jia</dc:creator><media:content url="https://blog.jiatool.comimages/cover/youtube_spider_api.jpg" medium="image"><media:title type="html">featured image</media:title></media:content><category>Python</category><category>YouTube</category><category>API</category><category>網路爬蟲</category><category>Python網路爬蟲實例</category></item></channel></rss>