private Task <PageInfo> ExtractFromResponse(ContentProviderHttpRequest request) { //Force https for the url var builder = new UriBuilder(request.RequestUri) { Scheme = "https" }; return(Http.GetAsync(builder.Uri).Then(response => { var pageInfo = new PageInfo(); using (Stream responseStream = response.GetResponseStream()) { var htmlDocument = new HtmlDocument(); htmlDocument.Load(responseStream); HtmlNode title = htmlDocument.DocumentNode.SelectSingleNode("//title"); HtmlNode imageURL = htmlDocument.DocumentNode.SelectSingleNode("//img[@class='embeddedObject']"); pageInfo.Title = title != null ? title.InnerText : String.Empty; pageInfo.ImageURL = imageURL != null ? imageURL.Attributes["src"].Value : String.Empty; } return pageInfo; })); }
private Task <XkcdContentProvider.XkcdComicInfo> ExtractFromResponse(ContentProviderHttpRequest request) { return(Http.GetAsync(request.RequestUri).Then(response => { var comicInfo = new XkcdComicInfo(); using (var responseStream = response.GetResponseStream()) { var htmlDocument = new HtmlDocument(); htmlDocument.Load(responseStream); htmlDocument.OptionFixNestedTags = true; var comic = htmlDocument.DocumentNode.SelectSingleNode("//div[@id='comic']/img"); if (comic == null) { return null; } comicInfo.Title = comic.Attributes["alt"].Value; comicInfo.ImageUrl = comic.Attributes["src"].Value; comicInfo.Description = comic.Attributes["title"].Value; } return comicInfo; })); }
protected override async Task <ContentProviderResult> GetCollapsibleContent(ContentProviderHttpRequest request) { string format = @"<a rel=""nofollow external"" target=""_blank"" href=""{0}""><img src=""{1}"" /></a>"; string imageUrl = request.RequestUri.ToString(); string href = imageUrl; // Only proxy what we need to (non https images) if (_configuration.RequireHttps && !request.RequestUri.Scheme.Equals("https", StringComparison.OrdinalIgnoreCase)) { var uploadProcessor = _kernel.Get <UploadProcessor>(); var response = await Http.GetAsync(request.RequestUri); string fileName = Path.GetFileName(request.RequestUri.LocalPath); string contentType = GetContentType(request.RequestUri); long contentLength = response.ContentLength; using (Stream stream = response.GetResponseStream()) { UploadResult result = await uploadProcessor.HandleUpload(fileName, contentType, stream, contentLength); if (result != null) { imageUrl = result.Url; } } } return(new ContentProviderResult() { Content = String.Format(format, Encoder.HtmlAttributeEncode(href), Encoder.HtmlAttributeEncode(imageUrl)), Title = href }); }
protected override Task <ContentProviderResult> GetCollapsibleContent(ContentProviderHttpRequest request) { string strDinnerId = ExtractParameter(request.RequestUri); int dinnerId = 0; if (!String.IsNullOrEmpty(strDinnerId) && Int32.TryParse(strDinnerId, out dinnerId)) { return(FetchDinner(dinnerId).Then(dinner => { if (dinner != null && dinner.d != null) { return new ContentProviderResult() { Content = String.Format(_nerdDinnerContentFormat, dinner.d.Latitude, dinner.d.Longitude, dinner.d.Address, String.Format( _nerdDinnerInfoContentFormat, dinner.d.Title, dinner.d.EventDate.Value.Date.ToLongDateString(), dinner.d.EventDate.Value.ToLongTimeString(), dinner.d.Address, dinner.d.Description, dinner.d.DinnerID)), Title = dinner.d.Title }; } return null; })); } return(TaskAsyncHelper.FromResult <ContentProviderResult>(null)); }
protected override Task <ContentProviderResult> GetCollapsibleContent(ContentProviderHttpRequest request) { return(TaskAsyncHelper.FromResult(new ContentProviderResult() { Content = String.Format(_iframedMeetingFormat, request.RequestUri.AbsoluteUri), Title = "Join Me Meeting: " + request.RequestUri.AbsoluteUri.ToString() })); }
protected override Task <ContentProviderResult> GetCollapsibleContent(ContentProviderHttpRequest request) { return(TaskAsyncHelper.FromResult(new ContentProviderResult() { Content = String.Format(_iframedMeetingFormat, request.RequestUri.AbsoluteUri), Title = String.Format(LanguageResources.JoinMeContent_DefaultTitle, request.RequestUri.AbsoluteUri) })); }
protected override Task <ContentProviderResult> GetCollapsibleContent(ContentProviderHttpRequest request) { return(TaskAsyncHelper.FromResult(new ContentProviderResult() { Content = String.Format(@"<img src=""{0}"" />", request.RequestUri), Title = request.RequestUri.AbsoluteUri.ToString() })); }
public Task <ContentProviderResult> GetContent(ContentProviderHttpRequest request) { return(TaskAsyncHelper.FromResult(new ContentProviderResult() { Content = String.Format(@"<audio controls=""controls"" src=""{0}"">Your browser does not support the audio tag.</audio>", request.RequestUri), Title = request.RequestUri.AbsoluteUri.ToString() })); }
protected override Task <ContentProviderResult> GetCollapsibleContent(ContentProviderHttpRequest request) { return(base.GetCollapsibleContent(request).Then(content => { var queryString = new QueryStringCollection(request.RequestUri.Query); content.Title = queryString["q"] ?? LanguageResources.GoogleMapsContent_DefaultTitle; return content; })); }
protected override Task <ContentProviderResult> GetCollapsibleContent(ContentProviderHttpRequest request) { return(base.GetCollapsibleContent(request).Then(content => { var queryString = HttpUtility.ParseQueryString(request.RequestUri.Query); content.Title = queryString["q"] ?? "Google Maps"; return content; })); }
protected override Task <ContentProviderResult> GetCollapsibleContent(ContentProviderHttpRequest request) { string id = request.RequestUri.AbsoluteUri.Split('/').Last(); return(TaskAsyncHelper.FromResult(new ContentProviderResult() { Content = String.Format(@"<img src=""https://i.imgur.com/{0}.png"" />", id), Title = request.RequestUri.AbsoluteUri })); }
protected override Task <ContentProviderResult> GetCollapsibleContent(ContentProviderHttpRequest request) { var spotifyUri = ExtractSpotifyUri(request.RequestUri.AbsolutePath); return(TaskAsyncHelper.FromResult(new ContentProviderResult() { Content = String.Format("<iframe src=\"https://embed.spotify.com/?uri=spotify:{0}\" width=\"300\" height=\"380\" frameborder=\"0\" allowtransparency=\"true\"></iframe>", spotifyUri), Title = String.Format("spotify:track:{0}", spotifyUri) })); }
protected override Task <ContentProviderResult> GetCollapsibleContent(ContentProviderHttpRequest request) { string url = request.RequestUri.ToString(); return(TaskAsyncHelper.FromResult(new ContentProviderResult() { Content = String.Format(@"<img src=""proxy?url={0}"" />", Encoder.HtmlAttributeEncode(url)), Title = url })); }
public Task <ContentProviderResult> GetContent(ContentProviderHttpRequest request) { string url = request.RequestUri.ToString(); return(TaskAsyncHelper.FromResult(new ContentProviderResult() { Content = String.Format(@"<audio controls=""controls"" src=""{1}"">{0}</audio>", LanguageResources.AudioTagSupportRequired, Encoder.HtmlAttributeEncode(url)), Title = request.RequestUri.AbsoluteUri })); }
protected override Task <ContentProviderResult> GetCollapsibleContent(ContentProviderHttpRequest request) { string format = "<video width=\"640\" height=\"360\" preload=\"none\" controls=\"\" style=\"display: block;\"><source src=\"{0}\" type=\"{1}\">Sorry, you don't have HTML5 video, but you can try to view it directly: <a href=\"{0}\">{0}</a></video>"; string href = request.RequestUri.ToString(); return(TaskAsyncHelper.FromResult(new ContentProviderResult() { Content = String.Format(format, Encoder.HtmlAttributeEncode(href), Encoder.HtmlAttributeEncode(GetContentType(request.RequestUri))), Title = href })); }
protected override Task <ContentProviderResult> GetCollapsibleContent(ContentProviderHttpRequest request) { return(ExtractFromResponse(request).Then(pageInfo => { return new ContentProviderResult() { Content = String.Format(ContentFormat, pageInfo.Title, pageInfo.ImageURL, pageInfo.Title, pageInfo.Title, pageInfo.Description, pageInfo.PageURL, LanguageResources.ViewArticle), Title = pageInfo.Title }; })); }
protected override Task <ContentProviderResult> GetCollapsibleContent(ContentProviderHttpRequest request) { return(FetchArticle(request.RequestUri).Then(article => { return new ContentProviderResult() { Title = article.title, Content = article.html }; })); }
protected override Task <ContentProviderResult> GetCollapsibleContent(ContentProviderHttpRequest request) { return(ExtractFromResponse(request).Then(pageInfo => { return new ContentProviderResult { Content = String.Format(ContentFormat, pageInfo.Title, pageInfo.WordDefinition, pageInfo.ImageURL), Title = pageInfo.Title }; })); }
protected override Task <ContentProviderResult> GetCollapsibleContent(ContentProviderHttpRequest request) { return(ExtractIFrameCode(request).Then(result => { var iframeHtml = HttpUtility.HtmlDecode(result); return new ContentProviderResult() { Content = iframeHtml.Replace("http://", "https://"), Title = request.RequestUri.AbsoluteUri.ToString() }; })); }
protected override Task <ContentProviderResult> GetCollapsibleContent(ContentProviderHttpRequest request) { var parameters = ExtractParameters(request.RequestUri); return(TaskAsyncHelper.FromResult(new ContentProviderResult() { Content = String.Format(_gitHubIssuesContentFormat, parameters[1], String.Format(_gitHubIssuesApiFormat, parameters[0], parameters[1]) ), Title = request.RequestUri.AbsoluteUri })); }
protected override Task <ContentProviderResult> GetCollapsibleContent(ContentProviderHttpRequest request) { return(ExtractFromResponse(request).Then(pageInfo => { return new ContentProviderResult { Content = String.Format(ContentFormat, HttpUtility.HtmlAttributeEncode(pageInfo.ImageURL), HttpUtility.HtmlAttributeEncode(pageInfo.Title)), Title = pageInfo.Title }; })); }
protected override Task <ContentProviderResult> GetCollapsibleContent(ContentProviderHttpRequest request) { var url = String.Format(@"http://soundcloud.com/oembed?format=json&iframe=true&show_comments=false&url={0}", request.RequestUri.AbsoluteUri); return(Http.GetJsonAsync <SoundCloudResponse>(url).Then(widgetInfo => { return new ContentProviderResult { Title = widgetInfo.Title, Content = widgetInfo.FrameMarkup }; })); }
protected override Task <ContentProviderResult> GetCollapsibleContent(ContentProviderHttpRequest request) { string packageName = ExtractPackageName(request.RequestUri); if (!String.IsNullOrEmpty(packageName)) { return(FetchPackage(packageName).Then(package => { if (package != null && package.d.results.Count > 0) { var packageInfo = package.d.results[0]; var projectIcon = String.Empty; if (packageInfo.IconUrl != null) { projectIcon = String.Format("<img class=\"nuget-projecticon\" src=\"{0}\" />", packageInfo.IconUrl); } var projectInfo = new StringBuilder(); projectInfo.AppendFormat("<div class=\"nuget-authors\" ><span>Authors: </span><div class=\"nuget-authors-entry\">{0}</div></div>", packageInfo.Authors); projectInfo.AppendFormat("<div class=\"nuget-downloads\" ><span># Downloads:</span> {0}</div>", packageInfo.DownloadCount); if (packageInfo.ProjectUrl != null) { projectInfo.AppendFormat( "<div class=\"nuget-ProjectUrl\" ><a target=\"_blank\" href=\"{0}\">{0}</a></div>", packageInfo.ProjectUrl); } return new ContentProviderResult() { Content = String.Format(_nugetBadgeFormat, packageInfo.Id, packageInfo.Title, packageInfo.Summary, projectIcon, packageInfo.Description, projectInfo), Title = packageInfo.Title + " NuGet package" }; } return null; })); } return(TaskAsyncHelper.FromResult <ContentProviderResult>(null)); }
protected override Task <ContentProviderResult> GetCollapsibleContent(ContentProviderHttpRequest request) { string id = request.RequestUri.AbsoluteUri.Split('/').Last(); string format = @"<img src=""https://i.imgur.com/{0}.jpg"" />"; if (_config.ProxyImages) { format = @"<img src=""proxy?url=http://i.imgur.com/{0}.jpg"" />"; } return(TaskAsyncHelper.FromResult(new ContentProviderResult() { Content = String.Format(format, id), Title = request.RequestUri.AbsoluteUri })); }
protected override Task <ContentProviderResult> GetCollapsibleContent(ContentProviderHttpRequest request) { var match = TwitPicUrlRegex.Match(request.RequestUri.AbsoluteUri); if (match.Success) { var id = match.Groups["Id"].Value; return(TaskAsyncHelper.FromResult(new ContentProviderResult() { Content = String.Format(_twitPicFormatString, id), Title = request.RequestUri.AbsoluteUri })); } return(TaskAsyncHelper.FromResult <ContentProviderResult>(null)); }
protected override Task <ContentProviderResult> GetCollapsibleContent(ContentProviderHttpRequest request) { return(ExtractFromResponse(request).Then(pageInfo => { if (pageInfo == null) { return null; } return new ContentProviderResult { Content = String.Format(ContentFormat, pageInfo.PageURL, pageInfo.QuoteNumber, pageInfo.Quote), Title = pageInfo.PageURL }; })); }
protected override Task <ContentProviderResult> GetCollapsibleContent(ContentProviderHttpRequest request) { // We have to make a call to the SlideShare api because // their embed code request the unique ID of the slide deck // where we will only have the url -- this call gets the json information // on the slide deck and that package happens to already contain the embed code (.html) var url = String.Format(_oEmbedUrl, request.RequestUri.AbsoluteUri); return(Http.GetJsonAsync(url).Then(slideShareData => { return new ContentProviderResult() { Content = slideShareData.html, Title = slideShareData.title }; })); }
private Task <PageInfo> ExtractFromResponse(ContentProviderHttpRequest request) { return(Http.GetAsync(request.RequestUri).Then(response => { var pageInfo = new PageInfo(); using (var responseStream = response.GetResponseStream()) { var htmlDocument = new HtmlDocument(); htmlDocument.Load(responseStream); var title = htmlDocument.DocumentNode.SelectSingleNode("//meta[@property='og:title']"); var imageURL = htmlDocument.DocumentNode.SelectSingleNode("//meta[@property='og:image']"); pageInfo.Title = title != null ? title.Attributes["content"].Value : String.Empty; pageInfo.ImageURL = imageURL != null ? imageURL.Attributes["content"].Value : String.Empty; pageInfo.WordDefinition = GetWordDefinition(htmlDocument); } return pageInfo; })); }
private Task <PageInfo> ExtractFromResponse(ContentProviderHttpRequest request) { return(Http.GetAsync(request.RequestUri).Then(response => { var info = new PageInfo(); using (var responseStream = response.GetResponseStream()) { using (var sr = new StreamReader(responseStream)) { var pageContext = WebUtility.HtmlDecode(sr.ReadToEnd()); info.Title = ExtractUsingRegex(new Regex(@"<meta\s.*property=""og:title"".*content=""(.*)"".*/>"), pageContext); info.Description = ExtractUsingRegex(new Regex(@"<meta\s.*name=""Description"".*content=""(.*)"".*/>"), pageContext); info.ImageURL = ExtractUsingRegex(new Regex(@"<meta.*property=""og:image"".*content=""(.*)"".*/>"), pageContext); info.PageURL = request.RequestUri.AbsoluteUri; } } return info; })); }
protected override Task <ContentProviderResult> GetCollapsibleContent(ContentProviderHttpRequest request) { var parameters = new QueryStringCollection(request.RequestUri); // Extract either the term or defid field from request.RequestUri string defid = parameters["defid"]; string term = parameters["term"]; if (string.IsNullOrWhiteSpace(term) && string.IsNullOrWhiteSpace(defid)) { return(null); } var apiQuery = string.Format(_urbanDictionaryAPIURL, string.IsNullOrWhiteSpace(term) ? string.Empty : string.Format("term={0}", term), string.IsNullOrWhiteSpace(defid) ? string.Empty : string.Format("&defid={0}", defid)); return(FetchArticle(new Uri(apiQuery)).Then(result => { var list = result.list; var count = list.Count; if (count > 0) { string definition = list[0].definition; string permalink = list[0].permalink; string title = list[0].word; string example = list[0].example; return new ContentProviderResult { Title = title, Content = string.Format(_contentFormat, permalink, title, definition.Replace("\n", "<br/>"), example.Replace("\n", "<br/>")) }; } return null; })); }