!注意自述文件尚未更新
基於 Quart 的 API,用於下載 YouTube 視訊和音訊、檢索視訊元資料以及處理字幕。此 API 可讓您以程式設計方式與 YouTube 內容進行交互,利用後台任務來管理臨時檔案並提供高效的下載。
下載影片和音訊:檢索具有指定解析度和位元率的內容。
檢索影片元資料:取得標題、觀看次數和頻道資訊等詳細資訊。
處理字幕:以 SRT 格式取得並儲存字幕。
檢查儲存:下載前確保有足夠的儲存空間。
Python 3.7+
FFmpeg
requirements.txt依賴項
克隆儲存庫
git 克隆 https://github.com/DannyAkintunde/YouTube-dl-apicd Youtube-dl-api
運行安裝腳本
執行install.sh腳本安裝Python依賴和系統套件:
chmod +x install.sh ./安裝.sh
該腳本將:
安裝requirements.txt中列出的Python依賴項
更新包列表
安裝 FFmpeg
驗證 FFmpeg 安裝
調整settings.py檔案中的配置設定:
DEBUG :啟用或停用調試模式(預設值: True )。
PROXY :以 http_proxy,https_proxy 格式設定代理程式。
AUTH :設定身份驗證(預設值: False )。
ACCESS_TOKEN :用於存取受保護資源的令牌(如果AUTH為True則需要)。
REFRESH_TOKEN :用於刷新存取的令牌(如果AUTH為True則需要)。
EXPIRES :存取權杖的到期時間(如果AUTH為True則需要)。
VISITOR_DATA :訪客追蹤資料(如果AUTH為True則需要)。
PO_TOKEN :採購訂單的令牌(如果AUTH為True則需要)。
MAX_DOWNLOAD_SIZE :下載的最大檔案大小(預設值: 2 GiB )。
MAX_SEARCH_AMOUNT :影片搜尋結果的最大數量(預設值: 25 )。
MIN_SEARCH_AMOUNT :影片搜尋結果的最少數量(預設值: 2 )。
DEFAULT_SEARCH_AMOUNT :影片搜尋結果的預設數量(預設值: 20 )。
EXPIRATION_DELAY :臨時檔案過期的延遲(預設值: 1800 seconds )。
TEMP_DIR :儲存暫存檔案的目錄(預設值: 'temp_files' )。
AUTH_DIR :儲存驗證檔案的路徑(預設值: 'auth' )。
AUTH_FILE_NAME :驗證檔案的名稱(預設值: 'temp.json' )。
CODECS :要使用的視訊和音訊編解碼器清單(預設值: 'avc1,aac' )。
取得/ping
描述:檢查 API 狀態。
回覆:
{「消息」:「乒乓球」} 200 OK : {"message": "pong"}
獲取/search
描述:根據查詢搜尋 YouTube 影片。
查詢參數:
q或query :搜尋查詢。
請求範例:
GET /search?q=python+教程
回應範例:
{
{“長度”:20,“結果”:[
{ "accessibility": {"duration": "6 小時, 14 分鐘, 7 秒","title": "Python 教程- Python 初學者完整課程(與Mosh 一起編程)5 年前6 小時14 分鐘41,059,791 瀏覽" } , "channel": {"id": "UCWv7vMbMWH4-V0ZXdmDpPBA","link": "https://www.youtube.com/channel/UCWv7vMbMWH4-V0ZXdmDpPBA","name": "用Mosh 程式設計", "縮圖」:[
{“高度”:68,“網址”:“https://yt3.ggpht.com/lCeCb47hCbXWFa0I4gi8uWDHzWSs7sjK4FDmk7lFEUMRNp6QRzIQOkwaKhwv7eNKZacRI2uR = ffs680-cffffx”
]
}, "描述片段": [
{ "text": "成為一個"},
{ "bold": true, "text": "Python"},
{ "text": "親!這個全面"},
{ "bold": true, "text": "教學"},
{ "text": "帶你從初學者到英雄,涵蓋基礎知識、機器學習和......"}
]、「持續時間」:「6:14:07」、「id」:「_uQrJ0TkZlc」、「連結」:「https://www.youtube.com/watch?v=_uQrJ0TkZlc」、「發佈時間」: 「5幾年前", "richThumbnail": {"height": 180,"url": "https://i.ytimg.com/an_webp/_uQrJ0TkZlc/mqdefault_6s.webp?du=3000&sqp=CLf547cokiw-A347c48M547c4530 ","寬度」:320 },「架子標題」:空,「縮圖」:[
{「高度」:202,「網址」:「https://i.ytimg.com/vi/_uQrJ0TkZlc/hq720.jpg?sqp=-oaymwEcCOgCEMoBSFXyq4qpAw4IARUAAIhCGAFwAcABBg==&rsA4M2050303000ipV4 月203000500005 月」 ,
{「高度」:404,「網址」:「https://i.ytimg.com/vi/_uQrJ0TkZlc/hq720.jpg?sqp=-oaymwEcCNAFEJQDSFXyq4qpAw4IARUAAIhCGAFwABBg==&pjpwXBg==&pUm144000FpUpUpUpUpUpiTp4:p4pV4p4p4:V4pV202020202000:pUp7p 720章
], "title": "Python教學 -Python初學者全套教學", "type": "video", "viewCount": {"short": "41M 瀏覽次數","text": "41,059,791 瀏覽次數" }
}//...更多結果在這裡
], "search": "python 教學", "search_id": "00b5a31c-30d7-4d96-92e5-42b871062bca", "search_suggestions": ["python 教學","python 初學者教學","python 教學課程"
]
} 200 OK :搜尋結果。
400 Bad Request :查詢參數缺失或無效。
500 Internal Server Error :伺服器端錯誤。
獲取/info
說明:檢索 YouTube 影片的元資料。
查詢參數:
url :YouTube 影片的 URL。
請求範例:
取得 /info?url=https://youtube.com/watch?v=dQw4w9WgXcQ
回應範例:
{“作者”:“瑞克·阿斯特利”,“比特率”:[“160kbps”,“128kbps”,“70kbps”,“50kbps”
], "channel_id": "UCuAXFkgsw1L7xaCfnd5JJOw", "channel_url": "https://www.youtube.com/channel/UCuAXFkgsw1L7xaCfnd5JJOw",
“description”:“Rick Astley 的“Never Gonna Give You Up”的官方視頻。nn新專輯“Are We There Yet?現已發行:在此下載:https://RickAstley.lnk.to/AreWeThereYetFA/itunesnn 《Never Gonna Give You Up》於1987 年7 月發行後風靡全球,在25 個國家的排行榜上名列前茅,其中包括Rick 的祖國英國和美國美國告示牌熱門100 強。這是Rick 的首張LP“Whenever You Need Somebody”中的主打單曲和主打歌曲。 ) 執導,他後來製作了《空中監獄》、《勞拉克勞馥- 古墓奇兵》和《敢死隊2》等好萊塢大片。訂閱 Rick Astley YouTube 官方頻道:https://RickAstley.lnk.to/YTSubIDnn 關注Rick Astley:nFacebook:https://RickAstley.lnk.to/FBFollowID nTwitter: https://RickAstley.lnk.to/TwitterID nInstagram: https://RickAstley.lnk.to/InstagramID n網站:https://RickAstley.lnk.to/storeID nTikTok:https://RickAstley.lnk.to/TikTokIDnnListen致Rick Astley:nSpotify:https://RickAstley. lnk.to/SpotifyID nApple Music:https://RickAstley.lnk.to/AppleMusicID nAmazon Music:https://RickAstley.lnk.to/AmazonMusicID nDeezer:https://RickAstley.lnk.to/AppleMusicID nDeezer:https: //RickAstley.lnk.to/AppleMusicID /RickAstley.lnk.to/DeezerID nnLyrics:n我們對loven並不陌生你知道規則,我也知道我的想法是完全的承諾n你不會從任何其他人那裡得到這個nn我只是想告訴你我的感受nGotta讓你明白永遠不會放棄你永遠不會讓你失望永遠不會到處亂跑而拋棄你永遠不會讓你哭泣永遠不會說再見永遠不會說謊而傷害你永遠不會說謊而傷害你我們相識這麼久了你的心很痛,但你卻羞於說出口裡面我們都知道發生了什麼n我們知道這個遊戲,我們要玩它n如果你問我感覺如何n不要告訴我你太盲目了n永遠不會放棄你n永遠不會讓你失望n永遠不會到處亂跑沙漠你永遠不會讓你哭泣永遠不會說再見永遠不會說謊並傷害你# RickAstley #NeverGonnaGiveYouUp #WheneverYouNeedSomebody #OfficialMusicVideo", "id": "dQw4w9WgXcQ", "keywords": ["rick astley","Never Gonna Give You Up "、"nggyu"、"永遠不會放棄你的歌詞、" rick roll"、"Rick Roll"、"rick astley 官方"、"rickrolled"、"Fortnite 歌曲"、"Fortnite 活動"、"Fortnite 舞蹈"、 “堡壘之夜永遠不會放棄你”、“里克·羅爾”、“里克羅爾”、“里克·羅爾”、“永遠不會放棄你”、“80 年代音樂”、“里克·阿斯特利·新”、“動畫視頻”、“瑞克羅爾」 、「meme 歌曲」、「永遠不會放棄歌詞」、「Rick Astley 2022」、「永遠不會讓你失望」、「動畫」、「rick rolls 2022」、「永遠不會放棄你卡拉OK”
],“長度”:212,“發布日期”:空,“分辨率”:[“1080p”,“720p”,“480p”,“360p”,“240p”,“144p”
], "subtitles": ["en"], "thumbnail_url": "https://i.ytimg.com/vi/dQw4w9WgXcQ/maxresdefault.jpg", "title": "Rick Astley - Never Gonna Give You Up (官方音樂錄影帶)", "url": {"audio": {
「128kbps」:「https://rr2---sn-nx5s7n76.googlevideo.com/videoplayback?expire=1727620629&ei=tBH5ZuXtPK32sfIPmpfRaA&ip=34.213.214.5532sfIPmpfRaA&ip=34.213.214.553214.556606p 8S&itag=140&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D % 3D&mh=7c&mm=31%2C29&mn=sn-nx5s7n76%2Csn-nx57ynsk&ms=au%2Crdu&mv=m&mvi=2&pl=17&initcwndbps=906250&siumvi=2&pl=17&initcwndbp stuPKtFQJJZUbJtbt6KJJdElaNlI6w&spc=54MbxZ-8cHiojJiaToWtUNunjsdmNSRVaZsp33b3yJk5hWz-XyvPBPMvqq2X-StmizECw&Omi 2Fmp4&ns= 30076 0&c=WEB&sefc=1&txp=4532434&n=PBkHSDz29n0qdg&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl% 2Cxpc%2Csiu%2Cbui AL4XTegKBWTyhPvlG wVYx5b6wKFXGaJnWz5hPoyu2V1jAiBX3ZHpSl-MMXhVWpt3O5ds3INf0Wlr-pbzhcj9KywORA%3D %3D&pot=MnRLRTG8kBazMEt9RGwvFceBv40KENnpHtlDrguGDKni7A-azrTC0L_GYy7Pz -fH6mqHFsS7CmHJ3c3g9Y6z-RmCRsbYTXcxRsbYTX PPNYTqkcXvKA%3D%3D&sig=AJfQdSswRQIhALzVUS_1ZBhAU4vl4-_gWy8D_Iu AVQZJzFanrawDMKOsAiAGBw-Q385K5JzdWj80j9eKkgT3KDR
「160kbps」:「https://rr2---sn-nx5s7n76.googlevideo.com/videoplayback?expire=1727620629&ei=tBH5ZuXtPK32sfIPmpfRaA&ip=34.213.214.5532sfIPmpfRaA&ip=34.213.214.55324666pFJAvvv 8S&itag=251&來源=youtube&requiressl=是&xpc=EgVo2aDSNQ %3D% Ftz4stuPKtFQJJZUbJtbt6KJJdElaNlI6w&spc=54MbxZ-8cHiojJiaToWtUNunjsdmNSRVaZsp33b3yJk5hWz-XyvPBPMvqlmBFtX-Zsp33b3yJk5hWz-XyvPBPMvqlmBFtX-Stmi音訊%2Fwebm&ns= 5130076 0&c=WEB&sefc=1&txp=4532434&n=PBkHSDz29n0qdg&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource% 2Crequiressl%2Cxpc%2Csiu%2Cbui %2Cspc%2Cvprv%2Csvpuc%2Cmime%2Cns%2Crqh%2Cgir%2Cclen%2Cdur%2Clmt&lsNcm-h%2C VW0wRQIhAL4XTegKBWTyhPvlG wVYx5b6wKFXGaJnWz5hPoyu2V1jAiBX3ZHpSl-MMXhVWpt3O5ds3INf0Wlr-pbzhcj9KywORA %3D%3D&pot=MnRLRTG8kBazMEt9RGwvFceBv40KENnpHtlDrguGDKni7A-azrTC0L_GYy7Pz -fH6mqHFsS7CmHJ3c3g9Y6z-RRXqRsbYhM44457pFygJV4不是TgJSjqR4554pBjqR454pBjqR455pBjqR445pBjqR45cBjqR4pM4pYi; edclwPPNYTqkcXvKA%3D%3D&sig=AJfQdSswRAIgRgmVXNz6GXZTa8wFsnP1g7VTKkA inxQ2MeL4L7_PpUUCIHgo1DpARUjGV3QpFS06_Q90000
「50kbps」:「https://rr2---sn-nx5s7n76.googlevideo.com/videoplayback?expire=1727620629&ei=tBH5ZuXtPK32sfIPmpfRaA&ip=34.213.214.55&VJAww達多S&itag=249&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D % 3D&mh=7c&mm=31%2C29&mn=sn-nx5s7n76%2Csn-nx57ynsk&ms=au%2Crdu&mv=m&mvi=2&pl=17&initcwndbps=906250&siumvi=2&pl=17&initcwndbps=906250&sium18DPedPcc stuPKtFQJJZUbJtbt6KJJdElaNlI6w&spc=54MbxZ-8cHiojJiaToWtUNunjsdmNSRVaZsp33b3yJk5hWz-XyvPBPMvqq2X-StmizECw&Omi 2Fwebm&ns= 5130076 0&c=WEB&sefc=1&txp=4532434&n=PBkHSDz29n0qdg&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc% 2Csiu%2Cbui BWTyhPvlG wVYx5b6wKFXGaJnWz5hPoyu2V1jAiBX3ZHpSl-MMXhVWpt3O5ds3INf0Wlr-pbzhcj9KywORA%3D%3D&pot =MnRLRTG8kBazMEt9RGwvFceBv40KENnpHtlDrguGDKni7A-azrTC0L_GYy7Pz -fH6mqHFsS7CmHJ3c3g9Y6z-RqqRsbYhMeXWbiXmyTXLpKRXOkQFbgSjNeRohf9afkINW7suFEVcBe0OedclwPPNYTqkcXvKA%3D%3D&sig=AJfQdSswRgIhANYw5Elp9cly-pk9fZtviQxozUwSb meyiPSX7xxOHywGAiEAoHiFDUHUA-S4m-WjPNnlnSXp65opUramacG4gcucmFg%3D",
「70kbps」:「https://rr2---sn-nx5s7n76.googlevideo.com/videoplayback?expire=1727620629&ei=tBH5ZuXtPK32sfIPmpfRaA&ip=34.213.214.55&VJAww達多S&itag=250&source=youtube&requiressl=yes&xpc=EgVo2aDSNQ%3D % 3D&mh=7c&mm=31%2C29&mn=sn-nx5s7n76%2Csn-nx57ynsk&ms=au%2Crdu&mv=m&mvi=2&pl=17&initcwndbps=906250&siumvi=2&pl=17&initcwndbps=906250&sium18DPedPcc stuPKtFQJJZUbJtbt6KJJdElaNlI6w&spc=54MbxZ-8cHiojJiaToWtUNunjsdmNSRVaZsp33b3yJk5hWz-XyvPBPMvqq2X-StmizECw&Omi 2Fwebm&ns= 30076 0&c=WEB&sefc=1&txp=4532434&n=PBkHSDz29n0qdg&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl% 2Cxpc%2Csiu%2Cbui AL4XTegKBWTyhPvlG wVYx5b6wKFXGaJnWz5hPoyu2V1jAiBX3ZHpSl-MMXhVWpt3O5ds3INf0Wlr-pbzhcj9KywORA%3D %3D&pot=MnRLRTG8kBazMEt9RGwvFceBv40KENnpHtlDrguGDKni7A-azrTC0L_GYy7Pz -fH6mqHFsS7CmHJ3c3g9Y6z-RmCRsbYTXcxRsbYTX PPNYTqkcXvKA%3D%3D&sig=AJfQdSswRAIgcZBnQIUSU46Et4rVk1EP96LN12X 6zEturr49Dt3IdtgCICaL6e5X_7qoN782XgA94aCWl9NtgCICaL6e5X_7qoN782XgA94aCWl9NtgCICaL6e5X_7qoN782XgA94aCWl9NtgCI
},"影片": {
「360p」:「https://rr2---sn-nx5s7n76.googlevideo.com/videoplayback?expire=1727620629&ei=tBH5ZuXtPK32sfIPmpfRaA&ip=34.213.214.5550Ww達萬多8S&itag=18&來源=youtube&requiressl=是&xpc=EgVo2aDSNQ %3D% 3D&mh=7c&mm=31%2C29&mn=sn-nx5s7n76%2Csn-nx57ynsk&ms=au%2Crdu&mv=m&mvi=2&pl=17&initcwndbps=906250&sALX W98J3ow17XhWM6hHiFPFeuDi2q4X9h4FbCSw&spc=54MbxZ-_cHiojJiaToWtUNunjsdmNSRVaZsp33b3yJk5hWz-XyvPBPMvqlmBFtX-Zsp33b3yJk5hWz-XyvPBPMvqlmBFtX-Zsp33b3yJk5hWz-XyvPBPMvqlmBFtX-Kvv-Swvidm->Swvvvdvvsvvsvs-Svdm-Swm-Swm-Swimwww-Swwwwww-dww-Swvdv-Swvdvv-Svvids&F; 2Fmp4&ns =8KIxDqAhSq857Jj0EsIv_rAQ&rqh= 1&cnr=14&ratebypass=是&dur=212.091&lmt=1717051812678016&mt=17275981760250000 c=WEB&sefc=1&txp=4538434&n=5BzkN_PgDU fS4g&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cxpc%2Csiu %2Cbui%2Cspc%2Cvprv %2Csvpuc%2Cmime%2Cns%2Crqh%2Ccnr%2Cratebypass%2Cdur%2Clmt&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=ABPmVW0wRQIhAL4XTegKBWTyhPvlGwVYx5b6wKFXGa JnWz5hPoyu2V1jAiBX3ZHpSl-MMXhVWpt3O5ds3INf0Wlr-pbzhcj9KywORA%3D%3D&pot= MnRLRTG8kBazMEt9RGwvFceBv40KENnpHtlDrguGDKni7A-azrTC0L_GYy7Pz-fH6mqHFsS7CmHJ3 c3g9Y6z-RqqRsbYhcWbiXmyTXpKRXXmyTXc vKA %3D%3D&sig=AJfQdSswRAIgfjB7dIm2WxtJENp3UQMt-R6AOxAG42tSR_R8AY1VOjQCIHZTT43adN0Wy7XAicHL3yPavg78sous0M4orEjRw
}
},「觀看次數」:1576357050,「watch_url」:「https://youtube.com/watch?v=dQw4w9WgXcQ」} 200 OK :視訊元資料。
400 Bad Request :URL 無效或缺少參數。
500 Internal Server Error :伺服器端錯誤。
發布/download
說明:以可用的最高解析度下載 YouTube 內容。
請求正文:
{“url”:“https://youtube.com/watch?v=dQw4w9WgXcQ”,“字幕”:{“burn”:true,“lang”:“en”
}, “連結”: false}回應範例(文件下載):
如果link false :
響應將是文件下載。
如果link為true :
{“download_link”:“http://example.com/temp_file/temp_Python_Tutorial_for_Beginners.mp4”} 200 OK :下載連結或檔案。
400 Bad Request :無效的 URL 或參數。
500 Internal Server Error :伺服器端錯誤。
POST /download/<resolution>
描述:以指定解析度下載 YouTube 內容。
請求正文:
{“url”:“https://youtube.com/watch?v=dQw4w9WgXcQ”,“比特率”:“128kbps”,“字幕”:{“burn”:true,“lang”:“en”
}, “連結”: false}回應範例(文件下載):
如果link false :
響應將是文件下載。
如果link為true :
{“download_link”:“http://example.com/temp_file/temp_Python_Tutorial_360p.mp4”} 200 OK :下載連結或檔案。
400 Bad Request :無效的解析度、位元率或 URL。
500 Internal Server Error :伺服器端錯誤。
發布/download_audio
描述:下載最高品質的 YouTube 音訊。
請求正文:
{“url”:“https://youtube.com/watch?v=dQw4w9WgXcQ”,“連結”:false}回應範例(文件下載):
如果link false :
響應將是文件下載。
如果link為true :
{“download_link”:“http://example.com/temp_file/temp_Python_Tutorial.mp3”} 200 OK :下載連結或檔案。
400 Bad Request :無效的 URL。
500 Internal Server Error :伺服器端錯誤。
POST /download_audio/<bitrate>
說明:下載指定比特率的 YouTube 音訊。
請求正文:
{“url”:“https://youtube.com/watch?v=dQw4w9WgXcQ”,“連結”:false}回應範例(文件下載):
如果link false :
響應將是文件下載。
如果link為true :
{“download_link”:“http://example.com/temp_file/temp_Python_Tutorial_48kbps.mp3”} 200 OK :下載連結或檔案。
400 Bad Request :無效的位元率或 URL。
500 Internal Server Error :伺服器端錯誤。
GET /captions/<lang>
描述:檢索 YouTube 影片的字幕。
查詢參數:
url :YouTube 影片的 URL。
請求範例:
GET /captions/en?url=https://youtube.com/watch?v=dQw4w9WgXcQ
回應範例:
{ "caption": "通常是我的孩子弄壞了東西,我是那個能修復它的人,但是當我的 DIY 泳池水冷卻發生腐蝕時", "caption_json": [
{ "duration": 5.679, "start": 0.12, "text": "通常是我的孩子打破東西並且"},
{ "duration": 5.919, "start": 2.72, "text": "我是那個能修復它的人,但是什麼時候"},
{“duration”:6.201,“start”:5.799,“text”:“我的 DIY 泳池水冷卻中的腐蝕”}
], "檔案": "http://youtube-dl-api.frii.site/temp_file/I%20broke%20my%20son's%20gaming%20PC%20and%20now%20I%E2%80%99m%20making%20him %20fix%20it.srt", "lang": "英文(自動產生)", "lang_code": "en"} 200 OK :字幕資料。
400 Bad Request :無效的 URL 或語言代碼。
500 Internal Server Error :伺服器端錯誤。
GET /temp_file/<filename>
描述:檢索臨時文件。
參數:
filename :檔案的名稱。
請求範例:
取得 /temp_file/temp_Python_Tutorial_for_Beginners.mp4
回應範例:
如果檔案存在,則回應將是文件下載。
如果文件不存在:
{“錯誤”:“找不到文件”} 200 OK :文件下載。
404 Not Found :文件未找到。
若要執行 API,請使用:
蟒蛇主.py
清除臨時檔案:應用程式安排任務來清除超過 24 小時的臨時檔案。
檢查app.log以取得詳細的錯誤訊息。
確保TEMP_DIR具有適當的權限。
驗證 API 請求中的 YouTube 網址和參數。
該項目根據 AGPL-3 許可證獲得許可。有關詳細信息,請參閱LICENSE文件。