如何从 VK.com (Vkontakte) 获取视频缩略图?

问题描述 投票:0回答:1

最好在客户端使用 JavaScript,但如果不可能,则在服务器上使用 PHP。

我知道他们的 API 中有一个 video.get 方法,它返回一个“items”数组,其中包含各种宽度的预览图像的“image”数组。但文档声称您需要一个“用户访问令牌”才能使用它,可以通过“隐式流”获得(这似乎涉及打开一个弹出窗口并使用户登录到VK)或“授权代码流程”(据我所知,来自服务器端,但也涉及用户登录)。

我不想让用户登录。并且必须有某种方法,因为其他获取 VK 视频缩略图的网站不需要用户登录 - 例如,Google 在“视频”选项卡中显示来自 VK 的视频.com 带有缩略图。另一个例子是 ImgPanda VK 视频缩略图下载器,它会在用户输入 VK 视频 URL 后,等待几秒钟,并且显然没有登录,即可获取缩略图。

我遇到了一个 video-thumbnails GitHub 项目,其中有一些似乎相关的 PHP 代码。看起来,在 VK 嵌入的 iframe 视频中,缩略图是 id 为“player_thumb”的 img 标签的 src(我通过使用浏览器中的开发人员工具检查 iframe 的内容也看到了这一点)。

我更愿意使用 API,但我想我应该使用 VSCode REST 客户端尝试以下 GET 请求: 获取https://vk.com/video_ext.php?oid=-135285&id=456240123&js_api=0

这实际上在两周前有效(它返回了 VK 视频嵌入的源代码),但现在我收到“413 Request Entity Too Large”。

当它工作时,我编写了一些快速的 JavaScript + Regex 来尝试获取缩略图 src:

function fetchVkThumbnail (oid,id) {
    const vkThumbnailRegex = /background-image:url\((?<thumbnail>.+\.jpg)\)/;

    return fetch(`https://vk.com/video_ext.php?oid=-${oid}&id=${id}`)
        .then(res => res.text())
        .then((text) => {
            const thumbnailSrc = text.match(vkThumbnailRegex).groups.thumbnail;
            console.log(thumbnailSrc);
            return thumbnailSrc;
        });
}

...但它给出了错误消息

Access to fetch at 'https://vk.com/video_ext.php?oid=-135285&id=456240123' from origin 'http://localhost' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

此外,我还发现了关于 openID 和 oAuth 在 VK 中如何工作的 有趣的讨论。不确定是否相关。

javascript php oauth cors vk
1个回答
0
投票

从服务器发出请求(例如从 PHP)

© www.soinside.com 2019 - 2024. All rights reserved.