/// <summary> /// Gets the search result from wikipedia. /// </summary> /// <param name="messagingExtensionActivityAction">The messaging extension activity action.</param> /// <returns>Messaging extension result.</returns> public async Task <MessagingExtensionResult> GetSearchResultAsync(MessagingExtensionActivityAction messagingExtensionActivityAction) { MessagingExtensionResult composeExtensionResult = new MessagingExtensionResult { Type = "result", AttachmentLayout = "list", Attachments = new List <MessagingExtensionAttachment>(), }; IList <WikipediaResult> searchResults = new List <WikipediaResult>(); // Search Wikipedia string apiUrl = GenerateSearchApiUrl(messagingExtensionActivityAction.MessagingExtensionQuery); WikipediaQueryResult queryResult = await this.InvokeWikipediaApiAsync(apiUrl).ConfigureAwait(false); searchResults = queryResult.Query.Results; // Grab pageIds so that we can batch query to fetch image urls of the pages IList <string> pageIds = new List <string>(); foreach (WikipediaResult searchResult in searchResults) { pageIds.Add(searchResult.Pageid); } IDictionary <string, string> imageResults = await this.GetImageUrlAsync(pageIds).ConfigureAwait(false); // Genereate results foreach (WikipediaResult searchResult in searchResults) { string imageUrl = DefaultImageUrl; // Always set a default image url in case of failure, or image doesn't exist if (imageResults.ContainsKey(searchResult.Pageid)) { imageUrl = imageResults[searchResult.Pageid]; } ThumbnailCard previewCard = new ThumbnailCard { Title = HttpUtility.HtmlEncode(searchResult.Title), Text = searchResult.Snippet, }; previewCard.Images = new CardImage[] { new CardImage(imageUrl, searchResult.Title) }; // Generate cards with links in the titles - preview cards don't have links ThumbnailCard card = new ThumbnailCard { Title = "<a href='" + HttpUtility.HtmlAttributeEncode("https://en.wikipedia.org/wiki/" + Uri.EscapeDataString(searchResult.Title)) + "' target='_blank'>" + HttpUtility.HtmlEncode(searchResult.Title) + "</a>", Text = searchResult.Snippet, Images = previewCard.Images, }; composeExtensionResult.Attachments.Add(card.ToAttachment().ToMessagingExtensionAttachment(previewCard.ToAttachment())); } return(composeExtensionResult); }
/// <summary> /// Gets the image URL asynchronously. /// </summary> /// <param name="pageIds">The page ids.</param> /// <returns>Image url map.</returns> private async Task <IDictionary <string, string> > GetImageUrlAsync(IList <string> pageIds) { string pageIdQuery = string.Join("|", pageIds); IDictionary <string, string> result = new Dictionary <string, string>(); WikipediaQueryResult queryResult = await this.InvokeWikipediaApiAsync(ImageSearchUrl + pageIdQuery).ConfigureAwait(false); if (queryResult != null && queryResult.Query != null) { foreach (WikipediaPage page in queryResult.Query.Pages) { if (page.Thumbnail != null) { result.Add(page.Pageid, page.Thumbnail.Source); } } } return(result); }