コード例 #1
0
        private async Task RenderElementsInListAsync(PageFlagEnum flag)
        {
            PlaylistModel playlist = (PlaylistModel)PlaylistComboBox.SelectedItem;

            var json = await RequestPlaylistItemsAsync(playlist, flag);

            System.Diagnostics.Debug.WriteLine((string)Convert.ToString(json));

            // Dinamically generate the ListBox Elements based on the api response
            playlist.Videos = new List <VideoModel>();
            foreach (var x in json.items)
            {
                if (Convert.ToString(x.snippet.title) != "Private video")
                {
                    playlist.Videos.Add(new VideoModel(
                                            Convert.ToString(x.snippet.thumbnails.medium.url),
                                            Convert.ToString(x.snippet.title),
                                            Convert.ToString(x.snippet.resourceId.videoId),
                                            Convert.ToString(x.snippet.channelTitle),
                                            Convert.ToString(x.snippet.publishedAt)));
                }
            }

            if (!string.IsNullOrEmpty(Convert.ToString(json.nextPageToken)))
            {
                playlist.NextPageToken     = Convert.ToString(json.nextPageToken);
                NextQueryButton.Visibility = Visibility.Visible;
            }
            else
            {
                playlist.NextPageToken     = "";
                NextQueryButton.Visibility = Visibility.Hidden;
            }
            if (!string.IsNullOrEmpty(Convert.ToString(json.prevPageToken)))
            {
                playlist.PrevPageToken     = Convert.ToString(json.prevPageToken);
                PrevQueryButton.Visibility = Visibility.Visible;
            }
            else
            {
                playlist.PrevPageToken     = "";
                PrevQueryButton.Visibility = Visibility.Hidden;
            }

            ListBox.ItemsSource = playlist.Videos;
        }
コード例 #2
0
        private async Task <dynamic> RequestPlaylistItemsAsync(PlaylistModel playlist, PageFlagEnum flag)
        {
            if (Properties.Settings.Default.AccessTokenCreationDate.AddSeconds(3900) < DateTime.Now)
            {
                Authenticator.RefreshToken();
            }
            // add token refresh logic
            string pageToken = "";

            switch (flag)
            {
            case PageFlagEnum.Current:
                break;

            case PageFlagEnum.Next:
                pageToken = playlist.NextPageToken;
                break;

            case PageFlagEnum.Prev:
                pageToken = playlist.PrevPageToken;
                break;
            }
            string requestPlaylistUri = string.Format("https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&maxResults=5&playlistId={0}&pageToken={1}",
                                                      playlist.PlaylistId, pageToken);


            HttpWebRequest requestPlaylist = (HttpWebRequest)WebRequest.Create(requestPlaylistUri);

            requestPlaylist.Method = "GET";
            requestPlaylist.Headers.Add(string.Format("Authorization: Bearer {0}", Properties.Settings.Default.AccessToken));
            requestPlaylist.ContentType = "application/x-www-form-urlencoded";
            requestPlaylist.Accept      = "Accept=text/html,application/xhtml+xml,applicaton/xml;q=0.9*/*;q=0.8";

            WebResponse playlistResponse = await requestPlaylist.GetResponseAsync();

            using (StreamReader userInfoResponseReader = new StreamReader(playlistResponse.GetResponseStream()))
            {
                // reads response body
                string userInfoResponseText = await userInfoResponseReader.ReadToEndAsync();

                var JsonResponse = JsonConvert.DeserializeObject <dynamic>(userInfoResponseText);

                return(JsonResponse);
            }
        }