68 lines
2.8 KiB
C#
68 lines
2.8 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using Google.Apis.YouTube.v3;
|
|
using Microsoft.EntityFrameworkCore;
|
|
|
|
namespace YTManager.Tasks
|
|
{
|
|
public class FetchVideos
|
|
{
|
|
public static void run(string youtubechannelIDstr = "")
|
|
{
|
|
// YT API access key
|
|
var youtubeService = new YouTubeService(new Google.Apis.Services.BaseClientService.Initializer()
|
|
{
|
|
ApiKey = "AIzaSyCuIYkMc5SktlnXRXNaDf2ObX-fQvtWCnQ",
|
|
ApplicationName = "testingapppp"
|
|
});
|
|
|
|
// Get the interface to the database.
|
|
var ops = new DbContextOptionsBuilder<MediaDB>();
|
|
ops.UseInMemoryDatabase(databaseName: "testdb");
|
|
|
|
// Get all the channels to update.
|
|
using (var dbcontext = new MediaDB(ops.Options)) {
|
|
// Get all the potential relevant channels.
|
|
List<Models.Channel> channels;
|
|
if (youtubechannelIDstr == "")
|
|
channels = dbcontext.Channels.ToList();
|
|
else
|
|
channels = dbcontext.Channels.Where(c => c.YTChannelID == youtubechannelIDstr).ToList();
|
|
|
|
// Get all the most recent videos for each channel.
|
|
channels.ForEach(ch => {
|
|
// Get channel videos from youtube.
|
|
var query = youtubeService.Search.List("snippet");
|
|
query.ChannelId = ch.YTChannelID;
|
|
query.Order = SearchResource.ListRequest.OrderEnum.Date;
|
|
query.MaxResults = 50;
|
|
var response = query.Execute();
|
|
|
|
// Get all videos which aren't already in the DB based on the ytid.
|
|
var notindb = response.Items
|
|
.Where(i => i.Id.Kind == "youtube#video")
|
|
.Where(i => !dbcontext.Videos.Any(dbvid => dbvid.YTVideoID == i.Id.VideoId))
|
|
.Select(newvid =>
|
|
new Models.Video {
|
|
Title = newvid.Snippet.Title,
|
|
Description = newvid.Snippet.Description,
|
|
YTVideoID = newvid.Id.VideoId,
|
|
AddedToYT = newvid.Snippet.PublishedAt.GetValueOrDefault(),
|
|
AddedtoDB = DateTime.Now,
|
|
channel = ch,
|
|
ThumbnailURL = newvid.Snippet.Thumbnails.Medium.Url
|
|
}).ToList();
|
|
|
|
// Add all videos not already in the database over.
|
|
notindb.ForEach(newvid => dbcontext.Videos.Add(newvid));
|
|
|
|
// And save since we are done.
|
|
dbcontext.SaveChanges();
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|