/
twitter.coffee
61 lines (49 loc) · 1.97 KB
/
twitter.coffee
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
twitter = require('ntwitter')
fs = require('fs')
util = require('./util')
store = require('./store')
winston = require('winston')
TOKEN_FILE = './twauthtoken'
CONSUMER_FILE = './twconsumerkey'
class Collector
constructor: (@store) ->
update: (since, limit) ->
winston.debug 'Updating Twitter items', { since: since, limit: limit }
token_file = getFileContents(TOKEN_FILE)
consumer_file = getFileContents(CONSUMER_FILE)
if token_file and consumer_file
parts = token_file.split("\n")
token = parts[0]
token_secret = parts[1]
parts = consumer_file.split("\n")
consumer_key = parts[0]
consumer_secret = parts[1]
twit = new twitter({
consumer_key: consumer_key,
consumer_secret: consumer_secret,
access_token_key: token,
access_token_secret: token_secret
})
twit.get '/statuses/home_timeline.json', {}, (err, data) =>
items = []
if err
# TODO error handling
throw err
for item in data
items.push({
type: null,
created: new Date(item.created_at).getTime(),
name: item.user.name,
message: item.text,
source: this._createTwitterStatusLink(item.user.screen_name, item.id_str)
})
winston.debug 'Storing ' + items.length + ' Twitter items'
winston.verbose 'Twitter items', items
@store.addItems(items)
return
_createTwitterStatusLink: (name, id) ->
return 'http://twitter.com/#!/' + name + '/status/' + id
exports.Collector = Collector
exports.getFileContents = getFileContents = (file_name) ->
if util.fileExists(file_name)
return fs.readFileSync(file_name, 'utf8')