服用這兩天總算有時間來玩玩Django,個人總覺得學習最快的方式就是做出一個個小成品出來,所以第一號作品youtube 影片下載就出來了!
(這個網站若是兩星期無人點擊會自動關閉,有需要但發現不能使用時請聯絡我。)因openshift關閉免費服務,目前放在自己的主機上。
那這是這次的原始碼:https://github.com/Chunshan-Theta/youtube_download
為了要配合放上 openshift,所以有多了幾層資料夾,最核心的部分是在wsgi資料夾裡,所以注意這裡頭即可。
那這次個人學習的網站是使用
- 官方文件:https://docs.djangoproject.com/en/1.11/
- django-girls中文教學:https://www.gitbook.com/book/carolhsu/django-girls-tutorial-traditional-chiness/details
那想要完整學習的朋友們,建議至少完成官方文件中的
- Writing your first Django app, part 1
- Writing your first Django app, part 2
- Writing your first Django app, part 3
- Writing your first Django app, part 4
當然最好是全部看過,若有些不清楚的部分也可以搭配django-girls中文教學服用。
再來就是針對程式碼部分說明:
首先這個網站流程主要分為三部分 也就是
- 通過http connect 來接收 youtube 影片ID
- 透過youtube_dl 來找尋影片來源
- 將結果透過 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 }}
那大致上就是這樣了,下次應該會來找個有資料庫處理部分的題目來做吧,只是目前來沒有什麼好想法,看看哪天有感興趣的題目再來試試手腳吧!
連結掛了 可以重新放上去嗎 我需要研究一下