Пример #1
0
        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;
            }));
        }
Пример #2
0
        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;
            }));
        }
Пример #3
0
        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()
     }));
 }
Пример #6
0
 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)
     }));
 }
Пример #7
0
 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()
     }));
 }
Пример #8
0
 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()
     }));
 }
Пример #9
0
 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;
     }));
 }
Пример #11
0
        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
            }));
        }
Пример #12
0
        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)
            }));
        }
Пример #13
0
        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
            }));
        }
Пример #14
0
        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
            }));
        }
Пример #15
0
        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
            }));
        }
Пример #16
0
 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
         };
     }));
 }
Пример #17
0
 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
         };
     }));
 }
Пример #19
0
 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()
         };
     }));
 }
Пример #20
0
        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
            }));
        }
Пример #21
0
 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
                };
            }));
        }
Пример #23
0
        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));
        }
Пример #24
0
        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
            }));
        }
Пример #25
0
        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;
            }));
        }
Пример #29
0
        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;
            }));
        }
Пример #30
0
        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;
            }));
        }