/
PostsRepository.cs
91 lines (79 loc) · 3.68 KB
/
PostsRepository.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Newtonsoft.Json;
using CryptoNews.Models;
using System.Net.Http;
using System.Net.Http.Headers;
using Newtonsoft.Json.Linq;
using System.Net;
using System.Text.RegularExpressions;
namespace CryptoNews.Services
{
public class PostsRepository
{
private static List<BlogPost> blogPosts = new List<BlogPost>();
public async Task<List<BlogPost>> GetAllPostsAsync()
{
var blogWebsites = App.database.GetAllBlogWebsites();
foreach (BlogWebsite blogWebsite in blogWebsites)
{
HttpClient httpClient = new HttpClient();
httpClient.BaseAddress = new Uri(blogWebsite.Url);
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var response = await httpClient.GetAsync("/wp-json/wp/v2/posts?_embed");
if (response.IsSuccessStatusCode)
{
var content = response.Content;
var json = await content.ReadAsStringAsync();
var postsJson = JsonConvert.DeserializeObject<dynamic>(json);
JArray jsonArray = JArray.Parse(postsJson.ToString());
foreach (var item in jsonArray)
{
try
{
var blogPost = new BlogPost();
blogPost.Id = Guid.NewGuid();
blogPost.BlogWebsiteName = blogWebsite.Name;
blogPost.Title = WebUtility.HtmlDecode(item.Value<JObject>("title").Value<string>("rendered"));
blogPost.Link = item.Value<string>("link");
var tempExcerpt = item.Value<JObject>("excerpt").Value<string>("rendered");
if (tempExcerpt.Length > 200)
{
tempExcerpt = tempExcerpt.Substring(0, 200);
blogPost.Excerpt = Regex.Replace(tempExcerpt, @"<[^>]*(>|$)| |‌|»|«|’", string.Empty).Trim();
}
else
{
blogPost.Excerpt = Regex.Replace(tempExcerpt, @"<[^>]*(>|$)| |‌|»|«", string.Empty).Trim();
}
blogPost.Date = item.Value<DateTime>("date");
blogPost.FeaturedImage =
item?.Value<JObject>("_embedded")?.Value<JArray>("wp:featuredmedia")[0]
?.Value<string>("source_url") ?? " ";
//if (blogPosts.Find(s => s.Title == blogPost.Title) == null)
//{
blogPosts.Add(blogPost);
//}
}
catch (Exception e)
{
continue;
}
}
}
httpClient.Dispose();
}
//foreach (var blogPostX in db.BlogPosts)
//{
// db.BlogPosts.Remove(blogPostX);
//}
App.database.AddUpdatedBlogPosts(blogPosts);
var OrderedBlogPosts = blogPosts.OrderByDescending(s => s.Date).ToList();
return OrderedBlogPosts;
}
}
}