如何在Django webapp中通过pafy和youtube-dl强制下载文件

阿比吉特帕尔

我用 django 和 pafy 制作了一个 youtube 视频下载器应用程序。

我得到的最后一个链接中的问题类似于https://r5---sn-gwpa-jj0z-blah-blah

这些链接在浏览器中打开文件如何使它们可以在客户端机器上下载?

我用来获取下载链接的模板是,

{% for resolution,extension,file_size,url in streams %}
    <tr>
        <td>{{ resolution }}</td>
        <td>{{ file_size }}</td>
        <td>{{ extension }}</td>
        <td>
            <a href="{{ url }}" download="{{ title }}.{{ extension }}" type="application/octet-stream" >
                <span class="glyphicon glyphicon-download-alt" ></span> Download
            </a>
        </td>
    </tr>
{% endfor %}

是否可以从 youtube-dl 获得直接链接,我进行了大量搜索,但没有找到有效的答案对我没有任何帮助?

更新

视图.py

import pafy
from django.http import HttpResponse
from django.shortcuts import render
from django.template.defaultfilters import filesizeformat
from django.views import generic


def url_corrector(url):

    correct_url = url

    if 'm.' in url:
        correct_url = correct_url.replace('m.', '')

    if 'youtu.be' in url:
        video_id = url.split('/')[-1]
        correct_url = 'https://www.youtube.com/watch?v=' + video_id

    return correct_url


class Download(generic.View):
    # """The view which handles the url and returns the download links."""

    template_name = 'download.html'

    def get(self, request, *args, **kwargs):
        return render(request, self.template_name)

    def post(self, request, *args, **kwargs):
        url = request.POST['url']
        url = url_corrector(url)  # Converting the urls in a format that is supported by pafy.

        # if len(url.split("=")[-1]) != 11:  # Checks whether the url contains the 11 character unique video id.
        #     return HttpResponse('Enter correct url.')

        video = pafy.new(url)  # creates a pafy object for a given youtube url.

        stream = video.streams  # both video and audio
        video_audio_streams = list()  # list of all the videos which also contain audio
        for s in stream:
            video_audio_streams.append(
                [s.resolution, s.extension, filesizeformat(s.get_filesize()), s.url + "&title=" + video.title])

        stream_video = video.videostreams  # only video
        video_streams = list()  # list of all the dash video formats(only video)
        for s in stream_video:
            video_streams.append(
                [s.resolution, s.extension, filesizeformat(s.get_filesize()), s.url + "&title=" + video.title])

        stream_audio = video.audiostreams  # only audio
        audio_streams = list()  # list of all the dash audio formats(only audio)
        for s in stream_audio:
            audio_streams.append(
                [s.resolution, s.extension, filesizeformat(s.get_filesize()), s.url + "&title=" + video.title])

        return render(request, self.template_name,
                      {'url': request.POST['url'], 'title': video.title, 'streams': video_audio_streams,
                       'desc': video.description, 'likes': video.likes,
                       'dislikes': video.dislikes, 'thumb': video.bigthumbhd,
                       'duration': video.duration, 'views': video.viewcount,
                       'stream_video': video_streams, 'stream_audio': audio_streams})
瓦哈夫·维沙尔

pafy 只是提供视频文件的直接链接。视频在谷歌服务器上,所以即使download你的 html 中属性它也不会工作,因为视频不在同一个域中,因此你无法控制标题。您可以做的是在您的服务器上临时下载视频文件并将其提供给用户。

编辑:
一种可能的解决方法是alt + click下载链接。它将下载文件而不是播放文件。我也尝试alt+click使用 js触发正常点击,但它不起作用。所以你alt+click每次都必须手动。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在Codeigniter中强制文件下载时,如何选择保存下载文件的位置?

来自分类Dev

在Django中访问/下载文件时,应如何强制执行权限检查?

来自分类Dev

如何从Google存储桶中强制下载文件,而不是在浏览器中打开文件?

来自分类Dev

Android如何通过网络浏览器强制下载文件

来自分类Dev

youtube_dl:通过终端同步下载文件

来自分类Dev

强制Django下载文件而不是链接

来自分类Dev

如何强制使用下载文件提示,而不用HTML在浏览器中显示?

来自分类Dev

如何使用JavaScript强制下载文件?

来自分类Dev

如何从强制下载的链接中下载文件

来自分类Dev

从Django通过Axios下载文件

来自分类Dev

在Django中下载文件时如何在网页中显示内容

来自分类Dev

在django 1.7中下载文件

来自分类Dev

如何通过Meteor下载文件?

来自分类Dev

如何通过HTTP下载文件?

来自分类Dev

如何在Spring MVC和MongoDB中下载文件

来自分类Dev

WAMP:如何托管和下载文件?

来自分类Dev

如何在Cake中从Web下载文件?

来自分类Dev

如何在IE11中自动下载文件

来自分类Dev

如何在JEST中测试下载文件的请求

来自分类Dev

如何在Plone中为特定角色下载文件?

来自分类Dev

如何在Linux中从URL下载文件

来自分类Dev

如何在iOS中以特定顺序异步下载文件?

来自分类Dev

如何在php(yii)中以zip格式下载文件

来自分类Dev

如何在python中解冻请求下载文件?

来自分类Dev

如何在laravel 5.4中下载文件

来自分类Dev

如何在锁定屏幕的 IE 中自动下载文件

来自分类Dev

如何在C#中从FTPS下载文件

来自分类Dev

Django下载文件

来自分类Dev

如何在不使用html中的下载标签的情况下创建可下载文件?

Related 相关文章

热门标签

归档