Example #1
0
        private static List <PocketImage> ConvertJsonToImages(JsonElement json)
        {
            List <PocketImage> images = new List <PocketImage>();

            foreach (var itemObject in json.EnumerateObject())
            {
                var         itemJsonDocument = JsonDocument.Parse(itemObject.Value.ToString());
                PocketImage image            = JsonSerializer.Deserialize <PocketImage>(itemJsonDocument.RootElement.ToString());
                images.Add(image);
            }

            return(images);
        }
Example #2
0
        /// <summary>
        /// Explore Pocket and find interesting articles by a certain topic
        /// </summary>
        /// <param name="topic">Term or topic to get articles for</param>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task <IEnumerable <PocketExploreItem> > Explore(string topic, CancellationToken cancellationToken = default(CancellationToken))
        {
            List <PocketExploreItem> items = new List <PocketExploreItem>();
            string html = await RequestAsString("https://getpocket.com/explore/" + HttpUtility.UrlEncode(topic), cancellationToken);

            var document = new HtmlDocument();

            document.LoadHtml(html);

            IEnumerable <HtmlNode> nodes = document.DocumentNode.SelectNodesByClass("media_item");

            if (nodes == null || !nodes.Any())
            {
                return(items);
            }

            for (int i = 0; i < nodes.Count(); i++)
            {
                HtmlNode          node = nodes.ElementAt(i);
                PocketExploreItem item = new PocketExploreItem();
                item.ID = node.Id;

                HtmlNode title = node.SelectNodeByClass("title")?.FirstChild;

                if (title == null)
                {
                    continue;
                }

                // get uri
                string uri = title.GetAttributeValue("data-saveurl", null);
                item.Uri = new Uri(uri);

                // get image
                string imageUri = node.SelectNodeByClass("item_image")?.GetAttributeValue("data-thumburl", null);
                if (!String.IsNullOrEmpty(imageUri))
                {
                    PocketImage image = new PocketImage();
                    image.Uri    = new Uri(imageUri);
                    image.ID     = "0";
                    image.ItemID = item.ID;
                    item.Images  = new List <PocketImage>()
                    {
                        image
                    };
                }

                // get basic infos
                item.Title      = title.InnerText;
                item.Excerpt    = node.SelectNodeByClass("excerpt")?.InnerText;
                item.IsTrending = node.SelectNodeByClass("flag-trending") != null;

                // save count
                string saveCountStr = node.SelectNodeByClass("save_count")?.InnerText?.Split(' ')?.FirstOrDefault();
                int    saveCount    = 0;
                Int32.TryParse(saveCountStr, out saveCount);
                item.SaveCount = saveCount;

                // add published date
                DateTime publishedDate = DateTime.Now;
                if (DateTime.TryParse(node.SelectNodeByClass("read_time")?.InnerText, out publishedDate))
                {
                    item.PublishedTime = publishedDate;
                }

                items.Add(item);
            }

            return(items);
        }