tweetcast/server-nodejs/tweetcast.js
author Raphael Velt <raph.velt@gmail.com>
Tue, 14 Feb 2012 14:17:43 +0100
changeset 506 f7fd2458fc5c
parent 410 bf5cf5a9e737
permissions -rw-r--r--
Added museo 14.02.12 and several corrections
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
360
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
     1
READ_OLD_TWEETS = true;
380
b3f66379fed7 Ameliorations visu live des tweets
Raphael Velt <raph.velt@gmail.com>
parents: 374
diff changeset
     2
RECORD_NEW_TWEETS = true;
360
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
     3
404
89968844eb7d Tweetcast: heavy refactoring !
Raphael Velt <raph.velt@gmail.com>
parents: 380
diff changeset
     4
tweet_file = flagOption('-f', 'tweets.txt');
89968844eb7d Tweetcast: heavy refactoring !
Raphael Velt <raph.velt@gmail.com>
parents: 380
diff changeset
     5
app_port = flagOption('-p', 8000);
89968844eb7d Tweetcast: heavy refactoring !
Raphael Velt <raph.velt@gmail.com>
parents: 380
diff changeset
     6
tracking_keyword = flagOption('-t', null);
89968844eb7d Tweetcast: heavy refactoring !
Raphael Velt <raph.velt@gmail.com>
parents: 380
diff changeset
     7
user_pass = flagOption('-u', null);
360
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
     8
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
     9
if (!user_pass) {
404
89968844eb7d Tweetcast: heavy refactoring !
Raphael Velt <raph.velt@gmail.com>
parents: 380
diff changeset
    10
    console.log("You must provide user credentials on the command-line, e.g. node tweetcast.js -u user:pass")
360
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    11
    process.exit();
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    12
}
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    13
if (!tracking_keyword) {
404
89968844eb7d Tweetcast: heavy refactoring !
Raphael Velt <raph.velt@gmail.com>
parents: 380
diff changeset
    14
    console.log("You must provide keyword(s) on the command-line, e.g. node tweetcast.js -t Bieber")
360
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    15
    process.exit();
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    16
}
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    17
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    18
console.log("Tracking keyword "+tracking_keyword);
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    19
404
89968844eb7d Tweetcast: heavy refactoring !
Raphael Velt <raph.velt@gmail.com>
parents: 380
diff changeset
    20
var fs = require('fs'),
89968844eb7d Tweetcast: heavy refactoring !
Raphael Velt <raph.velt@gmail.com>
parents: 380
diff changeset
    21
    http = require('http'),
360
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    22
    https = require('https'),
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    23
    socketio = require('socket.io'),
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    24
    app = http.createServer(httpHandler),
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    25
    io = socketio.listen(app)
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    26
    tweets = [],
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    27
    tweet_ids = [],
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    28
    keys_to_delete = [
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    29
        'in_reply_to_screen_name',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    30
        'in_reply_to_user_id',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    31
        'retweeted',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    32
        'place',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    33
        'geo',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    34
        'source',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    35
        'contributors',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    36
        'coordinates',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    37
        'retweet_count',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    38
        'favorited',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    39
        'truncated',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    40
        'possibly_sensitive'
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    41
    ],
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    42
    user_keys_to_delete = [
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    43
        'default_profile_image',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    44
        'show_all_inline_media',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    45
        'contributors_enabled',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    46
        'profile_sidebar_fill_color',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    47
        'created_at',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    48
        'lang',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    49
        'time_zone',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    50
        'profile_sidebar_border_color',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    51
        'follow_request_sent',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    52
        'profile_background_image_url',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    53
        'profile_background_image_url_https',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    54
        'followers_count',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    55
        'description',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    56
        'url',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    57
        'geo_enabled',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    58
        'profile_use_background_image',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    59
        'default_profile',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    60
        'following',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    61
        'profile_text_color',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    62
        'is_translator',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    63
        'favourites_count',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    64
        'listed_count',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    65
        'friends_count',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    66
        'profile_link_color',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    67
        'protected',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    68
        'location',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    69
        'notifications',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    70
        'profile_image_url_https',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    71
        'statuses_count',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    72
        'verified',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    73
        'profile_background_color',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    74
        'profile_background_tile',
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    75
        'utc_offset'
374
0c4acfa2aea1 Minor changes
Raphael Velt <raph.velt@gmail.com>
parents: 360
diff changeset
    76
    ],
0c4acfa2aea1 Minor changes
Raphael Velt <raph.velt@gmail.com>
parents: 360
diff changeset
    77
    content_types = {
380
b3f66379fed7 Ameliorations visu live des tweets
Raphael Velt <raph.velt@gmail.com>
parents: 374
diff changeset
    78
        css : "text/css; charset=utf-8",
b3f66379fed7 Ameliorations visu live des tweets
Raphael Velt <raph.velt@gmail.com>
parents: 374
diff changeset
    79
        html : "text/html; charset=utf-8",
b3f66379fed7 Ameliorations visu live des tweets
Raphael Velt <raph.velt@gmail.com>
parents: 374
diff changeset
    80
        js : "text/javascript; charset=utf-8",
374
0c4acfa2aea1 Minor changes
Raphael Velt <raph.velt@gmail.com>
parents: 360
diff changeset
    81
        png : "image/png"
0c4acfa2aea1 Minor changes
Raphael Velt <raph.velt@gmail.com>
parents: 360
diff changeset
    82
    };
360
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    83
404
89968844eb7d Tweetcast: heavy refactoring !
Raphael Velt <raph.velt@gmail.com>
parents: 380
diff changeset
    84
function wrapContentType(ext) {
89968844eb7d Tweetcast: heavy refactoring !
Raphael Velt <raph.velt@gmail.com>
parents: 380
diff changeset
    85
    return {
89968844eb7d Tweetcast: heavy refactoring !
Raphael Velt <raph.velt@gmail.com>
parents: 380
diff changeset
    86
        "Content-Type" : ( content_types[ext] ? content_types[ext] : 'text/plain' )
89968844eb7d Tweetcast: heavy refactoring !
Raphael Velt <raph.velt@gmail.com>
parents: 380
diff changeset
    87
    }
89968844eb7d Tweetcast: heavy refactoring !
Raphael Velt <raph.velt@gmail.com>
parents: 380
diff changeset
    88
}
89968844eb7d Tweetcast: heavy refactoring !
Raphael Velt <raph.velt@gmail.com>
parents: 380
diff changeset
    89
360
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    90
function httpHandler(req, res) {
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    91
    console.log("HTTP Request for URL "+req.url);
380
b3f66379fed7 Ameliorations visu live des tweets
Raphael Velt <raph.velt@gmail.com>
parents: 374
diff changeset
    92
    var url = req.url.split('?')[0];
404
89968844eb7d Tweetcast: heavy refactoring !
Raphael Velt <raph.velt@gmail.com>
parents: 380
diff changeset
    93
    url = __dirname + "/client" + url + ( url[url.length - 1] == "/" ? "index.html" : "" );
380
b3f66379fed7 Ameliorations visu live des tweets
Raphael Velt <raph.velt@gmail.com>
parents: 374
diff changeset
    94
    var ext = url.split('.').slice(-1)[0].toLowerCase();
360
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    95
    fs.readFile( url, function(err, data) {
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    96
        if (err) {
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    97
            console.log("Error 404");
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    98
            res.writeHead(404);
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
    99
            return res.end('File not found');
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   100
        }
404
89968844eb7d Tweetcast: heavy refactoring !
Raphael Velt <raph.velt@gmail.com>
parents: 380
diff changeset
   101
        res.writeHead(200, wrapContentType(ext));
360
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   102
        res.end(data);
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   103
    });
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   104
}
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   105
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   106
function flagOption(flag, defaultValue) {
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   107
    var flagPos = process.argv.indexOf(flag);
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   108
    return ( flagPos != -1 && flagPos < process.argv.length - 1) ? process.argv[flagPos + 1] : defaultValue;
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   109
}
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   110
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   111
function addToList(tweet) {
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   112
    if (tweet_ids.indexOf(tweet.id) != -1) {
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   113
        console.log("Error: Tweet already in list");
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   114
        return false;
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   115
    }
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   116
    tweets.push(tweet);
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   117
    tweet_ids.push(tweet.id);
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   118
    return true;
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   119
}
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   120
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   121
function textids(object) {
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   122
    for (var key in object) {
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   123
        // Workaround for Unicode bug in socket.io.
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   124
        
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   125
        if (typeof object[key] == "string") {
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   126
            var tmp = '';
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   127
            for (var i = 0; i < object[key].length; i++) {
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   128
                tmp += ( object[key].charCodeAt(i) < 128 ? object[key].charAt(i) : "&#" + object[key].charCodeAt(i) + ";" );
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   129
            }
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   130
            object[key] = tmp;
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   131
        }
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   132
        if (key.substr(-2) == 'id') {
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   133
            object[key] = object[key + '_str'];
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   134
            delete object[key + '_str'];
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   135
        }
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   136
    }
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   137
}
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   138
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   139
function readTweetsFromFile(file_name) {
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   140
    console.log("Trying to read tweets from " + file_name);
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   141
    try {
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   142
        var oldtweets = fs.readFileSync(file_name, 'utf8').split('\n');
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   143
        var tweetscopied = 0;
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   144
        for (var i in oldtweets) {
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   145
            if (oldtweets[i].length > 0) {
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   146
                addToList(JSON.parse(oldtweets[i]));
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   147
                tweetscopied++;
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   148
            }
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   149
        }
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   150
        console.log(tweetscopied + " tweets copied");
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   151
    }
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   152
    catch (err) {
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   153
        console.log("Error opening "+file_name);
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   154
    }
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   155
}
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   156
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   157
function requestTweets() {
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   158
    console.log("Fetching tweets from https://stream.twitter.com/1/statuses/filter.json")
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   159
    var writestream = null;
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   160
    var req = https.request({
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   161
        host: "stream.twitter.com",
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   162
        path: "/1/statuses/filter.json",
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   163
        method: "POST",
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   164
        headers: {
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   165
            'Authorization': 'Basic ' + new Buffer( user_pass ).toString('base64'),
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   166
            'Content-Type': 'application/x-www-form-urlencoded'
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   167
        }
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   168
    }, function(res) {
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   169
        writestream = fs.createWriteStream( tweet_file, { flags: 'a+', encoding: 'utf-8' } );
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   170
        console.log('Response received, status : ' + res.statusCode);
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   171
        res.setEncoding('utf8');
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   172
        res.on('data', function(chunk) {
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   173
            var newdata = chunk.split('\r\n'),
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   174
                tweetpos = tweets.length;
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   175
            try {
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   176
                for (var i in newdata) {
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   177
                    if (newdata[i].length > 0) {
374
0c4acfa2aea1 Minor changes
Raphael Velt <raph.velt@gmail.com>
parents: 360
diff changeset
   178
                        var tweet = JSON.parse(newdata[i]);
360
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   179
                        textids(tweet);
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   180
                        for (var j in keys_to_delete) {
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   181
                            delete tweet[keys_to_delete[j]];
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   182
                        }
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   183
                        textids(tweet.user);
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   184
                        for (var j in user_keys_to_delete) {
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   185
                            delete tweet.user[user_keys_to_delete[j]];
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   186
                        }
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   187
                        if (tweet.retweeted_status) {
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   188
                            textids(tweet.retweeted_status);
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   189
                            for (var j in keys_to_delete) {
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   190
                                delete tweet.retweeted_status[keys_to_delete[j]];
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   191
                            }
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   192
                        }
380
b3f66379fed7 Ameliorations visu live des tweets
Raphael Velt <raph.velt@gmail.com>
parents: 374
diff changeset
   193
                    /*    tweet.date_value = Date.parse(tweet.created_at); */
360
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   194
                        if (addToList(tweet)) {
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   195
                            writestream.write(JSON.stringify(tweet)+'\n');
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   196
                        }
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   197
                    }
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   198
                }
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   199
                io.sockets.emit('update', {
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   200
                        "new_tweets" : tweets.slice(tweetpos)
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   201
                    });
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   202
                console.log("New tweets received. We now have", tweets.length, "tweets in memory");
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   203
            }
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   204
            catch(err) {
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   205
                console.log(err.message);
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   206
            }
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   207
        });
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   208
    });
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   209
    
374
0c4acfa2aea1 Minor changes
Raphael Velt <raph.velt@gmail.com>
parents: 360
diff changeset
   210
    req.write('track=' + encodeURIComponent( ( tracking_keyword ) ) );
360
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   211
    req.end();
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   212
}
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   213
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   214
app.listen(app_port);
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   215
console.log("Listening on port: "+app_port);
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   216
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   217
if (READ_OLD_TWEETS) {
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   218
    readTweetsFromFile(tweet_file);
380
b3f66379fed7 Ameliorations visu live des tweets
Raphael Velt <raph.velt@gmail.com>
parents: 374
diff changeset
   219
} else {
b3f66379fed7 Ameliorations visu live des tweets
Raphael Velt <raph.velt@gmail.com>
parents: 374
diff changeset
   220
    console.log("Reading old tweets disabled !");
360
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   221
}
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   222
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   223
if (RECORD_NEW_TWEETS) {
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   224
    requestTweets();
380
b3f66379fed7 Ameliorations visu live des tweets
Raphael Velt <raph.velt@gmail.com>
parents: 374
diff changeset
   225
} else {
b3f66379fed7 Ameliorations visu live des tweets
Raphael Velt <raph.velt@gmail.com>
parents: 374
diff changeset
   226
    console.log("Recording new tweets disabled !");
360
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   227
}
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   228
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   229
io.set('log level', 0);
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   230
io.sockets.on('connection', function(socket) {
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   231
    console.log("New connection from "+socket.handshake.address.address);
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   232
    socket.emit('initial_data', {
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   233
        "tweets" : tweets
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   234
    });
d49991fe4892 Version mieux adaptee aux volumes de tweets des conferences
Raphael Velt <raph.velt@gmail.com>
parents:
diff changeset
   235
});