用Python从YouTube、SoundCloud等平台获取元数据和mrl

问题描述

目前我正在使用 LibVLC 来获取在线视频和音乐的元数据和 mrl。 但这只是为了获取这些信息而产生的大量愚蠢开销。

...
from vlc import Instance as vlcInstance,MediaList,MediaListPlayer,Event,EventType,State
...
self.player = MediaListPlayer(vlcInstance(options))
...
        self.list = MediaList(self._mrls)
        self.player.set_media_list(self.list)
...
        media = self.player.get_media_player().get_media()
        if media.get_Meta(1) is not None and self.trackChangedEventCallback is not None:
            self.trackChangedEventCallback(
                media.get_Meta(0),# Title
                media.get_Meta(1),# Artist
                media.get_Meta(6),# Description
                media.get_Meta(10),# URL
                media.get_Meta(15)  # Artlink
            )
        print(media.get_mrl()) # MRL
...

当然有适用于不同平台的软件包,但我不想用另一个替换一个愚蠢的开销。 我快速查看了 VLC 的 youtube.lua 脚本,但没有找到一个好主意。 LibVLC 是怎么做这个解析得到Meta和mrl的?

网页抓取是另一个想法,但在这一点上对我来说似乎不太可靠。

那么如何在不使用巨大开销的情况下执行与我的 LibVLC-Code 相同的操作? 希望有基于 urllib 的工作解决方案或其他解决方案。

非常感谢! :-)

可能重复:How to parse YouTube and Soundcloud with python and LibVLC?

解决方法

经过一些测试,我决定使用 youtube_dl,因为它非常易于使用并且支持很多平台:http://ytdl-org.github.io/youtube-dl/supportedsites.html

这是我的示例代码:

#!/usr/bin/env python3
import youtube_dl as ydl

url = "https://www.youtube.com/watch?v=6qEzh3wKVJc"

with ydl.YoutubeDL(
    {
        "forcejson": True,"noplaylist": True,"format": "bestaudio"
    }
) as parser:
    meta = parser.extract_info(
        url,download=False
    )

print(meta['thumbnail'])
print(meta['title'])
print(meta['url'])

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...