Как получить миниатюру видео YouTube из API YouTube?

Используйте dict в качестве аргумента value в fillna()

Как уже упоминалось в комментарии от @rhkarls о ответе @ Джеффа, используя .loc, проиндексированный в список столбцов, выигранных ' t поддерживают inplace операции, которые я тоже считаю расстраивающими. Вот пример:

Пример:

import pandas as pd
import numpy as np

df = pd.DataFrame({'a':[1,2,3,4,np.nan],
                   'b':[6,7,8,np.nan,np.nan],
                   'x':[11,12,13,np.nan,np.nan],
                   'y':[16,np.nan,np.nan,19,np.nan]})
print(df)
#     a    b     x     y
#0  1.0  6.0  11.0  16.0
#1  2.0  7.0  12.0   NaN
#2  3.0  8.0  13.0   NaN
#3  4.0  NaN   NaN  19.0
#4  NaN  NaN   NaN   NaN

Предположим, мы хотим fillna только для x и y, а не a и b.

Я ожидал бы, что .loc будет работать (как в задании), но это не так, как упоминалось ранее:

# doesn't work
df.loc[:,['x','y']].fillna(0, inplace=True)
print(df) # nothing changed

Однако документация говорит, что аргумент value в fillna() может быть:

поочередно dict / Series / DataFrame значений, определяющих, какое значение использовать для каждого индекса (для серии) или столбцом (для DataFrame). (значения не в файле dict / Series / DataFrame не будут заполнены).

blockquote>

Оказывается, что использование dict значений будет работать:

# works
df.fillna({'x':0, 'y':0}, inplace=True)
print(df)
#     a    b     x     y
#0  1.0  6.0  11.0  16.0
#1  2.0  7.0  12.0   0.0
#2  3.0  8.0  13.0   0.0
#3  4.0  NaN   0.0  19.0
#4  NaN  NaN   0.0   0.0

Также , если в вашем подмножестве имеется много столбцов, вы можете использовать понимание dict, как в:

df.fillna({x:0 for x in ['x','y']}, inplace=True) # also works

2252
задан Salman A 27 April 2015 в 13:47
поделиться

4 ответа

Каждое видео YouTube имеет четыре сгенерированных изображения. Они предсказуемо отформатированы следующим образом:

https://img.youtube.com/vi/<insert-youtube-video-id-here>/0.jpg
https://img.youtube.com/vi/<insert-youtube-video-id-here>/1.jpg
https://img.youtube.com/vi/<insert-youtube-video-id-here>/2.jpg
https://img.youtube.com/vi/<insert-youtube-video-id-here>/3.jpg

Первый в списке - это полноразмерное изображение, а другие являются миниатюрами изображения. Изображение миниатюр по умолчанию (т. Е. Один из 1.jpg , 2.jpg , 3.jpg ):

https://img.youtube.com/vi/<insert-youtube-video-id-here>/default.jpg

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

https://img.youtube.com/vi/<insert-youtube-video-id-here>/hqdefault.jpg

Существует также версия миниатюра средней качества, используя URL, аналогичный Hq:

https://img.youtube.com/vi/<insert-youtube-video-id-here>/mqdefault.jpg

для версии стандартного определения миниатюры, используйте URL, аналогичный этому:

https://img.youtube.com/vi/<insert-youtube-video-id-here>/sddefault.jpg

Для максимального разрешения версии миниатюр используйте URL, аналогичный этому:

https://img.youtube.com/vi/<insert-youtube-video-id-here>/maxresdefault.jpg

Все вышеперечисленные URL доступны по сравнению с http. Кроме того, немного более короткое имя хоста I3.YTIMG.COM работает на месте IMG.youtube.com в примерных URL-адресах выше.

В качестве альтернативы вы можете использовать API API YouTube (v3) для получения миниатюрных изображений.

4400
ответ дан 22 November 2019 в 19:55
поделиться

Сохраните этот код в пустом .php файле и протестируйте его.

<img src="<?php echo youtube_img_src('9bZkp7q19f0', 'high');?>" />
<?php
// Get a YOUTUBE video thumb image's source url for IMG tag "src" attribute:
// $ID = YouYube video ID (string)
// $size = string (default, medium, high or standard)
function youtube_img_src ($ID = null, $size = 'default') {
    switch ($size) {
        case 'medium':
            $size = 'mqdefault';
            break;
        case 'high':
            $size = 'hqdefault';
            break;
        case 'standard':
            $size = 'sddefault';
            break;
        default:
            $size = 'default';
            break;
    }
    if ($ID) {
        return sprintf('https://img.youtube.com/vi/%s/%s.jpg', $ID, $size);
    }
    return 'https://img.youtube.com/vi/ERROR/1.jpg';
}

Спасибо.

0
ответ дан 22 November 2019 в 19:55
поделиться

Вы можете получить видео в видео , который содержит URL к миниатюру видео. В ссылке есть пример код. Или, если вы хотите разбирать XML, есть информация здесь . Возвращенный XML имеет мультимедиа : эскиз элемент, который содержит URL миниатюр.

29
ответ дан 22 November 2019 в 19:55
поделиться

Вы можете использовать YouTube Data API для получения эскизов, подписи, описания, рейтинга, статистики и многого другого. API версии 3 требует ключа*. Получите ключ и создайте видео: list request:

https://www.googleapis.com/youtube/v3/videos?key=YOUR_API_KEY&part=snippet&id=VIDEO_ID

Example PHP Code

$data = file_get_contents("https://www.googleapis.com/youtube/v3/videos?key=YOUR_API_KEY&part=snippet&id=T0Jqdjbed40");
$json = json_decode($data);
var_dump($json->items[0]->snippet->thumbnails);

Output

object(stdClass)#5 (5) {
  ["default"]=>
  object(stdClass)#6 (3) {
    ["url"]=>
    string(46) "https://i.ytimg.com/vi/T0Jqdjbed40/default.jpg"
    ["width"]=>
    int(120)
    ["height"]=>
    int(90)
  }
  ["medium"]=>
  object(stdClass)#7 (3) {
    ["url"]=>
    string(48) "https://i.ytimg.com/vi/T0Jqdjbed40/mqdefault.jpg"
    ["width"]=>
    int(320)
    ["height"]=>
    int(180)
  }
  ["high"]=>
  object(stdClass)#8 (3) {
    ["url"]=>
    string(48) "https://i.ytimg.com/vi/T0Jqdjbed40/hqdefault.jpg"
    ["width"]=>
    int(480)
    ["height"]=>
    int(360)
  }
  ["standard"]=>
  object(stdClass)#9 (3) {
    ["url"]=>
    string(48) "https://i.ytimg.com/vi/T0Jqdjbed40/sddefault.jpg"
    ["width"]=>
    int(640)
    ["height"]=>
    int(480)
  }
  ["maxres"]=>
  object(stdClass)#10 (3) {
    ["url"]=>
    string(52) "https://i.ytimg.com/vi/T0Jqdjbed40/maxresdefault.jpg"
    ["width"]=>
    int(1280)
    ["height"]=>
    int(720)
  }
}

* Мало того, что вам нужен ключ, вас могут попросить предоставить биллинговую информацию в зависимости от количества запросов API, которые вы планируете сделать. Однако, несколько миллионов запросов в день являются бесплатными. Статья-источник

Источник.

385
ответ дан 22 November 2019 в 19:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: