view Agendas/trunk/src/Agendas.Google/GUrlShortenerAdapter.cs @ 214:7d838e7d83b3

Se soluciona ticket 176. Se agrega validación para que no se pueda agendar otro evento con el mismo título, buscando los eventos que no estén en estado propuesto.
author alabra
date Wed, 24 Aug 2011 19:49:18 -0300
parents e6abe8e1a794
children 806fd94727ce
line wrap: on
line source

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)
		{
			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;
		}
	}
}