Online courses in ASP.NET MVC / Core, jQuery, Angular, and Design Patterns conducted by Bipin Joshi. Read more...
Learn ASP.NET MVC / Core, jQuery, Angular, and Design Patterns through our online training programs. Courses conducted by Bipin Joshi on weekends. Read more details here.

Untitled 1

Generating Short URLs using Google URL Shortener API

At times URLs that you wish to share with others are too long to be shared in their original form. Such long URLs can affect the readability and flow of your message. Additionally, they are unsuitable to use with applications such as Twitter because of their length. Many websites, therefore, allow you to create a shorter version of a URL which gets expanded to the full original URL when accessed. Google provides such a facility through their goo.gl website. You can go to goo.gl website and manually generate a short version of a URL by manually entering it. The following figure shows the goo.gl website:

Though this manual approach of generating short URLs works well for the known URLs, it's unsuitable in situations where you need to generate a short URL at runtime. Consider, for example, that you are developing your own photo album website. For the sake of SEO and other reasons you have created long URLs that include the date stamp of the photo and its title. Now, if you want the end users to share URLs to their photos with their friends via email or social networking websites you can't expect them to go to Google url shortener to generate a short version of their photo URLs. In such cases it would be better to integrate the functionality of generating shorter URLs in your web application itself. Luckily, Google url shortener exposes an API that can be used to accomplish this job.

To use the Google url shortener API you need an API key that is specific to your Google account. To get this API key go to Google API console, active Google URL Shortener API service and get your key from the API Access option.

Once you get the API key you are ready to use it in any ASP.NET project.

To illustrate the generation of short URLs using Google URL Shortener API we will develop an ASP.NET MVC application. So, begin by creating a new ASP.NET MVC 4 project in Visual Studio 2012.

Once created, add a new controller to the project and name it as HomeController. Inside HomeController add a new action method as shown below:

[HttpPost]
public JsonResult GetShortURL(string longUrl)
{
    WebRequest request = WebRequest.Create("https://www.googleapis.com/urlshortener/v1/url?key=YOUR_API_KEY_HERE");
    request.Method = "POST";
    request.ContentType = "application/json";
    string requestData = string.Format(@"{{""longUrl"": ""{0}""}}", longUrl);
    byte[] requestRawData = Encoding.ASCII.GetBytes(requestData);
    request.ContentLength = requestRawData.Length;
    Stream requestStream = request.GetRequestStream();
    requestStream.Write(requestRawData, 0, requestRawData.Length);
    requestStream.Close();

    WebResponse response = request.GetResponse();
    StreamReader responseReader = new StreamReader(response.GetResponseStream());
    string responseData = responseReader.ReadToEnd();
    responseReader.Close();

    var deserializer = new JavaScriptSerializer();
    var results = deserializer.Deserialize<GoogleResponse>(responseData);
    return Json(results.Id);
}

The GetShortURL() action method returns JsonResult because you will calling it through the client side jQuery code. It accepts longUrl as a parameter that indicates the URL you wish to shorten. Inside it creates an instance of WebRequest object using the static Create() method. Notice the parameter passed to the Create() method. This the Google URL Shortener service end point. Also note that you should pass your API key in the key query string parameter.

The method property of the WebRequest object is set to POST indicating that you will be issuing an HTTP POST request. The ContentType property indicates the type of content sent during the POST request. In this case it is application/json because the Google URL Shortener API expects the long URL encapsulated in a JSON object as shown in the string.Format() call on the next line.

To send this JSON object you first use  GetRequestStream() method that returns a Stream object for the request. Then you use the write() method to write a byte array representation of the JSON data. Finally, request stream is closed.

To read the response sent back by the Google URL Shortener service you use GetResponse() method. The actual response is read using a StreamReader object. The response sent by the service is in the form of a JSON object. To convert this JSON object into a .NET object you first need to define a class that mimics the structure of the JSON object. In our example the GoogleResponse class does this job and is shown below:

public class GoogleResponse
{
    public string Kind { get; set; }
    public string Id { get; set; }
    public string LongUrl { get; set; }
}

As you can see the GoogleResponse class contains three public string properties viz. Kind, Id and LongUrl. The Id property will contain the short version of the specified LongUrl.

The JavaScriptSerializer class used in the GetShortURL() action method deserializes the JSON response into a .NET object of type GoogleResponse. Once deserialized you can return the Id property of the GoogleResponse object to the caller. Notice the use of Json() method that converts an object into its JSON equivalent. You could have directly sent the JSON response to the caller but in this case you wish to return only the short URL string to the caller.

Next, add Index view to the project and modify its HTML markup as shown below:

<span>Enter Long URL :</span>
<br />
<br />
<input type="text" id="text1" size="60" />
<br /><br />
<input type="button" id="button1" value="Get Short URL"/>
<br /><br />
<input type="text" id="text2" readonly="readonly" size="60" />

The view consists of two textboxes and a button. The first textbox accepts the long URL whereas the second textbox displays the short URL returned from the GetShortURL() action method. That's why it is read only.

Now, add the following jQuery code in a <script> block:

$(document).ready(function () {
    $("#button1").click(function () {
        $.ajax({
            type: "POST",
            url: "/home/GetShortURL",
            contentType: "application/json;charset=utf-8",
            dataType: "json",
            data: '{ "longUrl" : "' + $("#text1").val() + '" }',
            success: function (results) {
                $("#text2").val(results);
            },
            error: function (err) {
                alert(err.status + " - " + err.statusText);
            }
        });
    });
});

The ready() function contains code that represents the click event handler of the "Get Short URL" button. The click event handler uses jQuery $.ajax() to make a POST request to the GetShortURL() action method you created earlier. The type and url parameters indicate these two pieces of request. The data is passed as a JSON object and comprises of the longUrl grabbed from the first textbox. The success parameter receives the short version of the URL and the same is displayed to the end user in the second textbox.

That's it! Run the application, enter some long URL and click on the "Get Short URL" button. The second textbox should show the http://goo.gl URL for the long URL. Verify that the short URL takes you to the long URL by entering in a new browser window.

 

 

 




Bipin Joshi is a software consultant, trainer, author and a yogi having 21+ years of experience in software development. He conducts online courses in ASP.NET MVC / Core, jQuery, AngularJS, and Design Patterns. He is a published author and has authored or co-authored books for Apress and Wrox press. Having embraced Yoga way of life he also teaches Ajapa Meditation to interested individuals. To know more about him click here.

Get connected : Twitter  Facebook  Google+  LinkedIn

Posted On : 04 Mar 2013



Tags : ASP.NET MVC C# jQuery