view Agendas/trunk/src/Agendas.Google/GUrlShortenerAdapter.cs @ 299:8522d6a25888

Domain, Patrocinador: Eliminando referencias.
author juanjose.montesdeocaarbos
date Mon, 27 Feb 2012 13:14:57 -0300
parents 806fd94727ce
children
line wrap: on
line source

using System;
using System.IO;
using System.Net;
using AltNetHispano.Agendas.Configurations;

namespace AltNetHispano.Agendas.Google
{
	public class GUrlShortenerAdapter
	{
		private readonly ShortenConfigurationElement _config;

		public GUrlShortenerAdapter()
		{
			_config = AgendasConfigurationManager.Publicadores.Google.Shorten;
		}

		public string GetShortUrl(string url)
		{
            if (url == null)
                throw new ArgumentNullException("url");
            else if (string.IsNullOrWhiteSpace(url))
                throw new ArgumentException();

			WebRequest request = WebRequest.Create(_config.UrlAPI);
			request.Method = WebRequestMethods.Http.Post;
			request.ContentType = "application/json";

			using (var writer = new StreamWriter(request.GetRequestStream()))
			{
				var json = string.Format("{{\"longUrl\": \"{0}\"}}", url);
				writer.Write(json);
			}

			var response = request.GetResponse() as HttpWebResponse;

			if (response != null && response.StatusCode == HttpStatusCode.OK)
			{
				var stream = response.GetResponseStream();

				if (stream != null)
				{
					using (var reader = new StreamReader(stream))
					{
						const string prefix = "\"id\": \"";

						var json = reader.ReadToEnd();

						var start = json.IndexOf(prefix) + prefix.Length;
						if (start > prefix.Length)
						{
							var length = json.IndexOf("\",", start) - start;

							if (length > 0)
								return json.Substring(start, length);
						}
					}
				}
			}

			return string.Empty;
		}
	}
}