Mercurial > altnet-hispano
view Agendas/trunk/src/Agendas.Twitter/TwitterPublicador.cs @ 111:90ce239cfa6d
Tests sobre el publicador de twitter, cada track se pulica solo una vez
author | Nelo@Kenia.neluz.int |
---|---|
date | Wed, 08 Jun 2011 08:40:04 -0300 |
parents | a456eb519e23 |
children | c3573defd18f |
line wrap: on
line source
using System.Collections.Generic; using System.Configuration; using System.Linq; using AltNetHispano.Agendas.Domain; using Twitterizer; namespace AltNetHispano.Agendas.Twitter { public class TwitterPublicador : IPublicador { private readonly ITwitterAdapter _twitterAdapter; public TwitterPublicador() { _twitterAdapter = new TwitterAdapter(); } public TwitterPublicador(ITwitterAdapter twitterAdapter) { _twitterAdapter = twitterAdapter; } public const int LIMITE_MENSAJE = 140; private string ConsumerKey { get { return ConfigurationManager.AppSettings["consumerKeyAppTwitt"]; } } private string ConsumerSecret { get { return ConfigurationManager.AppSettings["consumerSecretAppTwitt"]; } } private string AccessToken { get { return ConfigurationManager.AppSettings["accessTokenAppTwitt"]; } } private string AccessTokenSecret { get { return ConfigurationManager.AppSettings["accessTokenSecretAppTwitt"]; } } public void Publicar(IEnumerable<Track> tracks) { foreach (var track in tracks) { //Si ya hicimos el twitt de este track, no volvemos a hacerlo if (track.Logs.Any(l => l.Propietario == TrackLogPropietario.Twitter)) continue; var twitt = BuildTwitt(track); if (!string.IsNullOrWhiteSpace(twitt)) { string message; Publicar(twitt, out message); track.LogAdd(new TrackLog(TrackLogPropietario.Twitter, message)); } } } private static string BuildTwitt(Track track) { string body = string.Empty; switch (track.Accion) { case Accion.Proponer: body = "Se ha propuesto un/a nuevo/a " + track.Evento.Tipo; break; case Accion.Agendar: body = "Se ha agendando el evento" + track.Evento.Titulo; if (track.Evento.Ponente.Twitter != null) body += " con @" + track.Evento.Ponente.Twitter; break; case Accion.Confirmar: if (track.Evento.Fecha.HasValue) body = "Se confirma para el " + track.Evento.Fecha.Value.ToShortDateString() + " el evento " + track.Evento.Titulo; break; } return body.Length > LIMITE_MENSAJE ? body.Substring(0, LIMITE_MENSAJE - 1) : body; } public bool Publicar(string status, out string message) { var tokens = new OAuthTokens { ConsumerKey = ConsumerKey, ConsumerSecret = ConsumerSecret, AccessToken = AccessToken, AccessTokenSecret = AccessTokenSecret }; var response = _twitterAdapter.UpdateStatus(tokens, status); message = response.ErrorMessage; return response.Result == RequestResult.Success; } } }