...

Coletando comentários do Youtube usando o Youtube Data API - Parte 1

kim kataguiri

Introdução

Neste artigo, mostrarei como usar a API do YouTube para coletar dados de vídeos e comentários.

Hoje em dia, é comum ver análises com dados do Twitter, desde o GPS ideológico da Folha SP ao projeto Politoscope na França. Eu também escrevi sobre isso para o EBICC, evento de ciências cognitivas 2019 na Unicamp.

Minha experiência na área está mais relacionada à política, mas você pode encontrar muitos usos para análise de mídias sociais. Na política, é comum usá-los para medir intenção de votos, espectro político e para ver estrutura narrativa, no meu caso, apliquei o algoritmo LDA nos comentários do Youtube para descobrir os tópicos mais falados durante a eleição de 2018.

Um ponto interessante sobre esse assunto, que também faz parte dos objetivos do Politoscope, é levar conhecimento sobre como essas técnicas funcionam para o público em geral, muitas pessoas já sabem que seus dados são coletados, mas não sabem o que os interessados estão fazendo com esses dados, trazer o conhecimento de como essas técnicas funcionam pode ajudar no debate sobre o assunto.

Antes de começar, preciso destacar algumas limitações, nas mídias sociais existem muitos perfis pagos e robôs que produzem notícias falsas ou informações artificiais que não correspondem às opiniões reais da maioria dos usuários, geralmente são usados para melhorar a reputação de um político e destruir a reputação do seu concorrente. Assim, caso você vá medir a intenção de votos, os perfis pagos e robôs vão influenciar os resultados.

Outra coisa importante é ficar atento à metodologia utilizada porque podem existir outras implicações e causas para explicar seus resultados, um exemplo que vi, é usar a análise de sentimento para medir o impacto da notícia falsa na opinião pública, o problema é que sentimento não expressa acordo ou desacordo.

Em uma situação de tragédia por exemplo é esperado que a maior parte do sentimento seja negativo, mas esse sentimento não indica que quem o expressou não acredita que o fato ocorreu, Outro exemplo é um pouco mais polêmico, ocorre quando o público expressa sentimentos negativos entre si por pensar diferente sobre um assunto específico, portanto não é possível distinguir uma opinião da outra.

Em outras palavras, a análise de sentimento não leva em consideração o conteúdo da mensagem, então usuários com opiniões diferentes podem ser agrupados em um sentimento único.

Se você quiser ler mais sobre os desafios e dificuldades da análise de mídia social, você pode ler o artigo de Renee Boucher Ferguson.

Gerando credenciais para acessar a API

Agora, a primeira coisa a fazer é acessar o console do desenvolvedor do Google, e fazer login usando o seu Gmail. Se for a primeira vez, você precisará aceitar os termos e condições.

Crie um projeto clicando no botão Novo Projeto, neste tutorial usaremos as informações padrão, mas você pode editar se quiser, como nome, organização, etc. Em seguida, clique em credenciais, e depois clique em criar credenciais. Irão aparecer algumas opções, vamos usar a mais simples, selecione a opção Chave de API.

Depois de criar a chave, vá para o dashboard (painel) e clique em enable APIs and services (ativar APIs e serviços), lá você verá um campo para pesquisa APIs e serviço, procure por Youtube Data Api, clique nele e pronto.

Você precisará baixar a biblioteca da API em sua máquina, para fazer isso digite no terminal:

pip install --upgrade google-api-python-client pip install --upgrade google-auth-oauthlib google-auth-httplib2

Agora você está pronto para usar a API, crie um arquivo e importar a biblioteca em seu código, digite:

import googleapiclient.discovery my_api_key = 'YOUR KEY HERE' # Remember to paste your key here api_service_name = ‘youtube’ api_version = ‘v3’ youtube = googleapiclient.discovery.build( api_service_name, api_version, developerKey = my_api_key)

Crie uma função para coletar dados de vídeo

Digite e observe o seguinte código:

def collect_video_data(q, y): """ This function collects data from YouTube videos :param q: words used to search for videos on Youtube :param y: year :return: Returns data from searched YouTube videos """ results = youtube.search().list( part='snippet', q=q, type='video', publishedAfter=y+'-01-01T00:00:00Z', publishedBefore=y+'-12-31T00:00:00Z', order='viewCount', maxResults=50 ).execute() print('50 videos returned') return results

Esta função recebe dois parâmetros, o primeiro é a palavra usada pela API para busca de vídeos no Youtube, o segundo é o ano que utilizo para obter vídeos em um ano específico. O segundo parâmetro que usei em minha pesquisa para separar as amostras por ano.

Esta função retorna muitos dados sobre o vídeo encontrado, se você quiser apenas algumas informações específicas sobre o vídeo você pode definir o parâmetro chamado 'parte', acesse a documentação, e olhe o nome das propriedades retornadas pela API para escolher um valor válido para este parâmetro. Nesse caso, a propriedade snippet nos retorna as informações de que precisamos, como título e id do vídeo.

Os parâmetros publishedAfter e publishedBefore definem o período, neste caso, procuraremos os vídeos publicados no período de 1 de janeiro de 2018 a 31 de dezembro de 2018. O parâmetro order define se a função retorna os vídeos mais vistos ou mais relevantes, este parâmetro aceita outros valores, na documentação mostra outros valores válidos e o que cada um significa. Escolhi o mais visto (viewCount) porque geralmente tem mais comentários.

O parâmetro maxResults define o número máximo de dados que podem ser retornados pela função, o valor máximo permitido é 50, mas é possível coletar mais de 50 colocando a função em um loop, faremos isso quando coletarmos os comentários do vídeo porque os vídeos têm mais comentários do que o limite de maxResults nos permite coletar.

Para cada vídeo que ele retorna, os dados estão no seguinte formato:

{ ;kind;: ;youtube#searchResult;, ;etag;: ;;p4VTdlkQv3HQeTEaXgvLePAydmU/EJxKkgAmsuSsRl9cVoyWW8iBneY;;, ;id;: {;kind;: ;youtube#video;, ;videoId;: ;VIDEO ID;}, ;snippet;: {;publishedAt;: ;2018-10-05T11:00:09.000Z;, ;channelId;: ;UC- 6xqzMBF2CXTImn_a4aCVg;, ;title;: ;TITLE;, ;description;:DESCRIPTION.;, ;thumbnails;: {;default;: {;url;: ;IMAGE.jpg;, ;width;: 120, ;height;: 90}, ;medium;: {;url;: ;IMAGE.jpg;, ;width;: 320, ;height;: 180}, ;high;: {;url;: ;IMAGE.jpg;, ;width;: 480, ;height;: 360}}, ;channelTitle;: ;CHANNEL;, ;liveBroadcastContent;: ;none;} }

Agora, vamos selecionar as informações que queremos e colocá-las em um arquivo JSON.

def format_information(video_list, name): """ This function formats the information of the collected videos and writes them to a JSON file :param video_list: Youtube video data :param name: name of the JSON file :return: JSON file """ text = '[' for video in video_list['items']: info = video['id'] text += '{\n' text += '"' + 'ID": ' + '"' + str(info['videoId']) + '",\n' info = video['snippet'] text += '"' + 'Title": ' + '"' + str(info['title']) + '",\n' text += '"' + 'Channel": ' + '"' + str(info['channelTitle']) + '",\n' text += '"' + 'Date": ' + '"' + str(info['publishedAt']) + '",\n' text += '"' + 'Description": ' + '"' + str(info['description']) + '",\n},\n' text += ']' with open('database/videos/'+name+'.json', 'w', encoding="utf8") as file: file.write(text) print('Information was stored in json file')

Esta é uma função muito simples, ela seleciona os nomes dos campos que possuem as informações que desejamos e armazena em uma string, após isso colocamos o código em um loop para percorrer a lista de 50 vídeos retornados pela API.

Depois de implementar as funções, escreveremos um código para chamá-las.

words = ['cs go', 'anime', 'basketball'] year = '2018' for word in words: videos = collect_video_data(word, year) format_information(videos, word)

Para fins de demonstração, escolhi três palavras simples sobre coisas que gosto como palavras-chave.

O código está disponível no meu Github, até agora coletamos os dados dos vídeos, na próxima coletaremos os comentários dos vídeos.

1

Ir para a página

2

Minhas mídias sociais 😊

Meu portfolio

lattes curriculum

Contate-me 🤗

mail

tsukasa.renato@gmail.com

14 997468186