首页 > 解决方案 > 从 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 如何进行这种解析以获取元数据和 mrl?

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

那么如何在不使用巨大开销的情况下做与我的 LibVLC 代码相同的操作呢?希望有一个urllib基于工作的解决方案或其他东西。

可能重复:如何解析 YouTube 和 SoundCloud?

标签: pythonweb-scrapingstreamurlliblibvlc

解决方案


经过一些测试,我决定使用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'])

推荐阅读