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 )
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)