Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
We will talk about how we can use Atlas to talk to YouTube using the REST protocol . 1) Download Visual Web Developer , Go Here2) Download Atlas , Go Here3) Get an Application Developer ID at Youtube . Go Here After you are done running around the world collecting tools , you should be all set to take on YouTube . We have a WebService that talks to YouTube's REST Interface and downloads Data .Without Getting into Discussions of using Service Bridges , we will have a wrapper over the YouTube REST-API using a webservice on the Server-Side. The YouTube Wrapper Class We have a class that wraps the Fucntionality Provided by YouTube REST APIs , lets Call it "YouTubeSearch".It will have a method called "SearchTags" which takes a Tagname as an input and will return results of the type "VideoRow" Schema of VideoRow Class ClassName : VideoRow
Methods : None
Attributes :
Name Description
Url The Url to View the Video on
ThumbNailUrl The Url to View the thumbnail of the video
Description A Short Description of the video
Signature of the SearchTags method of YouTubeSearch
public static List<VideoRow> SearchVideoTags(string tagName)
Make a WebClient Request to the RESTBased Webservice and gather the downloaded info onto a string
string requestURL = "https://www.youtube.com/api2_rest?method=youtube.videos.list_by_tag&dev_id=" +
youTubeAppId + "&tag=" + tagName + "&per_page=6"
WebClient restRequest = new WebClient();
string dataDownloaded = restRequest.DownloadString(requestURL);
Read the Downloaded String onto a DataSet
DataSet dsResultSet = new DataSet();
StringReader dataWriter = new StringReader(dataDownloaded);
dsResultSet.ReadXml(dataWriter);
Convert the DataRows onto VideoRows
foreach (DataRow drVideoRow in dsResultSet.Tables["video"].Rows) { searchResults.Add(new VideoRow( drVideoRow["url"].ToString(), drVideoRow["thumbnail_url"].ToString(), drVideoRow["description"].ToString())); }
return searchResults back to Caller
The ServerSide WebService
1) Create a WebService
2) Include the Following Directive to make the Web-Service "Client Proxiable"
using Microsoft.Web.Script.Services;
3) Decorate the Webservice with the "ScriptService" attribute.
[ScriptService]
public class AjaxService : System.Web.Services.WebService
4) The methods of the webservice that need to be proxied onto the client are marked as "WebMethod"
[WebMethod]
public string SearchYouTube(string tagName)
5) Call the SearchVideoTags method of the YouTube Wrapper class with the Parameter passed from the Client Proxy.
Have the Content Formatted in the form of a Usercontrol's rendered output .
I use a ViewManager to implement the MVC pattern here.
For an explanation of the same , refer to ScottGu's blog post Here .
Markup of the View
<asp:DataList runat="server" ID="grdvSearchResults"
RepeatColumns="6" RepeatDirection="Horizontal"
BorderStyle="None" BorderWidth="0px"
GridLines="none" Width="100%">
<ItemTemplate>
<a href="<%#DataBinder.Eval(Container.DataItem, "Url")%>">
<img src="<%#DataBinder.Eval(Container.DataItem, "ThumbNailUrl")%>"
title="<%#DataBinder.Eval(Container.DataItem, "Description")%>"/>
</a>
</ItemTemplate>
<SeparatorTemplate> </SeparatorTemplate>
</asp:DataList>
6) Return the Rendered View in the form of a String back to the Client Method calling this Webmethod .
The Client Web Page
The Following Controls will be put in ..
HTML Controls
1) A textbox which provides the Tag to search for.
<input type="text" id="searchKey"/>
2) A button to call the Search Function in the Webservice .
<input Type="button" id="btnSearchServer" onclick ="SearchYouTube(searchKey.value)" value ="Search You Tube"/>
3) A Div to show the Server Returned Markup .
<div id="serverMarkupRecipient"> Search Results Go Here </div>
AJAX Controls
A Script Manager to Generate the proxy of the webservice and handle all Ajax Scripts
We will add a Service Reference to the WebService that we want a Client proxy for ..
<asp:ScriptManager runat="server" ID="scrpManager">
<Services>
<asp:ServiceReference Path="~/Services/AjaxService.asmx" />
</Services>
</asp:ScriptManager>
Javascript Code to Call the Webservice
function SearchYouTube( searchTag )
{
// The Proxy generated enables you to do something as simple as calling a method on an object .
// the Two parameters are <inputparam>,<OnCompleteCallback>
AjaxService.SearchYouTube(searchTag,VideSearchCallback );
}
function VideSearchCallback(returnValue)
{
// Microsft Ajax enables Browser - Independent ways to wrappers To Document.getElementById as $get //Show the Div Element
$get("serverMarkupRecipient").style.display= "block"
//Inject Server Returned Markup into the DIV element
$get("serverMarkupRecipient").innerHTML = returnValue;
}
Thats it , You can download the Source of the application Here