fala pessoal eu sou o Alisson e esse é o canal programação dinâmica no vídeo de hoje a gente vai usar api do YouTube para ler comentários de alguns vídeos e resolver um problema bem específico aqui do canal né então em alguns vídeos a gente pede para vocês comentarem com uma hashtag específica para a gente saber se vocês gostaram do vídeo se a gente deveria fazer uma continuação ou algum desdobramento né daquele vídeo Então a gente vai usar pelo YouTube para ver a sessão de comentários de alguns vídeos e realmente contar quantos comentários daqui existem em qualquer da hashtag que a gente solicitou assim a gente vai ter uma forma de medir com mais precisão o quanto de esforço você realmente colocaram para quem a gente fizessem mais conteúdo sobre aquele assunto [Música] na prática em que é 15 consumiu a pena no YouTube para ela pegar dados sobre vídeos de uma playlist específica e converter aqueles dados em um Data Frame para ela poder trabalhar depois né então vou deixar esse vídeo aqui em casa para você assistir depois beleza então vamos lá pessoal primeira coisa que a gente tem que fazer é vir aqui no site da Google Cloud né cloud. google. com e entrar nessa área aqui de console porque a gente precisa criar um projeto e também uma chave de Api para a gente poder acessar né a do YouTube de forma identificada Beleza então a gente vai vir aqui na área do console tem essa área aqui ó já no acesso rápido apis e serviços e ele já me joga para essa região onde Inclusive tem aqui nesse YouTube Explorer que eu tava testando né antes da gente poder gravar esse vídeo tá então A ideia é que você vai vir aqui na área de credenciais e você vai criar uma chave de api tá então já tem uma chave de api aqui você pode vir aqui em criar credenciais vai clicar em chave de api E aí ele já tá criando uma chave de api aqui para esse projeto tá então ele tá falando aqui a chave de apei criada tem aqui o identificador da chave né que eu tô ocultando porque são de e você vai copiar Então esse parâmetro você precisar utilizar ele dentro do seu código beleza mas tem algumas coisas a mais né em termos de configurações que você precisa fazer que eu vou te mostrar aqui então uma das coisas que você vai fazer é clicar aqui em ações e editar chave de api E aí aqui embaixo é recomendado que você restrinja né a sua Api para o tipo de api mesmo para os conjuntos de apis que você vai utilizar então aquele lá não tá restrito Ela poderia ser utilizada em qualquer um dos serviços que estiverem ativados né habilitados aqui na plataforma Mas você pode clicar aqui em restringir e escolher por exemplo essa YouTube deitei piai V3 tá só que no caso aí para você é possível que essa youtuber ai não esteja visível nesse momento tá pode ser que ela não esteja ativada Então você vai ter que vir aqui em apis e serviços ativados clicar aqui em ativar aqui ó YouTube deitei piai V3 e você vai clicar para ativar né No meu caso já tá ativada então tem gerenciar mas aqui se não tiver aparecendo lá para ti vai estar aparecendo o botão aqui ativar aí depois de ativar você vai conseguir enxergar ela lá então ainda que você não queira restringir né o acesso algum conjunto de apis da sua chave de api é importante que você ative Se Não Vai Conseguir fazer funcionar Então tá bom agora a gente pode passar para parte de código tá uma das coisas que a gente vai precisar instalar né é essa biblioteca aqui na verdade não é estritamente necessário mas assim é uma mão na roda ajuda a gente bastante né a menos que você quer fazer as requisições diretamente com o equestres por exemplo né ou alguma coisa mais crua mas essa biblioteca aqui né Google oi ela tem alguns métodos que nos ajuda a acessar os serviços da Google e ele tá dizendo aqui pra gente qual que é o nome né Isso aqui é a versão 2.
0 dessa aqui então a gente vai querer instalar essa biblioteca com Python Tá bom então abre aqui um novo projeto com o vscold né abrir uma pasta que não tem nada nesse momento e eu vou criar um ambiente virtual então tô vendo aqui no meu terminal E aí eu vou digitar aqui né Python 3M vem vem se você não conhece ambiente virtuais ou tem alguma dúvida a gente tem um vídeo aqui no canal sobre isso né que eu faço uma explicação vou deixar linkado aqui também para você assistir depois tá então eu vou criar um ambiente virtual aqui nessa pasta chamada vem né você vê que ela já apareceu aqui e por enquanto é isso tá aí eu vou criar um novo arquivo que eu vou chamar aqui de comens ponto pai é onde eu vou trabalhar o visual Studio code Já identificou para mim que eu tenho um ambiente virtual aqui dentro então eu vou abrir um novo terminal aqui e eu já realmente ativou para mim esse ambiente então todas as instalações que eu fizer a partir de agora vai estar nesse Python específico né aqui nessa cópia específica dentro dessa pasta Então a gente vai instalar aqui né o app principal Google show de bola estava para gente então a gente pode começar bom então uma coisa que a gente vai precisar fazer é importar aqui da Google ampliar Clint ponto Discovery né desse submode a gente vai importar esse método aqui um build tá e eu já vou colocar aqui essa condição né para rodar Apenas quando esses script for chamado como principal Inclusive tem um artigo explicando sobre esse aqui na descrição do vídeo Beleza então o que que a gente precisa né a gente vai precisar da nossa chave de api a gente vai precisar especificar qual que é api que a gente quer acessar tá a partir desse Google que a gente poderia acessar outras né como a gente viu lá no painel e a versão dela também Beleza então quer acessar né é a do YouTube na versão 3 e a gente vai conseguir uma referência para chamar os métodos fazer requisições a essa pi justamente utilizando esse método build aqui né Então ele recebe aqui ó serve a gente vai passar aí o nome do YouTube a versão aí tem alguns outros parâmetros aqui que são opcionais e um que a gente precisa passar é esse developer que aqui tá bom então começamos com o nome a versão e de veloper que igual a nossa equipe tá daqui a pouquinho eu vou colocar ela aqui para a gente poder acessar senão você vai obter um erro né se você não passar nada não passar uma API uma chave de api válida então legal a partir desse objeto aqui a gente vai conseguir fazer requisições né Essa é isso é que a gente precisa entender como é que ela funciona e para isso a gente vai olhar a documentação então aqui ó em developers. google. com/ YouTube né/v3/dogs eu tô aqui acessando a documentação da YouTube deitei tô aqui no overview né então tem uma referência aqui e tal e dar umas explicações Gerais que é legal você dá uma olhada para ter uma ideia né de como é que é pay funciona E aí eu sei que eu quero essa sessão aqui ó de trás Tá então não é só se você entrar ali para ler de como você vai entender então essa comets aqui lida com esse recurso que compreende que o comentário que tá no top level né então o comentário que é feito ali no vídeo né numa coisa no YouTube e respostas se elas existirem tá Para que o comentário isso aqui é importante a gente ver porque agora a gente sabe que a gente precisa acessar essa Comet trads e a gente vai olhar que ela tem dois métodos aqui né Onde está onde seria e a gente precisa também olhar como é que é a cara desse recurso aqui como ele tá falando que é uma resposta que tem essa carga aqui né Essa estrutura de Jason o mais importante aqui é esse tal de sniper que ele contém né esse top level com homens que a gente quer descobrir tá E aí também vai ter essa informação se o comentário aí do Top Level e recebeu respostas para ter uma estimativa razoável só olhar para o level já resolveria o nosso caso mas eu fiquei até por questões didática porque ensinar mais recursos para você a gente pode olhar ali nos comentários né nas respostas nos comentários também mas assim é menos provável que tenha respostas de comentários que as pessoas vão colocar hashtag que que a gente pediu né que tem outras informações aqui de identificação né vídeo Então aqui tem uma descrição dessas informações aqui embaixo tá é muito curioso que existe esse wes aqui né nem veio esse aí tava aqui e tal tente receber paz que consta com alguns comentários mas ele fala aqui ó que não container que contém uma lista de respostas a esse comentário né Caso existam mas a explicação aqui embaixo vem dizendo que enfim essas respostas podem estar incompletas né basicamente é isso que ele tá dizendo aqui que não necessariamente todos os comentários que vieram como respostas voltaram e naquela lista que se você realmente quer garantir que você pegou todos você tem que usar a tá então aqui em cima essa Kombi vai servir para você pegar especificamente um comentário e os seus as suas respostas tá bom inclusive um parênteses interessantes né é que esse tipo de comportamento eu e é um indício para a gente de que o YouTube está utilizando um banco de dados não relacional para armazenar esse tipo de coisa né Eu acho que algo que já faria sentido mesmo né pela natureza ali do YouTube e tal tipo uns comentários são uma das coisas mais organizadas inclusive mas essa coisa de assim pode ter Pode não ter né não não me parece ter cara de banco de dados relacional em que as coisas são muito bem estruturadas né seguindo todo um certo esquema e gatilhos não sei que tá parece ser uma coisa mais realmente voltada para casa de uso vai ali pega isso tal tem aquele D pega o que tá ali por baixo porque isso não tão esperado que essa informação esteja completa aqui mas ela vai estar num outro ponto né do documento mas fechando esse parênteses a gente sabe tem que buscar por comitrads e a gente vai querer então o Star né esses comentários Então a gente vai usar esse método list e a gente tem que passar alguns argumentos aqui tem a parte que a gente quer a gente sabe que a gente precisa do Sniper agora certo e aqui tem algumas possibilidades né Para a gente usar para fazer a busca Então a gente vai fazer uma busca pelo identificador do vídeo e outros argumentos que podem ser interessantes né limitar aqui no meio máximo de resultados esse page token que é importante se você precisar paginar porque quem diz aqui que o número máximo é 100 então se tiver mais de 100 comentários vai precisar paginar E aí você vai ter como resposta SP editor O que que você pode otimizar para acessar a próxima página né de comentário na página virtual e bom você poderia fazer busca por um tempo específico não é o caso e o tipo de formato da resposta a gente vai pegar Play text tá não vamos pegar em HTML plantex resolve para nós então eu vou criar uma função aqui na verdade que a gente pode chamar de get comets por exemplo e a gente vai receber Então a nossa referência aqui né para api e vai receber o identificador daquele vídeo né que a gente quer pegar os comentários e a gente pode chamar de repente de get vídeo comets para ser mais específico Então a partir da nossa referência aqui né pela Peri tivesse essa comets como a gente viu lá né construímos aqui esse objeto aí ele tem um método este e esse método este a gente vai passar aqui alguns argumentos né então a gente viu que a gente tinha um argumento parte e aí parte vai ser Snipers a gente tem que passar vídeo aí de E lá o vídeo editar assim né não é com o delinezinho cama Case então o vídeo aí de vai ser esse vídeo é dia aqui a gente tem que passar também o número máximo né de resultados e eu vou deixar aqui como sem e finalmente o tipo né complexo Então essa aqui é a requisição que a gente quer fazer tá aqui a gente está utilizando essas biblioteca para montar requisição para a gente né e a gente precisa executar tá então vou botar aqui dentro de um bloco try Cat porque a gente pode ter uma exceção né um erro aí por exemplo de rede no momento em que a gente fizer essa requisição Então a gente vai inclusive importar aqui né de Google epant errors http erro então se a gente encontrar esse erro a gente vai tratar da forma mais simples que é exibir o erro para nós aí é esse objeto aqui de erro e até tem alguns atributos né que você pode dar uma olhada documentação e de repente especificar e ao invés de fazer uma escrita assim crua mas não é o nosso foco aqui agora tá então aqui dentro do try a gente vai pedir para executar a nossa requisição a gente vai receber né uma resposta aqui na verdade a gente espera tem uma resposta não recebi um erro beleza então essa resposta ela tem a carga especificada aqui ó uma coisa que tem itens E aí cada item tem uma Comet trading que a gente descobriu ali no verview como é que é a carga dela né e inclusive né a gente viu nexpage token lá que na verdade para olhar na paginação provavelmente a gente quer esse nexpage token aqui e não o da Comet trad lá né não sei qual que é a diferença lá mas se Aqui é onde a gente está recebendo a lista né com esses 100 elementos ou máximo né de resultados que a gente solicitou é daqui que a gente quer descobrir o ponteiro né para o próximo conjunto de dados para a gente fazer requisição novamente então para cada item aqui na nossa resposta né na indexada aqui por itens estão usando essa chave a gente vai querer pegar o Sniper E aí a gente pode filtrar algumas coisas né então a gente volta para cá observa novamente o que que a gente quer certamente a gente quer top level comente e o top leva um Comet ele é um commit E aí o comment ele também vai ter um Sniper que inclusive tem mais dados né Tem informações aqui sobre o autor né sobre a pessoa que fez os comentários num outro caso de uso por exemplo poderia ser relevante para alguma coisa para a gente nesse momento não é o que a gente quer na verdade é esse Tex de display aqui né provavelmente é isso que é o texto que tá aparecendo lá e aí tem até contador de like do comentário né quando foi publicado esse tipo de coisa tá então vamos pegar aqui esse Tex e display para cumprir a nossa missão então o comentário ele é a partir do Sniper a gente pegar top level comente aí a gente vai no Sniper dele também e a gente pega text display tá então esse aqui é o texto do comentário e aí a gente pode fazer alguma coisa com isso de repente eu posso salvar isso um arquivo poderia ser até uma coisa mais sofisticada botar um Data Frame depois eles possam ssv eu vou simplesmente salvar para um arquivo aqui eu vou criar uma pasta que eu vou chamar de deita e aí vou criar aqui deitadinho vai ser simplesmente essa ideia e aí eu vou fazer o seguinte eu vou ter uma lista aqui de comentários e eu posso adicionar na minha lista esse comentário né poderia ser Comet Texx E aí depois então eu vou abrir um arquivo tá posso até botar aqui como argumento de repente o nome desse arquivo você vai por exemplo a gente importa o s também pode ser legal e oes.
pf. joy deita Saveiro a referência aí dentro então aí aqui a gente vai abrir esse arquivo não para leitura né que é o padrão aqui eu vou abrir para escrita com adição e aí eu vou começar a escrever nos comentários aí embaixo né eu vou pegar aqui da lista então save Fire ponto right E aí a gente une os comentários com quebra de linhas né então a gente une todos os erros colocando uma quebra de linha entre eles tá e a gente salva nesse arquivo então isso aqui seria suficiente né sabendo que sei lá tem menos de 100 resultados né no nosso caso mas vamos fazer resolver Por Causa Geral né talvez até alguns vídeos tenham mais do que sem comentários não sei o caso geral seria a gente ter que imaginar então para imaginar a gente verifica se o Next page token nexpage token evitar na nossa resposta se tiver Então a gente vai pegar o token como responde token a gente vai fazer uma nova requisição tá igualzinho essa aqui igualzinho já tá dentro do try aqui então a gente já manda executar só que a gente vai passar um argumento mais aqui que é esse peixe token a gente vai passar eu igual ao token que a gente pegou ali então isso aqui vai dar para gente essa resposta e aí a gente quer repetir todo esse trecho aqui né desde ler todos os itens né que tem na resposta que a gente recebeu novamente dessa requisição até verificar se tem uma próxima página né então a gente pode criar aqui uma Flag uma variável Goiana do tipo assim has next né a gente começa dizendo que sim né Tem tem próximo aqui e aí enquanto for verdade isso aqui né a gente vai querer repetir todo esse trecho inclusive vou repetir essa parte aqui de zerar né os comentários né Poderia não fazer assim poderia acumular todos eles numa lei se inscrever só no final mas eu prefiro escrever logo a medida que a gente vai recebendo uma página e até por isso que eu coloquei esse aqui também não w porque o writeria sobre escrever então assim a gente vai adicionando se não tiver aqui né caso contrário caso essa coisa que não não esteja lá a gente vai botar um resnex next igual a falso tá agora aqui embaixo já Adiantei para a gente o seguinte tá para proteger a minha chave de api eu coloquei ela dentro de um arquivo aqui né um outro personagem você colocar como variado de ambiente variável de ambiente aqui no Python né inclusive se você quiser que eu faço conteúdo sobre isso deixa aí comentário para hashtag aqui eu já coloquei também um identificador né um id de um vídeo é um vídeo no canal sobre o meu terceiro ano doutorado no ímpar né esse vídeo aqui né estágio na meta ative no CB graph etc em que eu pedi que vocês escrever esse hashtag pesquisa né se quisesse saber mais sobre como foi o meu estágio lá na meta no reality webs e eu pedi para salvar Então nesse arquivo né Pesquisa ponte XT e Inclusive eu vou mudar o nome aqui da nossa função de get para save né porque é isso que a gente faz né a gente salva aqui no arquivo e a gente pode ter um acompanhamento aqui de repente colocar o número da página [Música] [Aplausos] [Música] vamos rodar vamos rodar e ver o que acontece teve uma página só e parece que terminou aqui os comentários de pesquisa né Eita glória parabéns por todas as conquistas Alisson você quis representam demais e aí Alguns com hashtag pesquisa aqui tá então legal né bom na prática eu poderia pedir para o vice-bs Code contar aqui para gente né mas aí não é ter graça o vídeo né inclusive não ia conseguir ficar replicando isso ia ter que olhar um por um se você quisesse fazer isso em vários vídeos que a gente tem aqui do canal Então vamos completar a parte de fazer a leitura dos comentários e verificar quais deles tem hashtag pesquisa e aí a gente pode fazer da seguinte forma DF count hashtag a gente vai receber então uma lista de comentários e a hashtag desejada E aí a gente vai então para comentário em comentários a gente vai verificar essa hashtag tá lá se hashtag tá em comentário a gente incrementa um computador vou chamar aqui de Counter como zero Counter mais igual a 1 e no final a gente pode retornar Então esse Counter simples assim então a gente conclui o nosso programa da seguinte forma a gente abre esse arquivo aqui né só quando liguei que eu criei essa constante aqui e depois eu cheguei aqui meti um deita no mesmo né ou seja de barulho de nada pronto agora que eu precisei meu erguer disso então a gente vai botar aqui pesquisa Ou melhor se ele tá aqui eu posso escrever como fileman então a gente vai abrir esse arquivo aqui como como E aí os comentários que vai dar para a gente já como uma lista né e a gente pode então resolver usar Nossa função aqui ó count hashtag nos comentários e a hashtag que a gente pensar nesse momento é vamos chamar de pesquisa então count hashtag dessa forma o total é esse na verdade chamar de found né encontradas são esse aqui e a gente pode Exibir o número total de vídeo de comentários no vídeo e o número total de hashtags encontradas tá então usando aqui f- string o número total de comentários é o tamanho da nossa lista comics com a hashtag desejada a gente achou essa quantidade show então assim a gente termina essa parte aqui como eu já tenho o arquivo ali eu não vou rodar de novo essa função aqui de salvar os comentários tá vou dar só essa parte aqui e aí ó de 88 comentários 62 tem a hashtag solicitada tá uma coisa que eu não fiz que deveria ter feito é garantir que ninguém escreveu por exemplo hashtag pesquisa em maiúsculo um Case diferente então para isso eu deveria fazer a verificação se o hashtag tá em lower desse cara tá então bota todo mundo em Caixa Baixa que é o que eu tô olhando aqui e aí eu verifico se atende então a gente pode rodar de novo e olha só olha como mudou tá então Tinham dois comentários que tinham hashtag pesquisa mas estavam com diferença né em maiúsculo e minúsculo aí por isso que não tá identificando uma outra coisa que a gente poderia adicionar né Para dar robustez é de repente identificar Às vezes a pessoa errou uma letra né ou foi ou duas letras enfim Mas dava para entender ali que ela pesquisa a gente poderia ter uma medida né de distância entre essas duas Strings né inclusive Existem algumas medidas aí prontos que a gente poderia implementar mas eu não vou alongar esse vídeo com isso se você tiver interesse nisso você bota aí hashtag medida tá bom só para a gente garantir que funciona direitinho a gente pega um próximo vídeo aqui tá um outro vídeo que aqui Zi me passou que tem esse pedido é esse aqui ela pediu para carregar e escrever #sql tá vendo ó dessa forma e a gente pode então pegar o ID desse vídeo e substituir a ler então vídeo aí de agora vai ser esse aqui a gente vai salvar em sql.