annotate Agendas/trunk/src/Agendas.Twitter/TwitterPublicador.cs @ 122:17531db40d4e

Refactoring de la generación de mensajes en twitter
author nelopauselli
date Tue, 28 Jun 2011 19:25:22 -0300
parents c3573defd18f
children 734d3f0853bf
rev   line source
110
a456eb519e23 Lanzando twitts desde el sitio con la cuenta de AltNetHispanoDESA
Nelo@Kenia.neluz.int
parents: 108
diff changeset
1 using System.Collections.Generic;
108
786a90e26c9b Los tests ya twittean con la cuenta de altnet-hispano-desa
Nelo@Kenia.neluz.int
parents: 87
diff changeset
2 using System.Configuration;
111
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
3 using System.Linq;
0
3f7dbb633b71 Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff changeset
4 using AltNetHispano.Agendas.Domain;
122
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
5 using AltNetHispano.Agendas.Twitter.Writers;
108
786a90e26c9b Los tests ya twittean con la cuenta de altnet-hispano-desa
Nelo@Kenia.neluz.int
parents: 87
diff changeset
6 using Twitterizer;
0
3f7dbb633b71 Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff changeset
7
34
475be11edf56 Ajuste en los nombre de los assemblies y namespaces
nelo@MTEySS.neluz.int
parents: 3
diff changeset
8 namespace AltNetHispano.Agendas.Twitter
0
3f7dbb633b71 Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff changeset
9 {
87
26d0513a8410 A los publicadores les llega la lista de tracks producidos en la acción realizada
nelopauselli
parents: 34
diff changeset
10 public class TwitterPublicador : IPublicador
0
3f7dbb633b71 Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff changeset
11 {
122
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
12 private readonly IDictionary<Accion, ITwitterWriter> _writers;
111
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
13 private readonly ITwitterAdapter _twitterAdapter;
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
14
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
15 public TwitterPublicador()
122
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
16 : this(new TwitterAdapter())
111
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
17 {
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
18 }
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
19
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
20 public TwitterPublicador(ITwitterAdapter twitterAdapter)
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
21 {
122
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
22 _writers = new Dictionary<Accion, ITwitterWriter>
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
23 {
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
24 {Accion.Proponer, new ProponerTwitterWriter()},
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
25 {Accion.Agendar, new AgendarTwitterWriter()},
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
26 {Accion.Confirmar, new ConfirmarTwitterWriter()},
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
27 {Accion.Publicar, new PublicarTwitterWriter()}
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
28 };
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
29
111
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
30 _twitterAdapter = twitterAdapter;
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
31 }
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
32
122
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
33 private const int LIMITE_MENSAJE = 140;
110
a456eb519e23 Lanzando twitts desde el sitio con la cuenta de AltNetHispanoDESA
Nelo@Kenia.neluz.int
parents: 108
diff changeset
34
122
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
35 private static string ConsumerKey
108
786a90e26c9b Los tests ya twittean con la cuenta de altnet-hispano-desa
Nelo@Kenia.neluz.int
parents: 87
diff changeset
36 {
110
a456eb519e23 Lanzando twitts desde el sitio con la cuenta de AltNetHispanoDESA
Nelo@Kenia.neluz.int
parents: 108
diff changeset
37 get { return ConfigurationManager.AppSettings["consumerKeyAppTwitt"]; }
108
786a90e26c9b Los tests ya twittean con la cuenta de altnet-hispano-desa
Nelo@Kenia.neluz.int
parents: 87
diff changeset
38 }
786a90e26c9b Los tests ya twittean con la cuenta de altnet-hispano-desa
Nelo@Kenia.neluz.int
parents: 87
diff changeset
39
122
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
40 private static string ConsumerSecret
108
786a90e26c9b Los tests ya twittean con la cuenta de altnet-hispano-desa
Nelo@Kenia.neluz.int
parents: 87
diff changeset
41 {
110
a456eb519e23 Lanzando twitts desde el sitio con la cuenta de AltNetHispanoDESA
Nelo@Kenia.neluz.int
parents: 108
diff changeset
42 get { return ConfigurationManager.AppSettings["consumerSecretAppTwitt"]; }
108
786a90e26c9b Los tests ya twittean con la cuenta de altnet-hispano-desa
Nelo@Kenia.neluz.int
parents: 87
diff changeset
43 }
786a90e26c9b Los tests ya twittean con la cuenta de altnet-hispano-desa
Nelo@Kenia.neluz.int
parents: 87
diff changeset
44
786a90e26c9b Los tests ya twittean con la cuenta de altnet-hispano-desa
Nelo@Kenia.neluz.int
parents: 87
diff changeset
45
122
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
46 private static string AccessToken
108
786a90e26c9b Los tests ya twittean con la cuenta de altnet-hispano-desa
Nelo@Kenia.neluz.int
parents: 87
diff changeset
47 {
110
a456eb519e23 Lanzando twitts desde el sitio con la cuenta de AltNetHispanoDESA
Nelo@Kenia.neluz.int
parents: 108
diff changeset
48 get { return ConfigurationManager.AppSettings["accessTokenAppTwitt"]; }
108
786a90e26c9b Los tests ya twittean con la cuenta de altnet-hispano-desa
Nelo@Kenia.neluz.int
parents: 87
diff changeset
49 }
786a90e26c9b Los tests ya twittean con la cuenta de altnet-hispano-desa
Nelo@Kenia.neluz.int
parents: 87
diff changeset
50
786a90e26c9b Los tests ya twittean con la cuenta de altnet-hispano-desa
Nelo@Kenia.neluz.int
parents: 87
diff changeset
51
122
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
52 private static string AccessTokenSecret
108
786a90e26c9b Los tests ya twittean con la cuenta de altnet-hispano-desa
Nelo@Kenia.neluz.int
parents: 87
diff changeset
53 {
110
a456eb519e23 Lanzando twitts desde el sitio con la cuenta de AltNetHispanoDESA
Nelo@Kenia.neluz.int
parents: 108
diff changeset
54 get { return ConfigurationManager.AppSettings["accessTokenSecretAppTwitt"]; }
108
786a90e26c9b Los tests ya twittean con la cuenta de altnet-hispano-desa
Nelo@Kenia.neluz.int
parents: 87
diff changeset
55 }
786a90e26c9b Los tests ya twittean con la cuenta de altnet-hispano-desa
Nelo@Kenia.neluz.int
parents: 87
diff changeset
56
87
26d0513a8410 A los publicadores les llega la lista de tracks producidos en la acción realizada
nelopauselli
parents: 34
diff changeset
57 public void Publicar(IEnumerable<Track> tracks)
0
3f7dbb633b71 Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff changeset
58 {
110
a456eb519e23 Lanzando twitts desde el sitio con la cuenta de AltNetHispanoDESA
Nelo@Kenia.neluz.int
parents: 108
diff changeset
59 foreach (var track in tracks)
a456eb519e23 Lanzando twitts desde el sitio con la cuenta de AltNetHispanoDESA
Nelo@Kenia.neluz.int
parents: 108
diff changeset
60 {
111
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
61 //Si ya hicimos el twitt de este track, no volvemos a hacerlo
120
c3573defd18f Agregado de Fecha, Usuario y Successful en TrackLog
Jorge@Jorge-PC
parents: 111
diff changeset
62 if (track.Logs.Any(l => l.Propietario == TrackLogPropietario.Twitter && l.Successful)) continue;
111
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
63
110
a456eb519e23 Lanzando twitts desde el sitio con la cuenta de AltNetHispanoDESA
Nelo@Kenia.neluz.int
parents: 108
diff changeset
64 var twitt = BuildTwitt(track);
a456eb519e23 Lanzando twitts desde el sitio con la cuenta de AltNetHispanoDESA
Nelo@Kenia.neluz.int
parents: 108
diff changeset
65 if (!string.IsNullOrWhiteSpace(twitt))
111
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
66 {
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
67 string message;
120
c3573defd18f Agregado de Fecha, Usuario y Successful en TrackLog
Jorge@Jorge-PC
parents: 111
diff changeset
68 bool success = Publicar(twitt, out message);
c3573defd18f Agregado de Fecha, Usuario y Successful en TrackLog
Jorge@Jorge-PC
parents: 111
diff changeset
69 track.LogAdd(new TrackLog(TrackLogPropietario.Twitter, message, track.Usuario, success));
111
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
70 }
110
a456eb519e23 Lanzando twitts desde el sitio con la cuenta de AltNetHispanoDESA
Nelo@Kenia.neluz.int
parents: 108
diff changeset
71 }
0
3f7dbb633b71 Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff changeset
72 }
108
786a90e26c9b Los tests ya twittean con la cuenta de altnet-hispano-desa
Nelo@Kenia.neluz.int
parents: 87
diff changeset
73
122
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
74 private string BuildTwitt(Track track)
110
a456eb519e23 Lanzando twitts desde el sitio con la cuenta de AltNetHispanoDESA
Nelo@Kenia.neluz.int
parents: 108
diff changeset
75 {
122
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
76 ITwitterWriter writer;
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
77 if (!_writers.TryGetValue(track.Accion, out writer))
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
78 return string.Empty;
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
79
17531db40d4e Refactoring de la generación de mensajes en twitter
nelopauselli
parents: 120
diff changeset
80 string body = writer.Write(track);
110
a456eb519e23 Lanzando twitts desde el sitio con la cuenta de AltNetHispanoDESA
Nelo@Kenia.neluz.int
parents: 108
diff changeset
81
a456eb519e23 Lanzando twitts desde el sitio con la cuenta de AltNetHispanoDESA
Nelo@Kenia.neluz.int
parents: 108
diff changeset
82 return body.Length > LIMITE_MENSAJE ? body.Substring(0, LIMITE_MENSAJE - 1) : body;
a456eb519e23 Lanzando twitts desde el sitio con la cuenta de AltNetHispanoDESA
Nelo@Kenia.neluz.int
parents: 108
diff changeset
83 }
a456eb519e23 Lanzando twitts desde el sitio con la cuenta de AltNetHispanoDESA
Nelo@Kenia.neluz.int
parents: 108
diff changeset
84
a456eb519e23 Lanzando twitts desde el sitio con la cuenta de AltNetHispanoDESA
Nelo@Kenia.neluz.int
parents: 108
diff changeset
85 public bool Publicar(string status, out string message)
108
786a90e26c9b Los tests ya twittean con la cuenta de altnet-hispano-desa
Nelo@Kenia.neluz.int
parents: 87
diff changeset
86 {
786a90e26c9b Los tests ya twittean con la cuenta de altnet-hispano-desa
Nelo@Kenia.neluz.int
parents: 87
diff changeset
87 var tokens = new OAuthTokens
110
a456eb519e23 Lanzando twitts desde el sitio con la cuenta de AltNetHispanoDESA
Nelo@Kenia.neluz.int
parents: 108
diff changeset
88 {
a456eb519e23 Lanzando twitts desde el sitio con la cuenta de AltNetHispanoDESA
Nelo@Kenia.neluz.int
parents: 108
diff changeset
89 ConsumerKey = ConsumerKey,
a456eb519e23 Lanzando twitts desde el sitio con la cuenta de AltNetHispanoDESA
Nelo@Kenia.neluz.int
parents: 108
diff changeset
90 ConsumerSecret = ConsumerSecret,
a456eb519e23 Lanzando twitts desde el sitio con la cuenta de AltNetHispanoDESA
Nelo@Kenia.neluz.int
parents: 108
diff changeset
91 AccessToken = AccessToken,
a456eb519e23 Lanzando twitts desde el sitio con la cuenta de AltNetHispanoDESA
Nelo@Kenia.neluz.int
parents: 108
diff changeset
92 AccessTokenSecret = AccessTokenSecret
a456eb519e23 Lanzando twitts desde el sitio con la cuenta de AltNetHispanoDESA
Nelo@Kenia.neluz.int
parents: 108
diff changeset
93 };
108
786a90e26c9b Los tests ya twittean con la cuenta de altnet-hispano-desa
Nelo@Kenia.neluz.int
parents: 87
diff changeset
94
111
90ce239cfa6d Tests sobre el publicador de twitter, cada track se pulica solo una vez
Nelo@Kenia.neluz.int
parents: 110
diff changeset
95 var response = _twitterAdapter.UpdateStatus(tokens, status);
108
786a90e26c9b Los tests ya twittean con la cuenta de altnet-hispano-desa
Nelo@Kenia.neluz.int
parents: 87
diff changeset
96
786a90e26c9b Los tests ya twittean con la cuenta de altnet-hispano-desa
Nelo@Kenia.neluz.int
parents: 87
diff changeset
97 message = response.ErrorMessage;
786a90e26c9b Los tests ya twittean con la cuenta de altnet-hispano-desa
Nelo@Kenia.neluz.int
parents: 87
diff changeset
98 return response.Result == RequestResult.Success;
786a90e26c9b Los tests ya twittean con la cuenta de altnet-hispano-desa
Nelo@Kenia.neluz.int
parents: 87
diff changeset
99 }
0
3f7dbb633b71 Test sobre la publicación de Eventos al registrarlos en la Agenda
nelopauselli
parents:
diff changeset
100 }
3
5f007e266509 code cleanup
nelopauselli
parents: 1
diff changeset
101 }