Il existe peu de documentations pour l’utilisation de l’API Youtube Analytics pour le C#. Si vous cherchez à obtenir les statistiques de votre chaîne Youtube en utilisant les Forms, voici un exemple très simple en partant de la query… à l’affichage des résultats !
Comment récupérer les statistiques de sa chaîne avec l’API Youtube Analytics ?
Youtube API
Récupération de statistiques basiques
Chercher des vidéos
Uploader des vidéos
Youtube Analytics API
Récupération de statistiques précises
Filtrage par date de début et fin
On commence par les prérequis
Pour utiliser l’API il vous faudra installer le package Nuget Google.Apis.YouTubeAnalytics.v2, ainsi que le package plus général de l’API Youtube vous pouvez lancer directement le téléchargement de packages dans le terminal PM :
Install-Package Google.Apis.YouTubeAnalytics.v2 -Version 1.49.0.2113
Install-Package Google.Apis.YouTube.v3 -Version 1.49.0.2112
Les dépendances qui seront également installées automatiquement :
Google.Apis.1.49.0
Google.Apis.Auth.1.49.0
Google.Apis.Core.1.49.0
Google.Apis.YouTubeAnalytics.v2.1.49.0.2113
Newtonsoft.Json.12.0.3
Création du projet sur la console de développement Google
Rendez-vous sur la console de développement Google, on va y créer un projet et ensuite lui attribuer les apis que nous utiliserons :
Une fois votre projet créée cliquez sur Tableau de bord et Activer les API et les Services et sélectionnez :
YouTube Data API v3
YouTube Analytics API
L’utilisation de l’API
Les requêtes API avancées pour récupérer les statistiques propre a votre chaîne Youtube nécessitent une authentification Oauth 2.
On commence par créer une fonction asynchrone qui ne retourne rien :
public async void Run()
{
UserCredential credential;
using (var stream = new FileStream("client_secrets.json", FileMode.Open, FileAccess.Read))
{
credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
new[] { YouTubeService.Scope.YoutubeReadonly },
"user",
CancellationToken.None
);
}
}
Ensuite, dans la même fonction on déclare une variable avec une instance initialiser de youtubeservice avec notre oath e parametre et le « header » http de l’application qui sera envoyé
var youTubeAnalyticsService = new YouTubeAnalytics.v2.YouTubeAnalyticsService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = Assembly.GetExecutingAssembly().GetName().Name
});
On prépare notre requête avec les paramètres qu’on veut récupérer de notre chaîne
voir la liste de toutes les métriques disponibles
var request = youTubeAnalyticsService.Reports.Query();
request.StartDate = ("2019-01-01");
request.EndDate = ("2020-09-30");
request.Ids = ("channel==UCmLQ3sdAd6CypJIne5ZANaA");
request.Metrics = ("views,comments,likes,dislikes,estimatedMinutesWatched,averageViewDuration");
On exécute notre query dans une instance de la classe Queryresponse qui nous retournera nos infos :
QueryResponse requestquery = request.Execute();
On créé une liste d’int pour y stocker les données retournées :
List<int> myChannelDataList = new List<int>();
On parcourt nos 6 objets du résultat de la query avec un foreach, on converti / cast ensuite les objets en int pour pouvoir les afficher :
Le listsize sera un .Count pour incrémenter les boucles pour afficher nos retours
int listsize = 0;
foreach (object obj in requestquery.Rows[0])
{
int value = Convert.ToInt32(obj);
myChannelDataList.Add(value);
//Exemples
Debug.WriteLine("Value : " + value);
Debug.WriteLine("LISTE / " + myChannelDataList[0]);
Debug.WriteLine("Count : " + myChannelDataList.Count);
//Exemples
listsize = myChannelDataList.Count;
}
à la compilation ça nous donnera :
Affichage des résultats dans la form
On créé une liste de strings ( les Metrics ), notre listsize étant listsize = myChannelDataList.Count ( le nombre d’objets ) donc 6 labels seront créés
List<string> metrics = new List<string> { "Vues", "Commentaires", "Likes", "Dislike", "Minutes", "MoyenneTemps" };
for (int i = 0; i < listsize; i++)
{
Label labels = new Label();
labels.Top = (i + 4) * 20;
labels.Left = 100;
labels.AutoSize = true;
labels.TextAlign = ContentAlignment.MiddleLeft;
labels.Text = metrics[i] + " :" + myChannelDataList[i].ToString();
this.Controls.Add(labels);
}
Mais il manque un truc là non ?
Obtenir le nombre d’abonnés avec l’API Youtube
Cette donnée ce récupère sur l’API générale de Youtube, son fonctionnement est quasi identique :
var youtubeService = new YouTubeService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = Assembly.GetExecutingAssembly().GetName().Name
});
var requestSub = youtubeService.Channels.List("statistics");
requestSub.Mine = (true);
ChannelListResponse responsesub = requestSub.Execute();
foreach (var sresults in responsesub.Items)
{
var substats = sresults.Statistics;
var subcount = substats.SubscriberCount;
Debug.WriteLine("SubCount : " + subcount);
Label labels = new Label();
labels.Top = 16;
labels.Left = 280;
labels.AutoSize = true;
labels.TextAlign = ContentAlignment.MiddleLeft;
labels.Text = "Subs :" + subcont;
this.Controls.Add(labels);
}
Une fois notre fonction exécutée on obtiendra :
Code complet de la fonction (hors contrôles) :
public async void FetchYoutubeAnalyticsAPI()
{
UserCredential credential;
using (var stream = new FileStream("client_secrets.json", FileMode.Open, FileAccess.Read))
{
credential = await GoogleWebAuthorizationBroker.AuthorizeAsync(
GoogleClientSecrets.Load(stream).Secrets,
new[] { YouTubeService.Scope.YoutubeReadonly },
"user",
CancellationToken.None
);
}
var youTubeAnalyticsService = new YouTubeAnalyticsService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = Assembly.GetExecutingAssembly().GetName().Name
});
var request = youTubeAnalyticsService.Reports.Query();
request.StartDate = ("2019-01-01");
request.EndDate = ("2020-09-30");
request.Ids = ("channel==UCmLQ3sdAd6CypJIne5ZANaA");
request.Metrics = ("views,comments,likes,dislikes,estimatedMinutesWatched,averageViewDuration");
QueryResponse requestquery = request.Execute();
List<int> myChannelDataList = new List<int>();
int listsize = 0;
foreach (object obj in requestquery.Rows[0])
{
int value = Convert.ToInt32(obj);
myChannelDataList.Add(value);
/* Debug.WriteLine("Value : " + value);
Debug.WriteLine("LISTE / " + myChannelDataList[0]);
Debug.WriteLine("Count : " + myChannelDataList.Count);*/
listsize = myChannelDataList.Count;
}
List<string> metrics = new List<string> { "Vues", "Commentaires", "Likes", "Dislike", "Minutes", "MoyenneTemps" };
for (int i = 0; i < listsize; i++)
{
Label labels = new Label();
labels.Top = (i + 4) * 20;
labels.Left = 100;
labels.AutoSize = true;
labels.TextAlign = ContentAlignment.MiddleLeft;
labels.Text = metrics[i] + " :" + myChannelDataList[i].ToString();
this.Controls.Add(labels);
}
// https://developers.google.com/youtube/v3/docs/channels/list
var youtubeService = new YouTubeService(new BaseClientService.Initializer()
{
HttpClientInitializer = credential,
ApplicationName = Assembly.GetExecutingAssembly().GetName().Name
});
var requestSub = youtubeService.Channels.List("statistics");
requestSub.Mine = (true);
ChannelListResponse responsesub = requestSub.Execute();
foreach (var sresults in responsesub.Items)
{
var substats = sresults.Statistics;
var subcount = substats.SubscriberCount;
Debug.WriteLine("SubCount : " + subcount);
Label labels = new Label();
labels.Top = 16;
labels.Left = 280;
labels.AutoSize = true;
labels.TextAlign = ContentAlignment.MiddleLeft;
labels.Text = "Subs :" + subcount;
this.Controls.Add(labels);
}
}
avec sresult.Statistics vous pourrez aussi récupérer ceci :
//nb total de vues de la chaine
var viewCount = substats.ViewCount;
//nb total de vidéos
var videoCount = substats.VideoCount;
//nb total de commentaires
var commentsCount = substats.CommentCount;
Retrouvez le projet complet de l’utilisation de l’API Youtube Analytics en C# sur github
Répondre