0
0 комментариев

Задача такая: В поле вводим ссылку на видео с ютуба,
youtube-dl вытаскивает с этой ссылки прямую ссылку на скачивание видео.
Перенаправляем пользователя по прямой ссылке на скачивание видео, нас должно перенаправить и спросить типа «Хотите скачать файл?».

Редирект получается сделать, но при редиректе браузер просто воспроизводит видео, а не качает его.

model.py

from django.db import models
 
 
class Link(models.Model):
    url = models.URLField(verbose_name='Ссылка')
    created = models.DateTimeField(auto_now_add=True)
 
    class Meta:
        verbose_name = 'Ссылка'
        verbose_name_plural = 'Ссылки'
 
    def __str__(self):
        return self.url

forms.py

from django import forms
from .models import Link
 
 
class LinkForm(forms.Form):
    url = forms.URLField(widget=forms.TextInput(attrs={
        'id': 'input_text', 'class': 'url',
        'name': 'url',
        'placeholder': 'Enter url video from youtube.com'
    }))
 
    class Meta:
        model = Link
        fields = "__all__"

views.py

import youtube_dl
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from django.shortcuts import render
from django.http import HttpResponsePermanentRedirect
from .forms import LinkForm
from .models import Link
 
def index(request):
    form = LinkForm()
    link_list = Link.objects.all()
 
    context = {
        'form': form,
        'links': link_list,
    }
 
    return render(request, 'youtube/index.html', context)
 
def download_video(request):
    form = LinkForm(request.POST)
    if request.method == 'POST':
        if form.is_valid():
            youtubeUrl = request.POST.get('url') # Получаем ссылку с формы
 
            url = Link(url=youtubeUrl) # Сохроняем запись в БД
            url.save()
 
            options = { # Настройки youtube_dl
                'outtmpl': '%(title)s-%(id)s.%(ext)s',
                'format': 'best'
            }
 
            with youtube_dl.YoutubeDL(options) as ydl:
                r = ydl.extract_info(youtubeUrl, download=False) # Вставляем нашу ссылку с ютуба
                videoUrl = r['url'] # Получаем прямую ссылку на скачивание видео
                print(videoUrl)
 
            name = 'test'
            response = HttpResponsePermanentRedirect(videoUrl) # Вставляем прямую ссылку на скачивание в редирект
            response['content_type'] = 'application/force-download'
            response['Content-Disposition'] = 'attachment; filename=%s' % name
 
            return response
        else:
            print('Form is not valid!')

urls.py

from django.conf.urls import url
from . import views
 
urlpatterns = [
    url(r'^$', views.index, name='index'),
    url(r'^results/$', views.download_video, name='download_video')
]

Изменен статус публикации
Добавить комментарий