Php 如何获取所有视频ID';他来自Youtube频道

Php 如何获取所有视频ID';他来自Youtube频道,php,api,youtube,youtube-api,youtube-channels,Php,Api,Youtube,Youtube Api,Youtube Channels,如何从youtube数据源获取所有视频id 我通过以下(API)URL接收youtube提要: 我已经知道如何从频道中提取链接、描述和缩略图,但我想从频道中提取所有视频Id(例如,wwonnpts)您好,我认为您应该从视频链接中的v参数中检索值,您可以使用正则表达式或子字符串…我知道这是一个老问题,但我写了一些东西来满足这里的要求: 只需编辑第23行: return $videoids[array_rand($videoids)]; 致: 这将返回一个包含用户视频ID的数组:) 编辑:对不

如何从youtube数据源获取所有视频id

我通过以下(API)URL接收youtube提要:


我已经知道如何从频道中提取链接、描述和缩略图,但我想从频道中提取所有视频Id(例如,wwonnpts

您好,我认为您应该从视频链接中的v参数中检索值,您可以使用正则表达式或子字符串…

我知道这是一个老问题,但我写了一些东西来满足这里的要求:

只需编辑第23行:

return $videoids[array_rand($videoids)];
致:

这将返回一个包含用户视频ID的数组:)

编辑:对不起,伙计们(@testing,@Code\u Ed\u Student),我不知道为什么要点不再存在了,但我在我的档案中找到了它,代码如下。该实现与旧示例中的实现略有不同,但实现了相同的效果(您可以用任何其他逻辑替换该阵列)


这是我的方式。速度慢,但能工作。:)

功能获取视频($channel){
如果($channel==“”){
返回false;
}
/*获取视频的数量*/
$books=simplexml\u load\u文件('s)http://gdata.youtube.com/feeds/base/users/“.$channel.'/uploads?最大结果=1,开始索引=1”);
$numb_videos=$books->children('openSearch',true)->totalResults;
settype($numb_视频,“整数”);
$ids=array();
$i=1;
对于($i=1;$i条目->id;
settype($ApiLink,“string”);
$ApiLink=str_替换(“http://gdata.youtube.com/feeds/base/videos/“,”,$ApiLink);
阵列推送($ids,$ApiLink);
}
返回$id;
}
使用youtube数据api v3实现这一点。

使用以下方法:

获取{YOUR_API_KEY}

您将获得上述url的结果,如下所示:

200 OK

- Show headers -

{
"kind": "youtube#searchListResponse",
"etag": "\"qQvmwbutd8GSt4eS4lhnzoWBZs0/WiiEAt3fgPkFw_831Iveo6mV-IU\"",
"nextPageToken": "CAQQAA",
"pageInfo": {
"totalResults": 1046,
"resultsPerPage": 4
},
"items": [
{
"kind": "youtube#searchResult",
"etag": "\"qQvmwbutd8GSt4eS4lhnzoWBZs0/OtU1Ja-W-gNf83iiXWzodKk3Ce0\"",
"id": {
"kind": "youtube#video",
"videoId": "jKLMD-LXIgk"
}
},
{
"kind": "youtube#searchResult",
"etag": "\"qQvmwbutd8GSt4eS4lhnzoWBZs0/EUhMCxemh2UGmf2ufGS0IYdcMUs\"",
"id": {
"kind": "youtube#video",
"videoId": "glCQQeH_ddw"
}
},
{
"kind": "youtube#searchResult",
"etag": "\"qQvmwbutd8GSt4eS4lhnzoWBZs0/2IMOnedhjKXxnFZy-PNg5o80kkY\"",
"id": {
"kind": "youtube#video",
"videoId": "yB78MIcmDxs"
}
},
{
"kind": "youtube#searchResult",
"etag": "\"qQvmwbutd8GSt4eS4lhnzoWBZs0/oEb7q9_GwGdXcHsvuRDuNmh_rGQ\"",
"id": {
"kind": "youtube#video",
"videoId": "NnkDja1cXlo"
}
}
]
}

有关更多参考信息,请查看

注意:中的数组到字符串转换

C:\wamp\www\youtube-vimeo-api播放列表到数据库导入器master\youtube-vimeo-api播放列表到数据库导入器.php


在第28行

看来,通过一个循环检索所有视频是一个好主意,但显然不是。如果一个频道有数千个(超过1600个)对于视频,
search
不会返回所有内容:最后的结果页面很少是空的,结果的数量将是错误的,给定页面的数量将只有20页左右

因此,如果您需要通过API获取所有ID,那么最好首先使用
频道
API获取“上载”播放列表ID,然后在
播放项目
API中使用它来检索所有视频

第一个请求URL如下所示(当然,在开始时使用):

结果:

{
    "kind": "youtube#channelListResponse",
    "etag": "\"m2yskBQFythfE4irbTIeOgYYfBU/Nza6t_W5qltBCnHIHKgNiSRu0bE\"",
    "pageInfo": {
    "totalResults": 1,
        "resultsPerPage": 1
    },
    "items": [
        {
            "kind": "youtube#channel",
            "etag": "\"m2yskBQFythfE4irbTIeOgYYfBU/95y8HKrtWV3t4apHu0KjgoaNbc0\"",
            "id": "UC9-y-6csu5WGm29I7JiwpnA",
            "contentDetails": {
                "relatedPlaylists": {
                    "likes": "LL9-y-6csu5WGm29I7JiwpnA",
                    "favorites": "FL9-y-6csu5WGm29I7JiwpnA",
                    "uploads": "UU9-y-6csu5WGm29I7JiwpnA",
                    "watchHistory": "HL",
                    "watchLater": "WL"
                }
            }
        }
    ]
}
{
    "nextPageToken": "CDIQAA",
    "items": [
        {
            "snippet": {
                "resourceId": {
                    "videoId": "9nktr1MgS-A"
                }
            }
        }
    ]
}
或者,如果不需要大量字节,请使用如下筛选器字段:

channels?fields=items(contentDetails(relatedPlaylists(uploads)))&part=contentDetails&id=CHANNEL_ID&key=YOUR_TOKEN
筛选结果:

{
    "items": [
        {
            "contentDetails": {
                "relatedPlaylists": {
                    "uploads": "UU9-y-6csu5WGm29I7JiwpnA"
                }
            }
        }
    ]
}
下一步是获取包含视频的所有页面的列表:

playlistItems?maxResults=50&playlistId=PLAYLIST_ID&part=snippet&key=YOUR_TOKEN
结果(缩短为
键中数组的第一个结果):

或过滤后的一个,仅获取视频ID(和下一页标记):

结果:

{
    "kind": "youtube#channelListResponse",
    "etag": "\"m2yskBQFythfE4irbTIeOgYYfBU/Nza6t_W5qltBCnHIHKgNiSRu0bE\"",
    "pageInfo": {
    "totalResults": 1,
        "resultsPerPage": 1
    },
    "items": [
        {
            "kind": "youtube#channel",
            "etag": "\"m2yskBQFythfE4irbTIeOgYYfBU/95y8HKrtWV3t4apHu0KjgoaNbc0\"",
            "id": "UC9-y-6csu5WGm29I7JiwpnA",
            "contentDetails": {
                "relatedPlaylists": {
                    "likes": "LL9-y-6csu5WGm29I7JiwpnA",
                    "favorites": "FL9-y-6csu5WGm29I7JiwpnA",
                    "uploads": "UU9-y-6csu5WGm29I7JiwpnA",
                    "watchHistory": "HL",
                    "watchLater": "WL"
                }
            }
        }
    ]
}
{
    "nextPageToken": "CDIQAA",
    "items": [
        {
            "snippet": {
                "resourceId": {
                    "videoId": "9nktr1MgS-A"
                }
            }
        }
    ]
}
您可以使用
nextPageToken
键值检索下一页,将其添加到
pageToken
键值以获取参数:

{
    "kind": "youtube#playlistItemListResponse",
    "etag": "\"m2yskBQFythfE4irbTIeOgYYfBU/GmoHN7IVzBjFEtB0547SRegTL9c\"",
    "nextPageToken": "CDIQAA",
    "pageInfo": {
        "totalResults": 399,
        "resultsPerPage": 50
    },
    "items": [
        {
            "kind": "youtube#playlistItem",
            "etag": "\"m2yskBQFythfE4irbTIeOgYYfBU/5gxLp2iP0FwcZQWb98LCOGu0TfA\"",
            "id": "VVU5LXktNmNzdTVXR20yOUk3Sml3cG5BLjlua3RyMU1nUy1B",
            "snippet": {
                "publishedAt": "2017-08-03T11:27:38.000Z",
                "channelId": "UC9-y-6csu5WGm29I7JiwpnA",
                "title": "Stop Button Solution? - Computerphile",
                "description": "After seemingly insurmountable issues with Artificial General Intelligence, Rob Miles takes a look at a promising solution.\n\nConcrete Problems in AI Safety: blah blah blah blah blah blah blah blah blah",
                "thumbnails": {
                    "default": {
                        "url": "https://i.ytimg.com/vi/9nktr1MgS-A/default.jpg",
                        "width": 120,
                        "height": 90
                    },
                    "medium": {
                        "url": "https://i.ytimg.com/vi/9nktr1MgS-A/mqdefault.jpg",
                        "width": 320,
                        "height": 180
                    },
                    "high": {
                        "url": "https://i.ytimg.com/vi/9nktr1MgS-A/hqdefault.jpg",
                        "width": 480,
                        "height": 360
                    },
                    "standard": {
                        "url": "https://i.ytimg.com/vi/9nktr1MgS-A/sddefault.jpg",
                        "width": 640,
                        "height": 480
                    },
                    "maxres": {
                        "url": "https://i.ytimg.com/vi/9nktr1MgS-A/maxresdefault.jpg",
                        "width": 1280,
                        "height": 720
                    }
                },
                "channelTitle": "Computerphile",
                "playlistId": "UU9-y-6csu5WGm29I7JiwpnA",
                "position": 0,
                "resourceId": {
                    "kind": "youtube#video",
                    "videoId": "9nktr1MgS-A"
                }
            }
        },
        {
            ...
        }
    ]
}
(我从上面的结果中获取了一个令牌,例如,它可能与您的请求不同)


在最后一页将没有
nextPageToken
键。

使用pageToken可以检索所有结果。
pageToken
对我不起作用…我没有得到所有结果。有些结果丢失了!pageToken对我不起作用。请详细说明。如果可能,请提供示例。或者您可以参考以下内容:获取5个以上的结果每个请求0个结果,Google的YouTube数据API希望您按照他们文档中的说明执行分页:我尝试了,但我得到
未能打开流:HTTP请求失败!HTTP/1.0 403被禁止
。似乎Google阻止了太多请求…遗憾的是,这不再受支持:请修复链接,使您的答案更有价值。$youtube是Google_服务_youtube类的实例:)检查我提出的问题,让我知道它是否有用!
playlistItems?maxResults=50&playlistId=PLAYLIST_ID&part=snippet&key=YOUR_TOKEN
{
    "kind": "youtube#playlistItemListResponse",
    "etag": "\"m2yskBQFythfE4irbTIeOgYYfBU/GmoHN7IVzBjFEtB0547SRegTL9c\"",
    "nextPageToken": "CDIQAA",
    "pageInfo": {
        "totalResults": 399,
        "resultsPerPage": 50
    },
    "items": [
        {
            "kind": "youtube#playlistItem",
            "etag": "\"m2yskBQFythfE4irbTIeOgYYfBU/5gxLp2iP0FwcZQWb98LCOGu0TfA\"",
            "id": "VVU5LXktNmNzdTVXR20yOUk3Sml3cG5BLjlua3RyMU1nUy1B",
            "snippet": {
                "publishedAt": "2017-08-03T11:27:38.000Z",
                "channelId": "UC9-y-6csu5WGm29I7JiwpnA",
                "title": "Stop Button Solution? - Computerphile",
                "description": "After seemingly insurmountable issues with Artificial General Intelligence, Rob Miles takes a look at a promising solution.\n\nConcrete Problems in AI Safety: blah blah blah blah blah blah blah blah blah",
                "thumbnails": {
                    "default": {
                        "url": "https://i.ytimg.com/vi/9nktr1MgS-A/default.jpg",
                        "width": 120,
                        "height": 90
                    },
                    "medium": {
                        "url": "https://i.ytimg.com/vi/9nktr1MgS-A/mqdefault.jpg",
                        "width": 320,
                        "height": 180
                    },
                    "high": {
                        "url": "https://i.ytimg.com/vi/9nktr1MgS-A/hqdefault.jpg",
                        "width": 480,
                        "height": 360
                    },
                    "standard": {
                        "url": "https://i.ytimg.com/vi/9nktr1MgS-A/sddefault.jpg",
                        "width": 640,
                        "height": 480
                    },
                    "maxres": {
                        "url": "https://i.ytimg.com/vi/9nktr1MgS-A/maxresdefault.jpg",
                        "width": 1280,
                        "height": 720
                    }
                },
                "channelTitle": "Computerphile",
                "playlistId": "UU9-y-6csu5WGm29I7JiwpnA",
                "position": 0,
                "resourceId": {
                    "kind": "youtube#video",
                    "videoId": "9nktr1MgS-A"
                }
            }
        },
        {
            ...
        }
    ]
}
playlistItems?fields=nextPageToken,items(snippet(resourceId(videoId)))&maxResults=50&playlistId=PLAYLIST_ID&part=snippet&key=YOUR_TOKEN
{
    "nextPageToken": "CDIQAA",
    "items": [
        {
            "snippet": {
                "resourceId": {
                    "videoId": "9nktr1MgS-A"
                }
            }
        }
    ]
}
playlistItems?fields=nextPageToken,items(snippet(resourceId(videoId)))&maxResults=50&part=snippet&playlistId=PLAYLIST_ID&key=YOUR_TOKEN&pageToken=CDIQAA