Xamarin.Forms - Bing Video Search Using Cognitive Service

In this article, you will learn how to search for videos using Bing Search API using Cognitive Service in Xamarin.Forms.

Introduction

Before starting, you can go through the following URL for an overview of Bing Web Search.
Xamarin.Forms - Bing Video Search Using Cognitive Service
 
Xamarin.Forms code runs on multiple platforms - each of which has its own filesystem. This means that reading and writing files is most easily done using the native file APIs on each platform. Alternatively, embedded resources are a simpler solution to distribute data files with an app.
 
Cognitive Services
Xamarin.Forms - Bing Video Search Using Cognitive Service
 
Xamarin and Cognitive Services together can infuse your apps, websites, and bots with intelligent algorithms to see, hear, speak, understand and interpret your user needs through natural methods of communication. Also, they help you transform your business with AI today.
 
Use AI to solve business problems
  • Vision
  • Speech
  • Knowledge
  • Search
  • Language
Bing Video Search API
  1. Bing Video Search API provides an experience similar to Bing Videos.
  2. Bing Video Search API lets you send a search query to Bing and get back a list of relevant videos from the Bing Video Search API.
Prerequisites
  • Visual Studio 2017 or Later(Windows or Mac)
  • Bing Search API Key
Setting up a Xamarin.Forms Project
 
Start by creating a new Xamarin.Forms project. You’ll learn more by going through the steps yourself.
 
Visual Studio 2019 has more options in the opening window. Clone or check out the code from any repository or, open a project or solution for your computer.
 
Now, you need to click "Create a new project".
 
Xamarin.Forms - Bing Video Search Using Cognitive Service 
 
Now, filter by Project Type: Mobile
 
Choose the Mobile App (Xamarin. forms) project under C# and Mobile.
 
Xamarin.Forms - Bing Video Search Using Cognitive Service 
 
Name your app. You probably want your project and solution to use the same name as your app. Put it on your preferred location for projects and click "Create".
 
Xamarin.Forms - Bing Video Search Using Cognitive Service 
 
Now, select the blank app and target platforms - Android, iOS and Windows (UWP).
 
Xamarin.Forms - Bing Video Search Using Cognitive Service 
 
Subsequently, go to the solution. In there, you get all the files and sources of your project (.NET Standard). Now, select XAML page and double-click to open the MainPage.Xaml page.
 
You now have a basic Xamarin.Forms app. Click the Play button to try it out.
 
Xamarin.Forms - Bing Video Search Using Cognitive Service 
 
Get Bing Search API Key
 
In this step, get Bing Search API Key. Go to the following link. 
https://azure.microsoft.com/en-in/services/cognitive-services/
 
Click "Try Cognitive Services for free".
 
Xamarin.Forms - Bing Video Search Using Cognitive Service 
 
Now, you can choose Bing Search APIs under Search APIs. Afterward, click "Get API Key".
Xamarin.Forms - Bing Video Search Using Cognitive Service 
Read the terms, and select your country/region. Afterward, click "Next".
 
Xamarin.Forms - Bing Video Search Using Cognitive Service
 
Now, log in using your preferred account.
 
Xamarin.Forms - Bing Video Search Using Cognitive Service
 
Now, the API key is activated. You can use it now.
 
Note
The trial key is available only for 7 days.
 
Xamarin.Forms - Bing Video Search Using Cognitive Service 
Setting up the User Interface
 
Go to MainPage.Xaml and write the following code.
 
MainPage.xaml
  1. <?xml version="1.0" encoding="utf-8" ?>  
  2. <ContentPage xmlns="http://xamarin.com/schemas/2014/forms"  
  3.              xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"  
  4.              xmlns:local="clr-namespace:XamarinCognitive"  
  5.              x:Class="XamarinCognitive.MainPage">  
  6.   
  7.     <StackLayout>  
  8.         <StackLayout>  
  9.             <StackLayout HorizontalOptions="Center" VerticalOptions="Start">  
  10.                 <Image x:Name="imgBanner" Source="banner.png" ></Image>  
  11.                 <Image Margin="0,0,0,10" x:Name="imgEmail" HeightRequest="100" Source="cognitiveservice.png" ></Image>  
  12.                 <Label Margin="0,0,0,10" Text="Bing Video Search" FontAttributes="Bold" FontSize="Large" TextColor="Gray" HorizontalTextAlignment="Center" ></Label>  
  13.                 <Entry x:Name="txtSearch" Placeholder="Type here.."></Entry>  
  14.                 <Button x:Name="btnSearch" WidthRequest="50" Text="Search" Clicked="BtnSearch_Clicked" />  
  15.                 <StackLayout HorizontalOptions="CenterAndExpand" Margin="10,0,0,10">  
  16.                     <ListView x:Name="listVideos">  
  17.                           
  18.                     </ListView>  
  19.                 </StackLayout>  
  20.             </StackLayout>  
  21.         </StackLayout>  
  22.     </StackLayout>  
  23.   
  24. </ContentPage>  
Click the play button to try it out.
 
Xamarin.Forms - Bing Video Search Using Cognitive Service
 
NuGet Packages
 
Now, add the following NuGet Packages.
  • Newtonsoft.Json
Add Newtonsoft.Json NuGet
 
Go to Solution Explorer and select your solution. Right-click and select "Manage NuGet Packages for Solution". Search "Newtonsoft.Json" and add Package. Remember to install it for each project (.NET Standard, Android, iO, and UWP).
 
Create a Model
 
In this step, you can create a model for Deserializing your response.
 
ResponseModel.cs
  1. using System;  
  2. using System.Collections.Generic;  
  3. using System.Text;  
  4.   
  5. namespace XamarinCognitive  
  6. {  
  7.     public class ResponseModel  
  8.     {  
  9.         public string _type { getset; }  
  10.         public Instrumentation instrumentation { getset; }  
  11.         public string readLink { getset; }  
  12.         public string webSearchUrl { getset; }  
  13.         public QueryContext queryContext { getset; }  
  14.         public int totalEstimatedMatches { getset; }  
  15.         public List<Value> value { getset; }  
  16.         public int nextOffset { getset; }  
  17.         public List<QueryExpansion> queryExpansions { getset; }  
  18.         public List<PivotSuggestion> pivotSuggestions { getset; }  
  19.         public List<RelatedSearch> relatedSearches { getset; }  
  20.     }  
  21.     public class Instrumentation  
  22.     {  
  23.         public string _type { getset; }  
  24.     }  
  25.   
  26.     public class QueryContext  
  27.     {  
  28.         public string originalQuery { getset; }  
  29.         public string alterationDisplayQuery { getset; }  
  30.         public string alterationOverrideQuery { getset; }  
  31.         public string alterationMethod { getset; }  
  32.         public string alterationType { getset; }  
  33.     }  
  34.   
  35.     public class Publisher  
  36.     {  
  37.         public string name { getset; }  
  38.     }  
  39.   
  40.     public class Creator  
  41.     {  
  42.         public string name { getset; }  
  43.     }  
  44.   
  45.     public class Thumbnail  
  46.     {  
  47.         public int width { getset; }  
  48.         public int height { getset; }  
  49.     }  
  50.   
  51.     public class Value  
  52.     {  
  53.         public string webSearchUrl { getset; }  
  54.         public string name { getset; }  
  55.         public string description { getset; }  
  56.         public string thumbnailUrl { getset; }  
  57.         public DateTime datePublished { getset; }  
  58.         public List<Publisher> publisher { getset; }  
  59.         public Creator creator { getset; }  
  60.         public bool isAccessibleForFree { getset; }  
  61.         public bool isFamilyFriendly { getset; }  
  62.         public string contentUrl { getset; }  
  63.         public string hostPageUrl { getset; }  
  64.         public string encodingFormat { getset; }  
  65.         public string hostPageDisplayUrl { getset; }  
  66.         public int width { getset; }  
  67.         public int height { getset; }  
  68.         public string duration { getset; }  
  69.         public string motionThumbnailUrl { getset; }  
  70.         public string embedHtml { getset; }  
  71.         public bool allowHttpsEmbed { getset; }  
  72.         public int viewCount { getset; }  
  73.         public Thumbnail thumbnail { getset; }  
  74.         public string videoId { getset; }  
  75.         public bool allowMobileEmbed { getset; }  
  76.         public bool isSuperfresh { getset; }  
  77.     }  
  78.   
  79.     public class Thumbnail2  
  80.     {  
  81.         public string thumbnailUrl { getset; }  
  82.     }  
  83.   
  84.     public class QueryExpansion  
  85.     {  
  86.         public string text { getset; }  
  87.         public string displayText { getset; }  
  88.         public string webSearchUrl { getset; }  
  89.         public string searchLink { getset; }  
  90.         public Thumbnail2 thumbnail { getset; }  
  91.     }  
  92.   
  93.     public class Thumbnail3  
  94.     {  
  95.         public string thumbnailUrl { getset; }  
  96.     }  
  97.   
  98.     public class Suggestion  
  99.     {  
  100.         public string text { getset; }  
  101.         public string displayText { getset; }  
  102.         public string webSearchUrl { getset; }  
  103.         public string searchLink { getset; }  
  104.         public Thumbnail3 thumbnail { getset; }  
  105.     }  
  106.   
  107.     public class PivotSuggestion  
  108.     {  
  109.         public string pivot { getset; }  
  110.         public List<Suggestion> suggestions { getset; }  
  111.     }  
  112.   
  113.     public class Thumbnail4  
  114.     {  
  115.         public string thumbnailUrl { getset; }  
  116.     }  
  117.   
  118.     public class RelatedSearch  
  119.     {  
  120.         public string text { getset; }  
  121.         public string displayText { getset; }  
  122.         public string webSearchUrl { getset; }  
  123.         public string searchLink { getset; }  
  124.         public Thumbnail4 thumbnail { getset; }  
  125.     }  
  126.       
  127. }   
Bing Video Search
 
In this step, write the following code for Bing Video Search.
 
MainPage.xaml.cs
  1. using Xamarin.Forms;  
  2. using Newtonsoft.Json;  
  3. namespace XamarinCognitive  
  4. {  
  5.     public partial class MainPage : ContentPage  
  6.     {  
  7.         public static string APIKey = "a30148ca5fc********e49b554fc4f683";  
  8.         public static string baseURl = "https://api.cognitive.microsoft.com/bing/v7.0/videos/search";  
  9.         struct SearchResult  
  10.         {  
  11.             public String jsonResult;  
  12.             public Dictionary<String, String> relevantHeaders;  
  13.         }  
  14.   
  15.         List<string> videoList = new List<string>();  
  16.         public MainPage()  
  17.         {  
  18.             InitializeComponent();  
  19.         }  
  20.   
  21.         private void BtnSearch_Clicked(object sender, EventArgs e)  
  22.         {  
  23.             SearchResult bingResult = BingVideoSearch(txtSearch.Text);  
  24.             var res = JsonConvert.DeserializeObject<ResponseModel>(bingResult.jsonResult);  
  25.             for (int i = 0; i < res.value.Count; i++)  
  26.             {  
  27.                 videoList.Add(res.value[i].name);  
  28.             }  
  29.             listVideos.ItemsSource = videoList;  
  30.         }  
  31.   
  32.         //Bing Video Search   
  33.         static SearchResult BingVideoSearch(string searchQuery)  
  34.         {  
  35.             var uriQuery = baseURl + "?q=" + Uri.EscapeDataString(searchQuery);  
  36.             WebRequest request = HttpWebRequest.Create(uriQuery);  
  37.             request.Headers["Ocp-Apim-Subscription-Key"] = APIKey;  
  38.             HttpWebResponse response = (HttpWebResponse)request.GetResponseAsync().Result;  
  39.             string json = new StreamReader(response.GetResponseStream()).ReadToEnd();  
  40.             var searchResult = new SearchResult();  
  41.             searchResult.jsonResult = json;  
  42.             searchResult.relevantHeaders = new Dictionary<String, String>();  
  43.             foreach (String header in response.Headers)  
  44.             {  
  45.                 if (header.StartsWith("BingAPIs-") || header.StartsWith("X-MSEdge-"))  
  46.                     searchResult.relevantHeaders[header] = response.Headers[header];  
  47.             }  
  48.             return searchResult;  
  49.         }  
  50.     }  
  51. }  
Click the "Play" button to try it out.
 
Xamarin.Forms - Bing Video Search Using Cognitive Service
 
Bing Web Result 
 
Xamarin.Forms - Bing Video Search Using Cognitive Service 
 
I hope you have understood how to search for videos using Bing Search API using Cognitive Service Bing Search API in Xamarin.Forms.
Thanks for reading. Please share comments and feedback. Happy Coding :)