Mercurial > altnet-hispano
view Agendas/trunk/src/Agendas.Twitter/TwitterPublicador.cs @ 120:c3573defd18f
Agregado de Fecha, Usuario y Successful en TrackLog
Modificacion de publicador de blog para usar TrackLog
Agregado de TrackLog en el test de crud de eventos
Fix en publicador de twitter para que no twitee si ya se encuentra en TrackLog pero con Successful en true
author | Jorge@Jorge-PC |
---|---|
date | Fri, 24 Jun 2011 21:18:21 -0300 |
parents | 90ce239cfa6d |
children | 17531db40d4e |
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 && l.Successful)) continue; var twitt = BuildTwitt(track); if (!string.IsNullOrWhiteSpace(twitt)) { string message; bool success = Publicar(twitt, out message); track.LogAdd(new TrackLog(TrackLogPropietario.Twitter, message, track.Usuario, success)); } } } 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; } } }