Django 小試身手 – youtube 影片下載

服用這兩天總算有時間來玩玩Django,個人總覺得學習最快的方式就是做出一個個小成品出來,所以第一號作品youtube 影片下載就出來了!

 

Django 影片下載

(這個網站若是兩星期無人點擊會自動關閉,有需要但發現不能使用時請聯絡我。)因openshift關閉免費服務,目前放在自己的主機上。

那這是這次的原始碼:https://github.com/Chunshan-Theta/youtube_download

為了要配合放上 openshift,所以有多了幾層資料夾,最核心的部分是在wsgi資料夾裡,所以注意這裡頭即可。

那這次個人學習的網站是使用

  1. 官方文件:https://docs.djangoproject.com/en/1.11/
  2. django-girls中文教學:https://www.gitbook.com/book/carolhsu/django-girls-tutorial-traditional-chiness/details

那想要完整學習的朋友們,建議至少完成官方文件中的

當然最好是全部看過,若有些不清楚的部分也可以搭配django-girls中文教學服用。

再來就是針對程式碼部分說明:

首先這個網站流程主要分為三部分 也就是

  1. 通過http connect 來接收 youtube 影片ID
  2. 透過youtube_dl 來找尋影片來源
  3. 將結果透過 HTML tag 顯示

第一部分:通過http connect 來接收 youtube 影片ID

youtube_download/wsgi/myproject/myproject/urls.py:
from APP1.views import hello_world
from APP1.views import YoutubeDownload

urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'^YoutubeDownload/(?P\w*)/$', YoutubeDownload),
    url(r'^YoutubeDownload/$', YoutubeDownload),
    url(r'^hi/', hello_world),
]

#    urls.py這個檔案主要在設定網址輸入規則,並將符合規則的網址導向至相對應的功能裡。
#    輸入規則同python一般文字代入方式,不清楚的話可以嘗試跑跑看下方的sample
#   https://github.com/Chunshan-Theta/Python_Text_mining_textbook-/blob/master/2_REOperation.py

第二部分:透過youtube_dl 來找尋影片來源

這部分不清楚的話建議自行去查詢youtube_dl的相關文件。

# youtube_download/wsgi/myproject/APP1/DownloadYoutubeAPI.py
# coding:utf-8#
import json
import youtube_dl
import time
def detect(url):
 '''
 How to Using:
 detect('youtube video link')
 How to show Data:
 for r in DownloadLinkList:
 print(r['info'])
 print(r['url'])
 '''
 try:
     ydl = youtube_dl.YoutubeDL({'outtmpl': '%(id)s%(ext)s'})
 
     with ydl:
         result = ydl.extract_info(url,download=False)
 
     if 'entries' in result:
         # Can be a playlist or a list of videos
         video = result['entries'][0]
     else:
         # Just a video
         video = result
 
     video_url = video['formats']
     video_url = len(video['formats'])
 
 
     SourceArray=[]
     for key in video['formats']:
         SourceArray.append({'info':key['format'],'url':key['url']})
 
     row_json = json.dumps(SourceArray)
 
          
     return SourceArray
 except:
     return [{"info":"網址錯誤","url":"#"}]

第三部分:將結果透過 HTML tag 顯示

這邊就跟一般的HTML tag 相似 只是變數的地方採用雙大括弧包著。

#    youtube_download/wsgi/myproject/APP1/templates/YoutubeDownload.html

Hello!目前所搜尋的影片ID為:{{ VideoID }}

那大致上就是這樣了,下次應該會來找個有資料庫處理部分的題目來做吧,只是目前來沒有什麼好想法,看看哪天有感興趣的題目再來試試手腳吧!

2 Comments

Add a Comment

發佈留言必須填寫的電子郵件地址不會公開。