Не могу получить чат из потока, которым я не владею

Я не могу использовать API YouTubeService_V3 для чтения сообщений чата из прямой трансляции, которая мне не принадлежит.

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

Я могу использовать YoutubeService/v3/search/list для поиска прямых трансляций, если я задаю EventType на Live и Type на видео, и это подтягивает действительные прямые трансляции при отладке моего кода.

Однако я не могу получить LiveChatID из этих потоков, чтобы использовать его с YouTubeService/v3/LiveChatMessages/List.

Любая помощь с этим была бы очень приятной. Сообщения чата уже общедоступны, поэтому я предполагаю, что проблем с конфиденциальностью нет.

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

Я ожидаю, что у меня будет какой-то способ использовать YouTubeService_V3 для поиска LiveChatID по идентификатору трансляции, а затем иметь возможность использовать этот идентификатор трансляции для чтения сообщений из прямой трансляции, которой я не владею.


person Zachary Sheppard    schedule 30.07.2019    source источник


Ответы (2)


Сначала необходимо отправить запрос youtube/v3/search с идентификатором канала. Когда вы получите идентификатор видео в реальном времени, вам нужно отправить запрос youtube/v3/videos с идентификатором видео, после чего вы сможете получить liveChatID... Вот пример на Python. ..

API_KEY = 'XXXXXXXXXXXXXXXXX'
channelID = '<Some Channel ID>'


params = {'part': 'id',
        'key': API_KEY,
        'channelId': channelID,
        'eventType': 'live',
        'type': 'video',
        'order': 'viewCount',
        'fields': 'items(id(videoId))'}

url = 'https://www.googleapis.com/youtube/v3/search'
r = requests.get(url, headers=None, params=params).json()

vID = r.get('items')[0].get('id').get('videoId')



params = {'part': 'liveStreamingDetails,statistics,snippet',
        'key': API_KEY,
        'id': vID,
        'fields': 'items(id,liveStreamingDetails(activeLiveChatId,concurrentViewers,actualStartTime),' + \
                  'snippet(channelId,channelTitle,description,liveBroadcastContent,publishedAt,thumbnails,title),statistics)'}

url = 'https://www.googleapis.com/youtube/v3/videos'
r = requests.get(url, headers=None, params=params).json()


streamData = dict(r.get('items')[0])

chatID = streamData['liveStreamingDetails']['activeLiveChatId']


params = {'part': 'snippet,authorDetails',
        'key': API_KEY,
        'liveChatId': chatID,
        'profileImageSize': 720,
        'maxResults': 500}

url = 'https://www.googleapis.com/youtube/v3/liveChat/messages'
messages = requests.get(url, headers=None, params=params).json()

#messages contains chat messages

Я бы хотел, чтобы был лучший способ, потому что только «поиск» занимает 100 баллов вашей квоты, а Google дает вам только 10 000 ...

person 010011100101    schedule 01.08.2019
comment
Это очень помогло! Я смог отказаться от использования OAuth и вместо этого просто использовать ключ API. Поскольку я заранее знал идентификатор видео, я смог избежать его поиска, и этот новый метод также немного упрощает мою квоту. Большое спасибо! - person Zachary Sheppard; 08.08.2019

Вы ищете способ читать сообщения чата из прямой трансляции, которой вы не владеете?

Даже если вы знаете liveChatId, вы не можете получать сообщения в чате прямой трансляции, владельцем которой вы не являетесь.

Но я знаю только один способ.

Это сложный метод, но вы можете вызвать чат в Интернете (ссылка https://www.youtube.com/live_chat?v=videoId ).

Затем вы можете получать сообщения чата.

person mwb    schedule 09.08.2019