コード例 #1
0
        private void YoutubeLogin()
        {
            using (var stream = new FileStream("client_secret_90216717933-jqbg5psb20erpgsfatfrd7sjce2uo3s1.apps.googleusercontent.com.json", FileMode.Open, FileAccess.Read))
            {
                Credental = GoogleWebAuthorizationBroker.AuthorizeAsync(
                    GoogleClientSecrets.Load(stream).Secrets,
                    new[] { YouTubeService.Scope.YoutubeReadonly },
                    "user",
                    CancellationToken.None,
                    new FileDataStore(this.GetType().ToString())
                    ).Result;
            }

            var youtubeService = new YouTubeService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = Credental,
                ApplicationName       = this.GetType().ToString()
            });

            var test = new SubscriptionsResource.ListRequest(youtubeService, "snippet")
            {
                Mine       = true,
                MaxResults = 50
            };
            var test2 = test.Execute();

            Subscriptions.AddRange(test2.Items);

            GetLatestSubscriptionVideos(Subscriptions);
        }
コード例 #2
0
        internal async Task <IEnumerable <Subscription> > GetSubscriptions(bool mySubscriptions = false, bool myRecentSubscribers = false, bool mySubscribers = false, int maxResults = 1)
        {
            return(await this.YouTubeServiceWrapper(async() =>
            {
                List <Subscription> results = new List <Subscription>();
                string pageToken = null;
                do
                {
                    SubscriptionsResource.ListRequest request = this.connection.GoogleYouTubeService.Subscriptions.List("snippet,contentDetails");
                    if (mySubscriptions)
                    {
                        request.Mine = true;
                    }
                    else if (myRecentSubscribers)
                    {
                        request.MyRecentSubscribers = myRecentSubscribers;
                    }
                    else if (mySubscribers)
                    {
                        request.MySubscribers = mySubscribers;
                    }
                    request.MaxResults = Math.Min(maxResults, 50);
                    request.PageToken = pageToken;
                    LogRequest(request);

                    SubscriptionListResponse response = await request.ExecuteAsync();
                    LogResponse(request, response);
                    results.AddRange(response.Items);
                    maxResults -= response.Items.Count;
                    pageToken = response.NextPageToken;
                } while (maxResults > 0 && !string.IsNullOrEmpty(pageToken));
                return results;
            }));
        }
コード例 #3
0
        public async static Task <List <Subscription> > GetUserSubscriptionsAsync(CancellationToken token, bool getUploadsPlaylist = false)
        {
            List <Subscription> result = new List <Subscription>();

            try
            {
                SubscriptionsResource.ListRequest listSubscriptions = Service.Subscriptions.List("snippet");
                listSubscriptions.Order      = SubscriptionsResource.ListRequest.OrderEnum.Alphabetical;
                listSubscriptions.Mine       = true;
                listSubscriptions.MaxResults = 50;
                SubscriptionListResponse response = await listSubscriptions.ExecuteAsync();

                while (response.NextPageToken != null && !token.IsCancellationRequested)
                {
                    result.AddRange(ConvertSubscriptionItems(response.Items.ToList()));
                    listSubscriptions.PageToken = response.NextPageToken;
                    response = await listSubscriptions.ExecuteAsync();
                }

                result.AddRange(ConvertSubscriptionItems(response.Items.ToList()));

                if (getUploadsPlaylist)
                {
                    result.ForEach(p => p.PlaylistIdToWatch = GetChannelUploadsPlaylistId(p));
                }

                return(result);
            }
            catch (Exception ex)
            {
                Common.HandleException(ex);
                return(Common.TrackedSubscriptions.Where(p => !p.IsPlaylist).ToList()); //As a "default" return the current YouTube subscriptions
            }
        }
コード例 #4
0
        static void Main(string[] args)
        {
            try
            {
                UserCredential credential;
                // Load client secrets.
                using (var stream =
                           new FileStream("credentials.json", FileMode.Open, FileAccess.Read))
                {
                    /* The file token.json stores the user's access and refresh tokens, and is created
                     * automatically when the authorization flow completes for the first time.*/
                    string credPath = "token.json";
                    credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                        GoogleClientSecrets.FromStream(stream).Secrets,
                        Scopes,
                        "user",
                        CancellationToken.None,
                        new FileDataStore(credPath, true)).Result;
                    Console.WriteLine("Credential file saved to: " + credPath);
                }

                // Create G Suite Reseller API service.
                var service = new ResellerService(new BaseClientService.Initializer
                {
                    HttpClientInitializer = credential,
                    ApplicationName       = ApplicationName
                });

                // Define parameters of request.
                SubscriptionsResource.ListRequest request = service.Subscriptions.List();
                request.MaxResults = 10;

                // List subscriptions.
                IList <Subscription> subscriptions = request.Execute().SubscriptionsValue;
                Console.WriteLine("Subscriptions:");
                if (subscriptions != null && subscriptions.Count > 0)
                {
                    foreach (var subscription in subscriptions)
                    {
                        Console.WriteLine("{0} ({1}, {2})", subscription.CustomerId,
                                          subscription.SkuId, subscription.Plan.PlanName);
                    }
                }
                else
                {
                    Console.WriteLine("No subscriptions found.");
                }
            }
            catch (FileNotFoundException e)
            {
                Console.WriteLine(e.Message);
            }
        }
コード例 #5
0
        public List <Subscription> GetSubscriptions(string channelID)
        {
            List <Subscription> result = new List <Subscription>();

            using (var youtube = new YouTubeService(new BaseClientService.Initializer()
            {
                ApiKey = this.auth.ApiKey,
                ApplicationName = this.ApplicationName
            }))
            {
                try
                {
                    SubscriptionsResource.ListRequest listRequest = youtube.Subscriptions.List("snippet");
                    // listRequest.MySubscribers = False
                    // listRequest.Mine = False
                    listRequest.ChannelId  = channelID;
                    listRequest.MaxResults = 50;
                    listRequest.Order      = SubscriptionsResource.ListRequest.OrderEnum.Alphabetical;

                    SubscriptionListResponse searchResponse = listRequest.Execute();

                    while (true)
                    {
                        foreach (Subscription searchResult in searchResponse.Items)
                        {
                            result.Add(searchResult);
                        }

                        if (!string.IsNullOrEmpty(searchResponse.NextPageToken))
                        {
                            listRequest.PageToken = searchResponse.NextPageToken;
                            searchResponse        = listRequest.Execute();
                        }
                        else
                        {
                            break; // TODO: might not be correct. Was : Exit Do
                        }
                    }
                }
                catch (Exception ex)
                {
                    if (Logger != null)
                    {
                        Logger.Error(ex);
                    }
                }
            }

            return(result);
        }
コード例 #6
0
        static void Main(string[] args)
        {
            UserCredential credential;

            using (var stream =
                       new FileStream("client_secret.json", FileMode.Open, FileAccess.Read))
            {
                string credPath = System.Environment.GetFolderPath(
                    System.Environment.SpecialFolder.Personal);
                credPath = Path.Combine(credPath, ".credentials/reseller-dotnet-quickstart.json");

                credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                    GoogleClientSecrets.Load(stream).Secrets,
                    Scopes,
                    "user",
                    CancellationToken.None,
                    new FileDataStore(credPath, true)).Result;
                Console.WriteLine("Credential file saved to: " + credPath);
            }

            // Create G Suite Reseller API service.
            var service = new ResellerService(new BaseClientService.Initializer()
            {
                HttpClientInitializer = credential,
                ApplicationName       = ApplicationName,
            });

            // Define parameters of request.
            SubscriptionsResource.ListRequest request = service.Subscriptions.List();
            request.MaxResults = 10;

            // List subscriptions.
            IList <Subscription> subscriptions = request.Execute().SubscriptionsValue;

            Console.WriteLine("Subscriptions:");
            if (subscriptions != null && subscriptions.Count > 0)
            {
                foreach (var subscription in subscriptions)
                {
                    Console.WriteLine("{0} ({1}, {2})", subscription.CustomerId,
                                      subscription.SkuId, subscription.Plan.PlanName);
                }
            }
            else
            {
                Console.WriteLine("No subscriptions found.");
            }
            Console.Read();
        }
コード例 #7
0
        private void Start(CancellationToken token)
        {
            if (this.IsHandleCreated)
            {
                this.Invoke((MethodInvoker) delegate
                {
                    richTextBoxLog.Clear();
                    buttonStart.Enabled = false;
                    buttonStop.Enabled  = true;
                });
            }

            if (!CheckForInternetConnection())
            {
                if (this.IsHandleCreated)
                {
                    this.Invoke((MethodInvoker) delegate
                    {
                        buttonStart.Enabled = true;
                        buttonStop.Enabled  = false;
                    });
                }

                return;
            }

            List <Subscription> tempUserSubscriptions = new List <Subscription>();

            if (service == null)
            {
                Log("Authorizing...");

                UserCredential credential;
                string         clientSecretString = "{\"installed\":" +
                                                    "{" +
                                                    "\"client_id\":\"761670588704-lgl5qbcv5odmq1vlq3lcgqv67fr8vkdn.apps.googleusercontent.com\"," +
                                                    "\"project_id\":\"youtube-downloader-174123\"," +
                                                    "\"auth_uri\":\"https://accounts.google.com/o/oauth2/auth\"," +
                                                    "\"token_uri\":\"https://accounts.google.com/o/oauth2/token\"," +
                                                    "\"auth_provider_x509_cert_url\":\"https://www.googleapis.com/oauth2/v1/certs\"," +
                                                    "\"client_secret\":\"_uzJUnD4gNiIpIL991kmCuvB\"," +
                                                    "\"redirect_uris\":[\"urn:ietf:wg:oauth:2.0:oob\",\"http://localhost\"]" +
                                                    "}" +
                                                    "}";
                byte[] byteArray = Encoding.ASCII.GetBytes(clientSecretString);

                using (var stream = new MemoryStream(byteArray))
                {
                    credential = GoogleWebAuthorizationBroker.AuthorizeAsync(
                        GoogleClientSecrets.Load(stream).Secrets,
                        Scopes,
                        "user",
                        CancellationToken.None,
                        new FileDataStore(CredentialsPath, true)).Result;
                }

                service = new YouTubeService(new BaseClientService.Initializer()
                {
                    HttpClientInitializer = credential,
                    ApplicationName       = ApplicationName
                });
            }


            if (token.IsCancellationRequested)
            {
                return;
            }

            Log("Retrieving subscriptions...");
            DeserializeSubscriptions();

            SubscriptionsResource.ListRequest listSubscriptions = service.Subscriptions.List("snippet");
            listSubscriptions.Order      = SubscriptionsResource.ListRequest.OrderEnum.Alphabetical;
            listSubscriptions.Mine       = true;
            listSubscriptions.MaxResults = 50;
            SubscriptionListResponse response = listSubscriptions.Execute();

            while (response.NextPageToken != null && !token.IsCancellationRequested)
            {
                tempUserSubscriptions.AddRange(ConvertSubscriptionItems(response.Items.ToList()));
                listSubscriptions.PageToken = response.NextPageToken;
                response = listSubscriptions.Execute();
            }

            tempUserSubscriptions.AddRange(ConvertSubscriptionItems(response.Items.ToList()));

            if (token.IsCancellationRequested)
            {
                return;
            }

            Log("Getting latest subscriptions from YouTube");
            foreach (Subscription missingSubscription in tempUserSubscriptions.Where(p => userSubscriptions.Where(o => o.Title == p.Title).FirstOrDefault() == null))
            {
                Subscription sub = AssignUploadsPlaylist(missingSubscription);
                sub.LastVideoPublishDate = GetMostRecentUploadDate(sub);
                userSubscriptions.Add(sub);
            }

            //Remove any extraneous (unsubscribed since last time the program was run) subscriptions
            List <Subscription> unsubscribedSubscriptions = userSubscriptions.Where(p => tempUserSubscriptions.Where(o => o.Title == p.Title).FirstOrDefault() == null && !p.IsPlaylist).ToList();

            foreach (Subscription unsubscribedSubscription in unsubscribedSubscriptions)
            {
                userSubscriptions.Remove(unsubscribedSubscription);
            }

            if (token.IsCancellationRequested)
            {
                return;
            }

            //Remove any duplicates
            userSubscriptions = userSubscriptions.GroupBy(p => p.PlaylistIdToWatch).Select(p => p.First()).ToList();

            if (Settings.Instance.SerializeSubscriptions &&
                (Settings.Instance.DownloadVideos || Settings.Instance.AddToPocket)) //Don't run unnecessary iterations if the user doesn't want to download or add them to Pocket
            {
                Log("Looking for recent uploads");
                LookForMoreRecentUploads(token);
            }

            if (token.IsCancellationRequested)
            {
                return;
            }

            Log("Iterations started");
            initializeTimer();
            this.Invoke((MethodInvoker) delegate { timer.Start(); });
        }