Я использую C# и UWP xml для создания новостной ленты. Как виджет новостей телефона, но для компьютера. Я наткнулся на https://newsapi.org/ и подумал, что это интересно. Но я не знаю, как это реализовать, и на C# для этого веб-сайта API нет учебных пособий. Как мне это использовать и как показать article.Title, article.Author и article.Description на 3 созданных мною текстовых блоках?
edit: я нашел видео для c#, но оно для консоли .writeline, а не xaml. Поэтому я создал новый файл class.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NewsAPI;
using NewsAPI.Models;
using NewsAPI.Constants;
using System.Net.Http;
using Newtonsoft.Json;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.IO;
namespace news
{
public class newsapi
{
HttpClient client = new HttpClient();
//public static async void Main(string[] args)
//{
// newsapi program = new newsapi();
// await program.GetArticles();
//}
//public async Task GetArticles()
//{
// string response = await client.GetStringAsync("https://newsapi.org/v2/top-headlines?sources=bbc-news&apiKey=06112b69bb054cfeb70bbf188873f98e");
// NewsResponse newsObject = JsonConvert.DeserializeObject<NewsResponse>(response);
//}
public async static Task<Article> GetArticlesMain()
{
var http = new HttpClient();
var response = await http.GetAsync("https://newsapi.org/v2/top-headlines?sources=bbc-news&apiKey=06112b69bb054cfeb70bbf188873f98e");
var result = await response.Content.ReadAsStringAsync();
var serializer = new DataContractJsonSerializer(typeof(Article));
var ms = new MemoryStream(Encoding.UTF8.GetBytes(result));
var data = (Article)serializer.ReadObject(ms);
return data;
}
[DataContract]
public class NewsResponse
{
[DataMember]
public string status { get; set; }
[DataMember]
public int totalResults { get; set; }
[DataMember]
public List<Article> Articles { get; set; }
}
[DataContract]
public class Article
{
[DataMember]
public string Title { get; set; }
}
}
}
и попытался получить заголовок API новостей в моем mainpage.xaml в текстовом блоке в событии page_loaded:
private async void Page_Loaded(object sender, RoutedEventArgs e)
{
//RootObject myWeather = await OpenWeather.GetWeather(20, 30);
Article article = await newsapi.GetArticlesMain();
tbContent.Text = article.Title;
}
Но текстовый блок ничего не показывает, и исключение, необработанное пользователем, было выброшено в "tbContent.Text = article.Title" этой строке, говорящей "Значение не может быть нулевым". Так что происходит и как это исправить?