comparison src/twitter.coffee @ 30:3e3fa35e3ce2

twitter sync likes, recommend mongodb configure pump2twitter, twitter2pump in webui
author Mathias Gebbe <mgebbe@intevation.de>
date Thu, 28 Aug 2014 18:40:39 +0200
parents faeb3b96bdeb
children 8238d312e281
comparison
equal deleted inserted replaced
29:34cfa565f565 30:3e3fa35e3ce2
115 else 115 else
116 return 116 return
117 (feed, callback) -> 117 (feed, callback) ->
118 return if not feed? 118 return if not feed?
119 ti = new Date().getTime() - interval 119 ti = new Date().getTime() - interval
120 async.eachLimit feed.items, 5, ((post, callback) -> 120 async.eachLimit feed.items, 1, ((post, callback) ->
121 # do for each post 121 # do for each post
122 ts = Date.parse(post.updated) 122 ts = Date.parse(post.updated)
123 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") 123 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 ToESN.search {uid: post.object.id + "@twitter"}, (err, result) -> 124 ToESN.search {uid: post.object.id + "@twitter"}, (err, result) ->
125 if result.length is 0 125 if result.length is 0
183 ).getHomeTimeline {include_rts: true, count: 15 }, (data) -> 183 ).getHomeTimeline {include_rts: true, count: 15 }, (data) ->
184 console.log "got twitter HomeTimeline " + me 184 console.log "got twitter HomeTimeline " + me
185 return if not data? or data.length is 0 185 return if not data? or data.length is 0
186 console.log "data isnt empty for " + me 186 console.log "data isnt empty for " + me
187 ti = (new Date().getTime() - interval) 187 ti = (new Date().getTime() - interval)
188 async.eachLimit data, 1, ((tweet, cb) -> 188 async.eachLimit data, 3, ((tweet, cb) ->
189 async.waterfall [ 189 async.waterfall [
190 (callback) -> 190 (callback) ->
191 FromESN.search {uid: tweet.id + "@twitter_to_" + me}, callback 191 FromESN.search {uid: tweet.id_str + "@twitter_to_" + me}, callback
192 (result, callback) -> 192 (result, callback) ->
193 return if result.length isnt 0 or tweet.user.id_str is id 193 return if result.length isnt 0 or tweet.user.id_str is id
194 console.log "new tweet found" 194 console.log "tweet found"
195 twitterdate = new Date(Date.parse(tweet.created_at.replace(/( +)/, " UTC$1"))) 195 twitterdate = new Date(Date.parse(tweet.created_at.replace(/( +)/, " UTC$1")))
196 ts = Date.parse(twitterdate) 196 ts = Date.parse(twitterdate)
197 if (ts >= ti) 197 if (ts >= ti)
198 Sync.postParser tweet, null, 'twitter', callback 198 Sync.postParser tweet, null, 'twitter', callback
199 else 199 else
206 pumppost = JSON.parse(pumppost) 206 pumppost = JSON.parse(pumppost)
207 catch err 207 catch err
208 console.log "parse err " + err 208 console.log "parse err " + err
209 return 209 return
210 FromESN.create 210 FromESN.create
211 postid: tweet.id + "@twitter" 211 postid: tweet.id_str + "@twitter"
212 sourceUser: tweet.user.id 212 sourceUser: tweet.user.id
213 sourcePost: 'https://twitter.com/'+tweet.user.name+"/status/" + tweet.id 213 sourcePost: 'https://twitter.com/'+tweet.user.screen_name+"/status/" + tweet.id_str
214 pumpPost: pumppost.object.id 214 pumpPost: pumppost.object.id
215 recipientUser: me 215 recipientUser: me
216 created: Date.now() 216 created: Date.now()
217 , callback 217 , callback
218 ], (err, result) -> 218 ], (err, result) ->
219 console.log "post a tweet to user " + me 219 console.log "post a tweet to user " + me
220 cb() 220 cb
221 ), (err) -> 221 ), (err) ->
222 if (err) 222 if (err)
223 console.log "Error: " + err 223 console.log "Error: " + err
224 else 224 else
225 console.log "done FromESN twitter user " + me 225 console.log "done FromESN twitter user " + me
226 return 226 return
227 227
228 postLike: (user) ->
229 i = 0
230 me = user.user_pumpio
231 id = user.user_ESN.substr(0,user.user_ESN.indexOf('@'))
232 token = user.oauth_token
233 secret = user.extra_token
234 twit = new twitter(
235 consumer_key: client_id
236 consumer_secret: client_secret
237 access_token_key: token
238 access_token_secret: secret
239 )
240 console.log "try 2 find twitter likes for " + me
241 async.waterfall [
242 (callback) ->
243 Usermap.search {id: me + '_to_' + me}, callback
244 (pumpuser, callback) ->
245 Pump.getLikes(pumpuser[0], callback)
246 (likearray, callback) ->
247 return if not (likearray?) or likearray.length is 0
248 likes = JSON.parse(likearray)
249 return if not (likes?) or likes.items.length is 0
250 async.each likes.items,((note, cb) ->
251 async.waterfall [
252 (callback) ->
253 FromESN.search {recipientUser: me, pumpPost: note.id}, callback
254 (fromesn, callback) ->
255 if (fromesn?) and fromesn.length isnt 0 and fromesn[0].sourcePost.indexOf('twitter.com') isnt -1
256 #console.log fromesn[0]
257 obj = fromesn[0].postid.substr(0,fromesn[0].postid.indexOf('@'))
258 twit.post "/favorites/create.json",
259 id: obj
260 , (data) ->
261 console.log "Twitter " + obj + " liked"
262 ], (err, result) ->
263 ), (err) ->
264 ], (err, result) ->
265 return
266
228 getOAuth: (site) -> 267 getOAuth: (site) ->
229 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 268 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
230 "User-Agent": site.userAgent() 269 "User-Agent": site.userAgent()
231 ) 270 )
232 271
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)