This repository has been archived by the owner on Jan 12, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 15
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
4 changed files
with
140 additions
and
134 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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; | ||
// } | ||
// } | ||
//} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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)); | ||
// } | ||
// } | ||
//} |