Как получить данные с YouTube с помощью YouTube API (Python)
В цифровую эпоху 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: Чтобы создать новый проект, просто нажмите на поле проекта и выберите "Создать проект".
Дайте название вашему проекту.
Шаг 3: Выберите проект, с которым вы хотите работать. > API и сервисы > Учетные данные
Скопируйте созданный вами ключ API.
Шаг 4: Найдите продукт под названием "YouTube Data API v3". Нажмите "Включить".
Шаг 5: Установите Google API в свой скрипт. Автор использует Python для проекта. Ниже приведен код для подключения к Google API. Не забудьте установить пакет Google API.
pip3 install — upgrade google-api-python-client
Используемые библиотеки и пакеты
Шаг 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
Увидимся в следующий раз!!!!!