[tubeR] Collecter des données sur Youtube

Introduction

La librairie TubeR permet de collecter les données de Youtube, mais demande au préalable d’avoir un compte sur google et d’activer l’API. Pour plus d’information, regardez le lien sur l’API.

Librairie

library(tuber)

La librairie possède 39 fonctions, mais nous allons nous concentrer sur les 6 suivantes:

FonctionUtilité
yt_oauth()Connecter R au compte youtube
yt_search()Outil principal de recherche de vidéos, chaînes et playlists
list_channel_videos()Liste les vidéos d’une chaîne
get_channel_stats()Liste des statistiques d’une chaîne
get_stats()Stats d’une vidéo
get_all_comments()Obtenir les commentaires d’une vidéo
ls("package:tuber")
##  [1] "delete_captions"             "delete_channel_sections"    
##  [3] "delete_comments"             "delete_playlist_items"      
##  [5] "delete_playlists"            "delete_videos"              
##  [7] "get_all_channel_video_stats" "get_all_comments"           
##  [9] "get_captions"                "get_channel_stats"          
## [11] "get_comment_threads"         "get_comments"               
## [13] "get_playlist_items"          "get_playlists"              
## [15] "get_related_videos"          "get_stats"                  
## [17] "get_subscriptions"           "get_video_details"          
## [19] "list_abuse_report_reasons"   "list_caption_tracks"        
## [21] "list_channel_activities"     "list_channel_resources"     
## [23] "list_channel_sections"       "list_channel_videos"        
## [25] "list_guidecats"              "list_langs"                 
## [27] "list_my_channel"             "list_my_videos"             
## [29] "list_regions"                "list_videocats"             
## [31] "list_videos"                 "read_sbv"                   
## [33] "upload_caption"              "upload_video"               
## [35] "yt_authorized"               "yt_oauth"                   
## [37] "yt_search"                   "yt_token"                   
## [39] "yt_topic_search"

Se connecter

Pour se connecter depuis R sur votre application youtube, vous devez utiliser l’id client de votre API et le code secret créés préalablement avec l’application faites sur l’API. [Pour plus d’informations, regarder le tuto sur l’API]:

Note: Ces informations doivent rester confidentielles, voilà pourquoi l’exemple est censuré.

client_id <- "XXXXXXXXX"
client_secret <- "XXXXXXXXX"

Ensuite, nous pouvons lancer la connexion:

yt_oauth(app_id = client_id,
         app_secret = client_secret,
         token = '')

Il faut suivre manuellement les étapes qui s’affichent à l’écran et aller jusqu’au bout. Il est possible que des messages demandant si vous êtes sûre de poursuivre la connexion apparaissent et c’est complètement normal. C’est parce que l’application vous permet de gérer votre compte aussi (donc faire des actions avec), donc youtube souhaites être sûre que vous savez que votre compte sera contrôlé depuis l’extérieur (par vous uniquement). [Pour plus d’informations, regarder le tuto sur l’API]

Note sur les comptes et les vidéos

Les principales informations que nous allons utiliser pour rechercher des données se trouvent dans les urls. Voici l’exemple du lien d’un compte:

https://www.youtube.com/channel/UCINb0wqPz-A0dV9nARjJlOQ

L’id d’une chaîne se trouve après le dernier “/”, dans notre cas l’id de la chaîne est “UCINb0wqPz-A0dV9nARjJlOQ”.

Le lien d’une playlist:

https://www.youtube.com/playlist?list=PLLoPYaJqlcK5xkoTBELtXQzNX94JuWAmJ

L’id de la playlist se trouve après se trouve après le signe “=”, donc l’id de notre playlist est “PLLoPYaJqlcK5xkoTBELtXQzNX94JuWAmJ”

Et le lien d’une vidéo:

https://www.youtube.com/watch?v=DggHeuhpFvg

Ici, l’id des vidéos se trouve après le signe “=”, donc l’id de cette vidéo est “DggHeuhpFvg”.

Les fonctions

get_channel_stats()

Pour obtenir les statistiques d’une chaîne (titre de la chaîne, nombre de vue, nombre d’abonnés et nombre de vidéos) sous forme d’une liste il suffit d’utiliser la fonction get_channel_stats():

youtube_2 <- get_channel_stats(channel_id = "UCINb0wqPz-A0dV9nARjJlOQ")
dplyr::glimpse(youtube_2)
## List of 5
##  $ kind      : chr "youtube#channel"
##  $ etag      : chr "SOuvyWXlGv2IG_seFhesbGmLUXo"
##  $ id        : chr "UCBV194XNr6CIQCCuw1v2rMQ"
##  $ snippet   :List of 7
##   ..$ title      : chr "dataslice"
##   ..$ description: chr "High quality tutorials related to all things data"
##   ..$ customUrl  : chr "dataslice"
##   ..$ publishedAt: chr "2020-05-05T05:07:53.938698Z"
##   ..$ thumbnails :List of 3
##   .. ..$ default:List of 3
##   .. ..$ medium :List of 3
##   .. ..$ high   :List of 3
##   ..$ localized  :List of 2
##   .. ..$ title      : chr "dataslice"
##   .. ..$ description: chr "High quality tutorials related to all things data"
##   ..$ country    : chr "US"
##  $ statistics:List of 4
##   ..$ viewCount            : chr "165729"
##   ..$ subscriberCount      : chr "4100"
##   ..$ hiddenSubscriberCount: logi FALSE
##   ..$ videoCount           : chr "20"

list_channel_videos()

Permet d’afficher la liste des vidéos d’une chaîne:

youtube_3 <- list_channel_videos(channel_id = "UCc8Virf32yXPVNO68bU6AuA")
dplyr::glimpse(youtube_3)
## Rows: 19
## Columns: 5
## $ kind                            <chr> "youtube#playlistItem", "youtube#playl~
## $ etag                            <chr> "cavdEpSxgdy-TnjMajW_wMwc-wA", "0YCtPs~
## $ id                              <chr> "VVVjOFZpcmYzMnlYUFZOTzY4YlU2QXVBLkRfU~
## $ contentDetails.videoId          <chr> "D_P5OcF0xp0", "krV_S5hMqVk", "4kLHdzq~
## $ contentDetails.videoPublishedAt <chr> "2020-03-26T03:29:06Z", "2019-09-16T14~

get_stats()

Permet d’obtenir les statistiques d’une vidéo (titre, nombre de like, nombre de dislike, nombre de vue, nombre de commentaires):

youtube_4 <- get_stats(video_id = "Q5yVoTqD06M")
dplyr::glimpse(youtube_4)
## List of 6
##  $ id           : chr "Q5yVoTqD06M"
##  $ viewCount    : chr "31170"
##  $ likeCount    : chr "747"
##  $ dislikeCount : chr "13"
##  $ favoriteCount: chr "0"
##  $ commentCount : chr "96"

get_all_comments()

Permet d’obtenir tous les commentaires d’une vidéo:

youtube_5 <- get_all_comments(video_id = "Q5yVoTqD06M")
dplyr::glimpse(youtube_5)
## Rows: 93
## Columns: 15
## $ videoId               <chr> "Q5yVoTqD06M", "Q5yVoTqD06M", "Q5yVoTqD06M", "Q5~
## $ textDisplay           <chr> "Watch Part 2 here! <a href=\"https://youtu.be/4~
## $ textOriginal          <chr> "Watch Part 2 here! https://youtu.be/4A12xqQPJXU~
## $ authorDisplayName     <chr> "dataslice", "Eloise Hitalia", "Leonardo Souza C~
## $ authorProfileImageUrl <chr> "https://yt3.ggpht.com/ytc/AAUvwnh4JuQbg2uUKHcYv~
## $ authorChannelUrl      <chr> "http://www.youtube.com/channel/UCBV194XNr6CIQCC~
## $ authorChannelId.value <chr> "UCBV194XNr6CIQCCuw1v2rMQ", "UCD0yZnbyl04QlbpAW2~
## $ canRate               <chr> "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", "TRUE", ~
## $ viewerRating          <chr> "none", "none", "none", "none", "none", "none", ~
## $ likeCount             <chr> "3", "0", "0", "0", "0", "0", "0", "0", "0", "0"~
## $ publishedAt           <chr> "2021-01-16T16:40:50Z", "2021-06-16T20:21:26Z", ~
## $ updatedAt             <chr> "2021-01-16T16:40:50Z", "2021-06-16T20:21:26Z", ~
## $ id                    <chr> "UgzSOC39vxd9TE69q994AaABAg", "UgxowQrhecdQ1Iv9E~
## $ parentId              <chr> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, ~
## $ moderationStatus      <lgl> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, ~