Skip to content
This repository has been archived by the owner on Jan 12, 2024. It is now read-only.

Commit

Permalink
5.0 release
Browse files Browse the repository at this point in the history
  • Loading branch information
ceee committed Apr 5, 2019
1 parent aade66e commit 0209d1a
Show file tree
Hide file tree
Showing 4 changed files with 140 additions and 134 deletions.
202 changes: 101 additions & 101 deletions PocketSharp/Components/Explore.cs
Original file line number Diff line number Diff line change
@@ -1,101 +1,101 @@
using HtmlAgilityPack;
using PocketSharp.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Web;

namespace PocketSharp
{
/// <summary>
/// PocketClient
/// </summary>
public partial class PocketClient
{
/// <summary>
/// Term to use for trending articles in the Explore() method
/// </summary>
const string EXPLORE_TRENDING = "trending";

/// <summary>
/// Term to use for must-read articles in the Explore() method
/// </summary>
const string EXPLORE_MUST_READS = "must-reads";


/// <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>
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;
}
}
}
//using HtmlAgilityPack;
//using PocketSharp.Models;
//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Threading;
//using System.Threading.Tasks;
//using System.Web;

//namespace PocketSharp
//{
// /// <summary>
// /// PocketClient
// /// </summary>
// public partial class PocketClient
// {
// /// <summary>
// /// Term to use for trending articles in the Explore() method
// /// </summary>
// const string EXPLORE_TRENDING = "trending";

// /// <summary>
// /// Term to use for must-read articles in the Explore() method
// /// </summary>
// const string EXPLORE_MUST_READS = "must-reads";


// /// <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>
// 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;
// }
// }
//}
16 changes: 13 additions & 3 deletions PocketSharp/PocketSharp.csproj
Original file line number Diff line number Diff line change
@@ -1,12 +1,22 @@
<Project Sdk="Microsoft.NET.Sdk">
<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<Version>5.0.0</Version>
<Authors>Tobias Klika</Authors>
<Company>brothers</Company>
<RepositoryUrl>https://github.com/ceee/PocketSharp</RepositoryUrl>
<Copyright>Copyright by brothers, 2019</Copyright>
<PackageTags>PocketAPI Pocket API PocketSharp Tobias Klika cee Scott Lovegrove scottisafool NReadability SgmlReader Reader Article SDK Pockem</PackageTags>
<Description>PocketSharp is a .NET Standard library that integrates the Pocket API v3.</Description>
<PackageReleaseNotes><![CDATA[
For full release notes see https://github.com/ceee/PocketSharp/blob/master/CHANGELOG.md
]]></PackageReleaseNotes>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
</PropertyGroup>

<ItemGroup>
<PackageReference Include="HtmlAgilityPack" Version="1.11.1" />
<PackageReference Include="Newtonsoft.Json" Version="12.0.1" />
</ItemGroup>

</Project>
</Project>
18 changes: 7 additions & 11 deletions PocketSharp/PocketSharp.nuspec
Original file line number Diff line number Diff line change
@@ -1,23 +1,19 @@
<?xml version="1.0"?>
<?xml version="1.0"?>
<package >
<metadata>
<id>$id$</id>
<version>$version$</version>
<title>$title$</title>
<authors>$author$</authors>
<owners>$author$</owners>
<licenseUrl>https://raw.github.com/ceee/PocketSharp/master/LICENSE-MIT</licenseUrl>
<license type="expression">MIT</license>
<projectUrl>https://github.com/ceee/PocketSharp</projectUrl>
<iconUrl>https://raw.github.com/ceee/PocketSharp/master/Assets/pocketsharp.png</iconUrl>
<requireLicenseAcceptance>false</requireLicenseAcceptance>
<description>PocketSharp is a .NET Standard library that integrates the Pocket API v3.</description>
<description>$description$</description>
<language>en-US</language>
<releaseNotes>
<![CDATA[
For full release notes see https://github.com/ceee/PocketSharp/blob/master/CHANGELOG.md
]]>
</releaseNotes>
<copyright>Copyright by brothers, 2018</copyright>
<tags>PocketAPI Pocket API PocketSharp Tobias Klika cee Scott Lovegrove scottisafool NReadability SgmlReader Reader Article SDK Pockem</tags>
<releaseNotes>$releaseNotes$</releaseNotes>
<copyright>$copyright$</copyright>
<tags>$tags$</tags>
</metadata>
</package>
</package>
38 changes: 19 additions & 19 deletions PocketSharp/Utilities/HtmlNodeExtensions.cs
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
using HtmlAgilityPack;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
//using HtmlAgilityPack;
//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;

namespace PocketSharp
{
internal static class HtmlNodeExtensions
{
public static IEnumerable<HtmlNode> SelectNodesByClass(this HtmlNode node, string className)
{
return node.Descendants().Where(x => x.HasClass(className));
}
//namespace PocketSharp
//{
// internal static class HtmlNodeExtensions
// {
// public static IEnumerable<HtmlNode> SelectNodesByClass(this HtmlNode node, string className)
// {
// return node.Descendants().Where(x => x.HasClass(className));
// }


public static HtmlNode SelectNodeByClass(this HtmlNode node, string className)
{
return node.Descendants().FirstOrDefault(x => x.HasClass(className));
}
}
}
// public static HtmlNode SelectNodeByClass(this HtmlNode node, string className)
// {
// return node.Descendants().FirstOrDefault(x => x.HasClass(className));
// }
// }
//}

0 comments on commit 0209d1a

Please sign in to comment.