Как я могу сгенерировать ссылку для скачивания и отправить в виде сообщения, используя youtube-dl? - PullRequest
1 голос
/ 26 мая 2019

Я новичок в Django и даже в программировании.Я хочу скачать mp3-файл с видео на YouTube и отправить его в виде сообщения (ссылка на скачивание) пользователю.Я скачаю видео, а затем преобразую его

Вот что я пробовал до сих пор.

views.py

import os
import sys
from .task import *
from datetime import datetime
from .models import Downloader
from .forms import DownloadForm
from django.shortcuts import render


def main_page(request):
    if request.method == 'POST':
        form = DownloadForm(request.POST)
        if form.is_valid():
            video_url = form.cleaned_data.get('link')
            email = form.cleaned_data.get('email')
            try:
                convert_load.delay(video_url)
                Downloader.objects.create(url=video_url, email=email)
            except Exception as e:
                exc_type, exc_obj, exc_tb = sys.exc_info()
                fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
                print(datetime.now().strftime('%Y-%m-%d %H:%M:%S') + ' Type:{} Filename:{} Line:{}ERROR: {}'.
                      format(exc_type, fname, exc_tb.tb_lineno, e))
        return render(request, 'download_link.html')
    else:
        form = DownloadForm()
        return render(request, 'main_page.html', {'form': form})


def history(request):
    return render(request, 'history.html', {'instance': Downloader.objects.all()})


def download_link(request):
    link_location = 'media/{}'.format('skjdskdj')
    print(link_location, '\n\n\n\n')
    return render(request, 'download_link.html', {'link': link_location})

task.py


from __future__ import unicode_literals
import youtube_dl
from celery import task
from django.core.mail import send_mail
import converter
from converter.models import Downloader
from django.utils.timezone import now


@task
def convert_load(video_url):
    # Mp3 format options
    ydl_opts = {
        'format': 'bestaudio/best',
        'outtmpl': 'media/%(title)s.mp3',
        'postprocessors': [{
            'key': 'FFmpegExtractAudio',
            'preferredcodec': 'mp3',
            'preferredquality': '192',
        },
            {'key': 'FFmpegMetadata'}
        ],
    }

    with youtube_dl.YoutubeDL(ydl_opts) as yld:
        file_data = yld.extract_info(video_url)
        name = file_data['title']
        email = file_data['email']

    mail_sending.delay(email, name)
    return name, email


@task
def mail_sending(email, name):
    send_mail(
        'Download link',
        'You can download file from this link: http://127.0.0.1:8000/converter/media/{}'.format(name),
        'foto.nurbek@gmail.com',
        [email],
        fail_silently=False
    )

Буду ли я признателен, если кто-нибудь предоставит какие-либо рекомендации / решения моей проблемы?

...