Как я могу получить все идентификаторы видео с канала Youtube - PullRequest
11 голосов
/ 13 июня 2011

Как я могу получить все идентификаторы видео из фида данных youtube?

Я получаю фид youtube по этому URL (API): http://gdata.youtube.com/feeds/base/users/#userid#/uploads?alt=rss&v=2&orderby=published&client=ytapi-youtube-profile

Я уже знаю, как извлечьссылки, описания и эскизы с канала, но я хочу извлечь все идентификаторы видео из канала (например, http://www.youtube.com/watch?v=WWooNnPnHTs)

Ответы [ 7 ]

4 голосов
/ 15 июля 2013

Это мой путь. Медленно, но это работает. :)

function getVideos($channel){
    if($channel == ""){
        return false;   
    }
    /* Get number of videos */
    $books = simplexml_load_file('http://gdata.youtube.com/feeds/base/users/'.$channel.'/uploads?max-results=1&start-index=1');
    $numb_videos = $books->children( 'openSearch', true )->totalResults; 
    settype($numb_videos, "integer");

    $ids = array();
    $i = 1;
    for($i = 1; $i <= $numb_videos; $i++){
        $books = simplexml_load_file('http://gdata.youtube.com/feeds/base/users/'.$channel.'/uploads?max-results=1&start-index='.$i);
        $ApiLink  = $books->entry->id;
        settype($ApiLink, "string");
        $ApiLink = str_replace("http://gdata.youtube.com/feeds/base/videos/", "", $ApiLink);
        array_push($ids, $ApiLink);
    }
    return $ids;    
}
3 голосов
/ 15 января 2014

Используйте это:

GET https://www.googleapis.com/youtube/v3/search?part=id&channelId=UC9MAhZQQd9egwWCxrwSIsJQ&maxResults=10&order=date&key={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"
}
}
]
}

Для получения дополнительной информации вы можете проверить здесь

2 голосов
/ 17 июля 2013
$channelsResponse = $youtube->channels->listChannels('id,contentDetails', array(
    'mine' => 'true'));

$playlistId = $channelsResponse['items']['contentDetails']['relatedPlaylists']['uploads'];
$searchResponse = $youtube->playlistItems->listPlaylistItems('snippet', array(
        'playlistId' => $playlistId,
        'maxResults' => 50,
        'fields' => 'items(snippet(publishedAt,channelId,title,description,thumbnails(default),resourceId)),pageInfo,nextPageToken'));

echo json_encode($searchResponse['items']['contentDetails']['videoId']);

Для этого используйте API данных YouTube v3. вот ссылка

0 голосов
/ 03 августа 2017

Может показаться, что search API - это хорошая идея для извлечения всех видео за один цикл, но, видимо, нет.Если на канале есть тысячи (более 1600) видео, search не вернет их все: несколько страниц с последними результатами будут пустыми, число результатов будет неправильным, а количество данных страниц будет около 20 страниц..

Итак, если вам нужно получить все идентификаторы через API, то лучше сначала использовать channels API для получения идентификатора "загружаемых" списков воспроизведения, а затем использовать его в playlistItems API для получениявсе видео.

URL первого запроса будет выглядеть следующим образом (конечно, с использованием https://www.googleapis.com/youtube/v3/ в начале):

channels?part=contentDetails&id=CHANNEL_ID&key=YOUR_TOKEN

Результат:

{
    "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"
                }
            }
        }
    ]
}

Или, если вам не нужны тонны байтов, используйте поля фильтра, например:

channels?fields=items(contentDetails(relatedPlaylists(uploads)))&part=contentDetails&id=CHANNEL_ID&key=YOUR_TOKEN

Отфильтрованный результат:

{
    "items": [
        {
            "contentDetails": {
                "relatedPlaylists": {
                    "uploads": "UU9-y-6csu5WGm29I7JiwpnA"
                }
            }
        }
    ]
}

Следующий шаг - получить список всех страниц сvideos:

playlistItems?maxResults=50&playlistId=PLAYLIST_ID&part=snippet&key=YOUR_TOKEN

Результат (сокращен на 1-й результат массива в ключе items):

{
    "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"
                }
            }
        }
    ]
}

Вы можете получить следующие страницы, используя значение ключа nextPageToken, добавив его to Получить параметры с помощью клавиши pageToken:

(я взял токен из приведенного выше результата, например, он может отличаться для вашего запроса)

playlistItems?fields=nextPageToken,items(snippet(resourceId(videoId)))&maxResults=50&part=snippet&playlistId=PLAYLIST_ID&key=YOUR_TOKEN&pageToken=CDIQAA

На последней странице не будет клавиши nextPageToken.

0 голосов
/ 21 апреля 2014

Примечание: преобразование массива в строку в

C:\wamp\www\youtube-vimeo-api-playlist-to-database-importer-master\youtube-vimeo-api-playlist-to-database-importer.php

в строке 28

0 голосов
/ 02 июня 2013

Я знаю, что это старый вопрос, но я написал кое-что, что делает то, о чем просят здесь:

https://gist.github.com/gport/5693404

Просто отредактируйте строку 23:

return $videoids[array_rand($videoids)];

Кому:

return $videoids;

Будет возвращен массив, содержащий идентификаторы видео пользователя:)

edit: извините, ребята (@testing, @Code_Ed_Student), не знаю почемуgist больше не существует, но я нашел его в своих архивах, код ниже.Реализация немного отличается от старого примера, но это достигается тем же (вы можете заменить массив любой другой логикой).

    $feedresult = simplexml_load_file('http://gdata.youtube.com/feeds/api/users/wondervol/uploads');

    if($feedresult) {

    $videoids = array();

    foreach ($feedresult->entry as $video) {

            $media = $video->children('media', true);
            $url = (string)$media->group->player->attributes()->url;
            $index = strrpos($url, "&");
            $url = substr($url, 0, $index);
            $index = strrpos($url, "watch");
            $url = substr($url, $index + 8, strlen($url) - ($index + 8)); 

            $videoids[] = $url;

    }
0 голосов
/ 13 июня 2011

Привет, я думаю, вам нужно получить значение из параметра v в ссылке на видео, вы можете использовать регулярные выражения или подстроки ...

...