Mercurial > pumpbridge
comparison src/twitter.coffee @ 22:b90e6df48d2d
eachLimit instead of each
author | Mathias Gebbe <mgebbe@intevation.de> |
---|---|
date | Mon, 16 Jun 2014 17:31:05 +0200 |
parents | a52b5b244e51 |
children | 8c56fdbac0fb |
comparison
equal
deleted
inserted
replaced
21:dbe2232af20f | 22:b90e6df48d2d |
---|---|
26 Usermap = require("./usermap") | 26 Usermap = require("./usermap") |
27 Pump = require("./pumpio") | 27 Pump = require("./pumpio") |
28 FromESN = require("./fromESN") | 28 FromESN = require("./fromESN") |
29 ToESN = require("./toESN") | 29 ToESN = require("./toESN") |
30 Sync = require("./sync") | 30 Sync = require("./sync") |
31 util = require("util") | |
32 twitter = require("twitter") | |
31 | 33 |
32 module.exports = (config) -> | 34 module.exports = (config) -> |
33 bridgeid = config.bridgeid | 35 bridgeid = config.bridgeid |
34 client_id = config.twclient_id | 36 client_id = config.twclient_id |
35 client_secret = config.twclient_secret | 37 client_secret = config.twclient_secret |
63 separator = "&" | 65 separator = "&" |
64 else | 66 else |
65 separator = "?" | 67 separator = "?" |
66 authorization_endpoint + separator + "oauth_token=" + rt.token | 68 authorization_endpoint + separator + "oauth_token=" + rt.token |
67 | 69 |
70 return | |
71 | |
68 getAccessToken: (site, rt, verifier, callback) -> | 72 getAccessToken: (site, rt, verifier, callback) -> |
69 oa = Twitter.getOAuth(site) | 73 oa = Twitter.getOAuth(site) |
70 oa.getOAuthAccessToken rt.token, rt.secret, verifier, callback | 74 oa.getOAuthAccessToken rt.token, rt.secret, verifier, callback |
71 return | 75 return |
72 | 76 |
87 callback e, null | 91 callback e, null |
88 return | 92 return |
89 | 93 |
90 return | 94 return |
91 | 95 |
92 sync: (user) -> | 96 syncFromESN: (user) -> |
93 me = user.user_pumpio | 97 me = user.user_pumpio |
94 id = user.user_ESN.substr(0,user.user_ESN.indexOf('@')) | 98 id = user.user_ESN.substr(0,user.user_ESN.indexOf('@')) |
95 token = user.oauth_token | 99 token = user.oauth_token |
96 secret = user.extra_token | 100 secret = user.extra_token |
97 util = require("util") | |
98 twitter = require("twitter") | |
99 twit = new twitter( | 101 twit = new twitter( |
100 consumer_key: client_id | 102 consumer_key: client_id |
101 consumer_secret: client_secret | 103 consumer_secret: client_secret |
102 access_token_key: token | 104 access_token_key: token |
103 access_token_secret: secret | 105 access_token_secret: secret |
107 async.waterfall [ | 109 async.waterfall [ |
108 (callback) -> | 110 (callback) -> |
109 Usermap.search {id: me + '_to_' + me}, callback | 111 Usermap.search {id: me + '_to_' + me}, callback |
110 (user, callback) -> | 112 (user, callback) -> |
111 if (user[0]?) | 113 if (user[0]?) |
114 console.log "get feed from" + me | |
112 Pump.getUserFeed(user[0],callback) | 115 Pump.getUserFeed(user[0],callback) |
113 else | 116 else |
114 return | 117 return |
115 (feed, callback) -> | 118 (feed, callback) -> |
116 return if not feed? | 119 return if not feed? |
117 ti = new Date().getTime() - interval | 120 ti = new Date().getTime() - interval |
118 async.eachSeries feed.items, ((post, callback) -> | 121 async.eachLimit feed.items, 10, ((post, callback) -> |
119 # do for each post | 122 # do for each post |
120 ts = Date.parse(post.updated) | 123 ts = Date.parse(post.updated) |
121 if (ts >= ti and post.verb is "post" or post.verb is "share") and (post.object.objectType is "note" or post.object.objectType is "image") and (Pump.isPublicActivity(post)) and (typeof post.object.deleted is "undefined") | 124 if (ts >= ti and post.verb is "post" or post.verb is "share") and (post.object.objectType is "note" or post.object.objectType is "image") and (Pump.isPublicActivity(post)) and (typeof post.object.deleted is "undefined") |
122 ToESN.search {uid: post.object.id + "@twitter"}, (err, result) -> | 125 ToESN.search {uid: post.object.id + "@twitter"}, (err, result) -> |
123 if result.length is 0 | 126 if result.length is 0 |
152 return | 155 return |
153 callback null, 'done' | 156 callback null, 'done' |
154 ), (err) -> | 157 ), (err) -> |
155 callback null, 'done' | 158 callback null, 'done' |
156 ],(err, result) -> | 159 ],(err, result) -> |
157 | 160 console.log "done ToESN twitter user" + me |
161 return | |
162 return | |
163 | |
164 syncToESN: (user) -> | |
165 me = user.user_pumpio | |
166 id = user.user_ESN.substr(0,user.user_ESN.indexOf('@')) | |
167 token = user.oauth_token | |
168 secret = user.extra_token | |
169 twit = new twitter( | |
170 consumer_key: client_id | |
171 consumer_secret: client_secret | |
172 access_token_key: token | |
173 access_token_secret: secret | |
174 ) | |
158 ###################################### | 175 ###################################### |
159 # get tweets and post them to pump.io# | 176 # get tweets and post them to pump.io# |
160 ###################################### | 177 ###################################### |
161 twit.verifyCredentials((data) -> | 178 twit.verifyCredentials((data) -> |
162 #console.log util.inspect(data) | 179 #console.log util.inspect(data) |
180 console.log "get twitter HomeTimeline " + me | |
163 return | 181 return |
164 ).getHomeTimeline {include_rts: true, count: 20 }, (data) -> | 182 ).getHomeTimeline {include_rts: true, count: 20 }, (data) -> |
165 #console.log util.inspect(data) | |
166 ti = (new Date().getTime() - interval) | 183 ti = (new Date().getTime() - interval) |
167 async.each data, ((tweet,cb) -> | 184 return if not data? or data.length is 0 |
185 async.eachLimit data, 10, ((tweet, cb) -> | |
168 async.waterfall [ | 186 async.waterfall [ |
169 (callback) -> | 187 (callback) -> |
170 FromESN.search {uid: tweet.id + "@twitter_to_" + me, recipientUser: me}, callback | 188 FromESN.search {uid: tweet.id + "@twitter_to_" + me}, callback |
171 (result, callback) -> | 189 (result, callback) -> |
172 return if result.length isnt 0 or tweet.user.id_str is id | 190 return if result.length isnt 0 or tweet.user.id_str is id |
173 twitterdate = new Date(Date.parse(tweet.created_at.replace(/( +)/, " UTC$1"))) | 191 twitterdate = new Date(Date.parse(tweet.created_at.replace(/( +)/, " UTC$1"))) |
174 ts = Date.parse(twitterdate) | 192 ts = Date.parse(twitterdate) |
175 if (ts >= ti) | 193 if (ts >= ti) |
176 Sync.postParser tweet, null, 'twitter', callback | 194 Sync.postParser tweet, null, 'twitter', callback |
177 return | 195 else |
196 return | |
178 (parsed, callback) -> | 197 (parsed, callback) -> |
179 Pump.postUser bridgeid, me, parsed, callback | 198 Pump.postUser bridgeid, me, parsed, callback |
180 (pumppost, callback) -> | 199 (pumppost, callback) -> |
181 pumppost = JSON.parse(pumppost) | 200 pumppost = JSON.parse(pumppost) |
182 FromESN.create | 201 FromESN.create |
187 recipientUser: me | 206 recipientUser: me |
188 created: Date.now() | 207 created: Date.now() |
189 , callback | 208 , callback |
190 ], (err, result) -> | 209 ], (err, result) -> |
191 cb() | 210 cb() |
211 return | |
192 ), (err) -> | 212 ), (err) -> |
213 if (err) | |
214 console.log "Error: " + err | |
215 else | |
216 console.log "done ToESN twitter user" + me | |
193 return | 217 return |
194 return | 218 return |
195 | |
196 parseTwitterDate : (text) -> | |
197 | 219 |
198 getOAuth: (site) -> | 220 getOAuth: (site) -> |
199 new OAuth(request_token_endpoint, access_token_endpoint, client_id, client_secret, "1.0", site.url("/authorized-for-twitter"), "HMAC-SHA1", null, # nonce size; use default | 221 new OAuth(request_token_endpoint, access_token_endpoint, client_id, client_secret, "1.0", site.url("/authorized-for-twitter"), "HMAC-SHA1", null, # nonce size; use default |
200 "User-Agent": site.userAgent() | 222 "User-Agent": site.userAgent() |
201 ) | 223 ) |