CoderCastrov logo
CoderCastrov
Ютуб

Как получить данные с YouTube с помощью YouTube API (Python)

Как получить данные с YouTube с помощью YouTube API (Python)
просмотров
5 мин чтение
#Ютуб

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

В этой статье я расскажу вам о процессе подключения к YouTube API и парсинге данных с выбранного вами YouTube-канала, пошагово.

Чтобы увидеть аналитику и код, не стесняйтесь заглянуть на мой GitHub: https://github.com/Nattaya24/youtube_api_scraping_and_analysis



Подключение к YouTube API

Шаг 1: Перейдите по ссылке https://console.cloud.google.com/ и зарегистрируйтесь, используя свою учетную запись Gmail.

Шаг 1

Шаг 2: Чтобы создать новый проект, просто нажмите на поле проекта и выберите "Создать проект".

Шаг 2

Дайте название своему проекту.

Шаг 2

Шаг 3: Выберите проект, с которым вы хотите работать. > API и сервисы > Учетные данные

Шаг 3 Шаг 3

Скопируйте созданный вами ключ API.

Шаг 3

Шаг 4: Найдите продукт под названием "YouTube Data API v3". Нажмите "Включить".

Шаг 4

Шаг 5: Установите Google API в свой скрипт. Автор использует Python для проекта. Ниже приведен код подключения к Google API. Не забудьте установить пакет Google API.

pip3 install — upgrade google-api-python-client

Шаг 5

Шаг 6: У нас есть ключ API Google из предыдущего шага. Чтобы было удобнее организовать код, вы можете создать константную переменную для вашего api_key, как показано на картинке ниже. В примере кода я определил его как функцию (на случай, если я захочу повторно использовать его).

def get_channel(idChannel = ""):
    # Отключение проверки HTTPS OAuthlib при запуске локально.
    # *НЕ* оставляйте эту опцию включенной в продакшене.
    os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = "1"

    api_service_name = "youtube"
    api_version = "v3"
    

    # Получение учетных данных и создание клиента API
    youtube = googleapiclient.discovery.build(
        api_service_name, api_version, developerKey=api_key)

    request = youtube.channels().list(
        part="snippet,contentDetails,statistics",
        id=idChannel
    )
    response = request.execute()
    print(response)

Для подключения к YouTube API нам необходимо найти идентификатор канала, который мы передадим в качестве параметра, и который мы определили на предыдущем шаге.

Как мы можем найти идентификатор YouTube канала ?????

В моем проекте я собрал данные с моего любимого YouTube канала "Lavendaire".

Шаг 7: Найти идентификатор канала. Самый простой способ сделать это - щелкнуть правой кнопкой мыши на канале и выбрать "Просмотреть исходный код".

Установите флажок "wrap", чтобы легко просматривать этот файл.

Command+F для пользователей Mac и найдите "?channel_id". Скопируйте это значение и вставьте в постоянную переменную.

Передайте channel_id в функцию get_channel(), которую мы создали. Тадаааа. Подробная информация об этом канале появится в результате.

Шаг 8: Извлечение информации о канале и идентификатора плейлиста.

#Извлечение данных о канале
data_all = []

for item in result['items']:
    data = {'channelName': item['snippet']['title'],
            "subscribers": item['statistics']['subscriberCount'],
            "subscribers": item['statistics']['viewCount'],
            "views": item['statistics']['viewCount'],
            "totalVideo": item['statistics']['videoCount'],
            "playlistID": item['contentDetails']['relatedPlaylists']['uploads']
        
    }
    data_all.append(data)

    
pd.DataFrame(data_all)

Вот и все. У нас есть общая информация, такая как "подписчики", "общий просмотр" и PlaylistID, который мы будем использовать для поиска подробностей о каждом видео из этого канала.

Шаг 9: Получение идентификаторов видео

Мы будем использовать "playlist_id", который мы получили на предыдущем шаге, чтобы передать его в функцию get_video_ids(), как показано в коде ниже.

#Получение последних 50 списков
playlist_id = "UU-ga3onzHSJFAGsIebtVeBg"

def get_video_ids(playlistID= ""):
   
    video_ids = []
    
    os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = "1"

    api_service_name = "youtube"
    api_version = "v3"

    # Получение учетных данных и создание клиента API
    youtube = googleapiclient.discovery.build(
        api_service_name, api_version, developerKey=api_key)

    request = youtube.playlistItems().list(
        part="snippet,contentDetails",
        playlistId=playlistID,
        maxResults = 50
    )
    response = request.execute()
    
    #Извлечение идентификатора видео
    for item in response['items']:
        video_ids.append(item['contentDetails']['videoId'])
        
    return video_ids

Результат, который вы получите, будет списком идентификаторов видео, как показано на картинке ниже.

Мы можем получить только 50 идентификаторов с бесплатной учетной записью. Однако есть несколько хитростей, чтобы получить все видео, но это немного сложно. Вы можете следовать приведенному ниже коду.

#Получение всех идентификаторов плейлиста

def get_video_ids2(playlistID=""):
    video_ids = []

    os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = "1"

    api_service_name = "youtube"
    api_version = "v3"

    # Получение учетных данных и создание клиента API
    youtube = googleapiclient.discovery.build(api_service_name, api_version, developerKey=api_key)

    request = youtube.playlistItems().list(
        part="contentDetails",
        playlistId=playlistID,
        maxResults=50
    )
    response = request.execute()

    # Извлечение идентификаторов видео
    for item in response['items']:
        video_ids.append(item['contentDetails']['videoId'])

    next_page_token = response.get('nextPageToken')
    while next_page_token is not None:
        request = youtube.playlistItems().list(
            part="contentDetails",
            playlistId=playlistID,
            maxResults=50,
            pageToken=next_page_token
        )
        response = request.execute()

        for item in response['items']:
            video_ids.append(item['contentDetails']['videoId'])

        next_page_token = response.get('nextPageToken')

    return video_ids

Теперь мы можем получить все videoIDs, которые были созданы в этом канале.

Шаг 10: Получение подробной информации о видео

def get_video_details(video_ids):
    all_video_info = []
    
    os.environ["OAUTHLIB_INSECURE_TRANSPORT"] = "1"
    api_service_name = "youtube"
    api_version = "v3"
    client_secrets_file = "YOUR_CLIENT_SECRET_FILE.json"

    # Получение учетных данных и создание клиента API

    youtube = googleapiclient.discovery.build(
        api_service_name, api_version, developerKey=api_key)

    request = youtube.videos().list(
            part="snippet,contentDetails,statistics",
            id= video_ids
        )
    response = request.execute()

    for video in response['items']:
        stats_to_keep = {
            "snippet": ['channelTitle', 'title', 'description', 'publishedAt'],
            "statistics": ['viewCount', 'likeCount',  'commentCount'],
            "contentDetails": ['duration', 'definition', 'caption']
            }
        video_info = {}
        video_info['video_id'] = video['id']

        for key in stats_to_keep.keys():
            for v in stats_to_keep[key]:
                video_info[v] = video[key][v]

        all_video_info.append(video_info)
    return pd.DataFrame(all_video_info)

Результат будет выглядеть так.

Поскольку мы используем бесплатную учетную запись, нам разрешено получать только 50 строк за раз. Что я сделал, так это получить информацию по 50 за раз, а затем объединить DataFrame вместе.

Вот и все! Мы закончили. Вот мой способ сбора данных с YouTube. Надеюсь, это будет полезно для изучающих данные, которые хотят собирать данные и работать над интересными проектами.

Чтобы увидеть часть аналитики, не стесняйтесь заглянуть на мой GitHub: https://github.com/Nattaya24/youtube_api_scraping_and_analysis

Увидимся в следующий раз!!!!!