private async Task <TaggedLink> AnalyzeLinkAsync(Uri url, bool onlyHeaders = true) { var link = new TaggedLink(); using (var client = new HttpClient()) { var responseMessage = await client.GetAsync(url, HttpCompletionOption.ResponseHeadersRead); link.Url = responseMessage.RequestMessage.RequestUri; if (!(onlyHeaders) && responseMessage.Content.Headers.ContentType.MediaType.StartsWith("text/html")) { string html; using (var stream = await responseMessage.Content.ReadAsStreamAsync()) using (var reader = new StreamReader(stream, true)) { html = await reader.ReadToEndAsync(); } var regex = new Regex(@"(?<=<title.*?>)(.*?)(?=</title>)", RegexOptions.IgnoreCase); link.Title = regex.Match(html).Value.Trim(); } } return(link); }
public static JsonApiLinkResource Create(TaggedLink link) { return(new JsonApiLinkResource { Attributes = new JsonApiLinkAttributes { Tags = string.Join(',', link.Tags), Title = link.Title, Url = link.Url.OriginalString, }, Id = link.Id.ToString(), Links = CreateLinks(link.Id.ToString()), }); }