12
Авг
2017

Перенаправление на ссылку скачивания видео с Youtube?

Задача такая: В поле вводим ссылку на видео с ютуба, 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')
]  

Источник: https://ru.stackoverflow.com/questions/705358/%D0%9F%D0%B5%D1%80%D0%B5%D0%BD%D0%B0%D0%BF%D1%80%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5-%D0%BD%D0%B0-%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D1%83-%D1%81%D0%BA%D0%B0%D1%87%D0%B8%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F-%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-%D1%81-youtube

Share

Тебе может это понравится...