CoderCastrov logo
CoderCastrov
YouTube

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

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

В цифровую эпоху 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.

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

Step 2

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

Step 2

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

Step 3

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

Step 3

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

Step 4

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

pip3 install — upgrade google-api-python-client

Step 5

Используемые библиотеки и пакеты

Шаг 6: У нас есть ключ Google API из предыдущего шага. Чтобы было легче организовать код, вы можете создать константную переменную для вашего 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 нам необходимо найти ChannelID, который мы определили на предыдущем шаге, и передать его в качестве параметра функции.


Как мы можем найти идентификатор 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

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

Шаг 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 кусков информации за раз, а затем объединил фреймы данных вместе.

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

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

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