Google URL Shortener com C#

O Google URL Shortener é um serviço utilizado para encurtar as urls em menos caracteres. Os usuários podem criar seus links em goo.gl, ou eles podem criá-los através da API URL Shortener.
Abaixo segue uma tabela com as possíveis requisições e um pequeno exemplo de código.

Referência API

Esta referência API é organizada por tipo de recurso. Cada tipo de recurso tem uma ou mais representações de dados e um ou mais métodos.

Método REST URI * Descrição
insert POST  /url?key={key} O método url.insert cria uma nova URL curta.
get GET  /url?key={key}&shortUrl={shortUrl}&projection={projection?} O método url.get obtém informações de expansão da URL curta especificada.
list GET  /url/history?key={key}&start-token={startToken?}&projection={projection?} O método url.list recupera uma lista de URLs encurtadas pelo usuário autenticado.

Requisição via POST:

https://www.googleapis.com/urlshortener/v1/url?key={suaChave}

{
    "longUrl": "https://developers.google.com/url-shortener/v1/"
}

Resultado:

{
    "kind": "urlshortener#url"
    "id": "https://goo.gl/7R202"
    "longUrl": "https://developers.google.com/url-shortener/v1/"
}

 

Desenvolvendo um pequeno exemplo

Objeto que recebe o resultado

public class GoogleShortenerURLResponse
{
     public string id { get; set; }
     public string kind { get; set; }
     public string longUrl { get; set; }
}

Método responsável pela requisição

public string shortener(string url)
{
	string key = "{sua_chave}";
	string post = "{\"longUrl\": \"" + url + "\"}";
	string shortUrl = url;
	HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://www.googleapis.com/urlshortener/v1/url?key=" + Key);
	string json = "";
	try
	{
		request.ServicePoint.Expect100Continue = false;
		request.Method = "POST";
		request.ContentLength = post.Length;
		request.ContentType = "application/json";
		request.Headers.Add("Cache-Control", "no-cache");

		using (Stream requestStream = request.GetRequestStream())
		{
			byte[] postBuffer = Encoding.ASCII.GetBytes(post);
			requestStream.Write(postBuffer, 0, postBuffer.Length);
		}

		using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
		{
			using (Stream responseStream = response.GetResponseStream())
			{
				using (StreamReader responseReader = new StreamReader(responseStream, Encoding.ASCII))
				{
					JsonSerializer serializer = new JsonSerializer();
					serializer.Converters.Add(new JavaScriptDateTimeConverter());
					serializer.NullValueHandling = NullValueHandling.Ignore;

					JavaScriptSerializer json_serializer = new JavaScriptSerializer();

					json = responseReader.ReadToEnd();

					dynamic pessoa = Json.Decode(json);

					GoogleShortenedURLResponse obj = Json.Decode(json);

					shortUrl = obj.id;

					var teste = json_serializer.DeserializeObject(json);

				}
			}
		}
	}
	catch (Exception ex)
	{
		System.Diagnostics.Debug.WriteLine(ex.Message);
		System.Diagnostics.Debug.WriteLine(ex.StackTrace);
	}
	return shortUrl;
}

Controller

public ActionResult Index()
{
	return View();
}

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult ShortenerURL(string longurl)
{
	GoogleShortenerURLRequest googSentJson = new GoogleShortenerURLRequest();

	ViewBag.ShortenerUrl = googSentJson.shortener(longurl);
	return View();
}

Views

Index.cshtml:

@{
    ViewBag.Title = "Index";
}

URL longa

@using (Html.BeginForm("ShortenerURL", "Home", FormMethod.Post)) { @Html.Label("URL: ") @Html.TextBox("longurl", "", new { @maxlength = "255" }) }

ShortenerURL.cshtml:

@{
    ViewBag.Title = "ShortenURL";
}

Resultado:

@ViewBag.ShortenedUrl

Espero que tenham gostado, qualquer dúvida, crítica ou sugestão só deixar um comentário.

Abraço e até o próximo post.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *