Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何以编程方式获取youtube中托管视频的嵌入HTML代码_Java_Youtube Api - Fatal编程技术网

Java 如何以编程方式获取youtube中托管视频的嵌入HTML代码

Java 如何以编程方式获取youtube中托管视频的嵌入HTML代码,java,youtube-api,Java,Youtube Api,如何以编程方式获取youtube中托管的视频的嵌入HTML代码。可用的Java API是什么使用(有预构建的,或者您可以自己做HTTP/XML) 如果视频是可嵌入的,其中一个条目将包含可嵌入SWF的URL。假设您有视频的URL,那么生成一个URL相当简单。您需要URL的结尾(在/watch?v=之后的部分,我们称之为ID)。要生成iframe嵌入html,只需将其放置在适当的位置(在src属性中,不包括括号): 有几种方法可以从URL获取v参数。正则表达式可以工作。虽然接受的答案可以工作,但

如何以编程方式获取youtube中托管的视频的嵌入HTML代码。可用的Java API是什么

使用(有预构建的,或者您可以自己做HTTP/XML)


如果视频是可嵌入的,其中一个条目将包含可嵌入SWF的URL。

假设您有视频的URL,那么生成一个URL相当简单。您需要URL的结尾(在/watch?v=之后的部分,我们称之为ID)。要生成iframe嵌入html,只需将其放置在适当的位置(在src属性中,不包括括号):



有几种方法可以从URL获取v参数。正则表达式可以工作。

虽然接受的答案可以工作,但如果您希望以编程方式执行此操作,则需要正确的纵横比,以便为视频生成最佳iframe尺寸。我编写了以下php函数,可以动态地为您生成链接。它使用bash实用程序从任何youtube链接获取有关视频的信息,因此您需要确保已安装(
apt get install youtube dl
应能在Ubuntu或其他debian版本上运行)

输出:

$link = 'https://www.youtube.com/watch?v=adAqQct3vRI';
echo getYoutubeEmbed($link, ['width' => 560], ['rel' => false]);


上面的方法看起来很酷,但是我们可以依靠这种技术来假设这种格式不会因为YouTube的发展而改变吗。注意:我计划将此ID存储在数据库中,并构造此HTML代码,而不是存储整个HTML。建议吗?当然,我以前在生产现场做过。我实际上使用了旧样式的ebmed HTML,但它仍然可以工作,尽管现在首选这种新的iframe嵌入。谷歌对保持与所有当前嵌入视频的兼容性非常感兴趣,所以你不必担心。YouTube已经使用这种方法很长时间了,似乎有意支持以这种方式使用。。如前所述。
function getYoutubeEmbed($link, $size = [], $options = [], $privacy = false) {

    $options += [
        'rel'      => true, // Show suggested videos when the video finishes.
        'controls' => true, // Show player controls.
        'showinfo' => true, // Show video title and player actions.
    ];

    $json = json_decode(exec('youtube-dl -j --no-warnings ' . $link . ' 2>/dev/null'));
    if ($json && !empty($id = $json->id) && !empty($width = $json->width) && !empty($height = $json->height)) {

        $args = [];
        foreach ($options as $option => $value) {
            if (!$value) {
                $args[] = $option . '=0';
            }
        }

        if ($size) {
            if (!empty($size['width']) && !empty($size['height'])) {
                $width  = $size['width'];
                $height = $size['height'];
            } else if (!empty($size['width'])) {
                $height = ceil(($height * $size['width']) / $width);
                $width  = $size['width'];
            } else if (!empty($size['height'])) {
                $width  = ceil(($width * $size['height']) / $height);
                $height = $size['height'];
            }
        }

        $url = ($privacy ? 'www.youtube-nocookie.com/embed/' : 'www.youtube.com/embed/') . $id . ($args ? '?' . implode('&',$args) : '');
        $iframe = '<iframe width="' . $width . '" height="' . $height . '" src="//' . $url . '" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen></iframe>';
        return $iframe;
    } else {
        return false;
    }
}
$link = 'https://www.youtube.com/watch?v=adAqQct3vRI';
echo getYoutubeEmbed($link, ['width' => 560], ['rel' => false]);