client/js/tweetsource.js
author veltr
Fri, 24 Feb 2012 17:46:20 +0100
changeset 44 02971f8dcaa5
parent 43 d63529bd67ad
permissions -rw-r--r--
set onair time, podium improvements
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
3
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
     1
/* Author: Raphaƫl Velt, IRI
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
     2
 * 
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
     3
 * Licence: CeCILL-B - http://www.cecill.info/licences/Licence_CeCILL-B_V1-fr.html
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
     4
 * 
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
     5
 * */
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
     6
10
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
     7
function regexpFromText(_text) {
42
6cba3a02a1a1 Correction for hashtag keywords
veltr
parents: 39
diff changeset
     8
    return new RegExp('(' + _text.replace(/(\W)/gim,'\\$1') + ')','gim');
10
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
     9
}
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
    10
3
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    11
Btv_TweetArray = function() {
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    12
    this.tweets = [];
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    13
    this.idIndex = [];
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    14
}
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    15
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    16
Btv_TweetArray.prototype.push = function(_tweet) {
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    17
    this.tweets.push(_tweet);
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    18
    this.idIndex.push(_tweet.id_str);
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    19
}
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    20
10
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
    21
Btv_TweetArray.prototype.setOnAdd = function(_callback) {
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
    22
    this.onAdd = _callback;
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
    23
}
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
    24
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
    25
Btv_TweetArray.prototype.addTweet = function(_tweet) {
3
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    26
    if (this.idIndex.indexOf(_tweet.id_str) != -1) {
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    27
        return;
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    28
    }
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    29
    if (!_tweet.date_value) {
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    30
        _tweet.date_value = Date.parse(_tweet.created_at.replace(/(\+|-)/,'UTC$1'));
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    31
    }
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    32
    var _pos = this.tweets.length;
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    33
    while (_pos && this.idIndex[_pos - 1] > _tweet.id_str) {
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    34
        _pos--;
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    35
    }
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    36
    this.tweets.splice(_pos,0,_tweet);
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    37
    this.idIndex.splice(_pos,0,_tweet.id_str);
10
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
    38
    if (typeof this.onAdd == "function") {
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
    39
        this.onAdd(_tweet);
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
    40
    }
3
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    41
}
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    42
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    43
Btv_TweetArray.prototype.addMultipleTweets = function(_multiTweets) {
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    44
    var _l = _multiTweets.length;
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    45
    for (var _i = 0; _i < _l; _i++) {
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    46
        this.addTweet(_multiTweets[_i], true);
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    47
    }
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    48
}
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    49
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    50
Btv_TweetArray.prototype.count = function() {
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    51
    return this.tweets.length;
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    52
}
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    53
10
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
    54
Btv_TweetArray.prototype.tweetAtPos = function(_i) {
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
    55
    return this.tweets[_i];
3
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    56
}
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    57
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    58
Btv_TweetArray.prototype.slice = function(_start, _end) {
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    59
    var _slice = this.tweets.slice(_start, _end),
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    60
        _result = new Btv_TweetArray(),
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    61
        _l = _slice.length;
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    62
    for (var _i = 0; _i < _l; _i++) {
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    63
        _result.push(_slice[_i]);
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    64
    }
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    65
    return _result;
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    66
}
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    67
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    68
Btv_TweetArray.prototype.reverse = function() {
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    69
    var _result = new Btv_TweetArray(),
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    70
        _l = this.tweets.length;
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    71
    for (var _i = _l-1; _i >= 0; _i--) {
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    72
        _result.push(this.tweets[_i]);
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    73
    }
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    74
    return _result;
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    75
}
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    76
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    77
Btv_TweetArray.prototype.each = function(_callback) {
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    78
    var _l = this.count();
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    79
    for (var _i = 0; _i < _l; _i++) {
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    80
        _callback(this.tweets[_i]);
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    81
    }
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    82
}
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    83
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    84
Btv_TweetArray.prototype.map = function(_callback) {
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    85
    var _result = [];
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    86
    this.each(function(_tweet) {
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    87
        _result.push(_callback(_tweet))
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    88
    });
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    89
    return _result;
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    90
}
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    91
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    92
Btv_TweetArray.prototype.search = function(_filter) {
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    93
    var _filtered = new Btv_TweetArray(),
10
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
    94
        _reFilter = regexpFromText(_filter);
3
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    95
    this.each(function(_tweet) {
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    96
        var _mention = '@' + _tweet.from_user;
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    97
        if (( _tweet.text.search(_reFilter) != -1 ) || ( _mention.search(_reFilter) != -1 )) {
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    98
            _filtered.push(_tweet);
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
    99
        }
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   100
    });
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   101
    return _filtered;
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   102
}
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   103
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   104
Btv_TweetArray.prototype.beforeDate = function(_date) {
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   105
    var _filtered = new Btv_TweetArray();
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   106
    this.each(function(_tweet) {
10
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   107
        if (_tweet.date_value <= _date) {
3
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   108
            _filtered.push(_tweet);
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   109
        }
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   110
    });
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   111
    return _filtered;
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   112
}
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   113
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   114
Btv_TweetArray.prototype.afterDate = function(_date) {
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   115
    var _filtered = new Btv_TweetArray();
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   116
    this.each(function(_tweet) {
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   117
        if (_tweet.date_value > _date) {
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   118
            _filtered.push(_tweet);
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   119
        }
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   120
    });
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   121
    return _filtered;
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   122
}
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   123
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   124
Btv_TweetArray.prototype.tweetById = function(_tweetId) {
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   125
    var _index = this.idIndex.indexOf(_tweetId);
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   126
    return (_index ? this.tweets[_index] : null);
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   127
}
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   128
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   129
Btv_TweetArray.prototype.lastTweet = function() {
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   130
    return this.tweets[this.tweets.length - 1];
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   131
}
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   132
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   133
/*
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   134
 * 
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   135
 */
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   136
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   137
Btv_TweetSource = function(_opts) {
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   138
    Btv_TweetArray.call(this);
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   139
    this.loading = false;
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   140
    if (!_opts || !_opts.keywords || !_opts.keywords.length) {
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   141
        return;
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   142
    }
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   143
    this.options = _opts;
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   144
    var _this = this;
10
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   145
    this.retrieveInitialTweets();
3
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   146
    setInterval(function() {
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   147
        _this.retrieveNewTweets();
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   148
    }, 5000);
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   149
}
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   150
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   151
Btv_TweetSource.prototype = new Btv_TweetArray();
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   152
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   153
Btv_TweetSource.prototype.retrieveTweets = function(_opts) {
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   154
    
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   155
    function getTwitterUrl(url) {
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   156
        $.getJSON(url, function(data) {
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   157
            _currentPage++;
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   158
            var _isLast = true;
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   159
            if (data.results && data.results.length) {
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   160
                _this.addMultipleTweets(data.results);
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   161
                var _oldestTweetId = data.results[data.results.length - 1].id_str,
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   162
                    _maxId = _oldestTweetId;
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   163
                if (_currentPage < _opts.pages) {
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   164
                    _isLast = false;
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   165
                    getTwitterUrl(_baseurl + _firstparams + '&max_id=' + _maxId + _lastparams);
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   166
                }
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   167
            }
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   168
            
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   169
            if (_isLast) {
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   170
                _this.loading = false;
10
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   171
                if (typeof _this.onNewTweets == "function") {
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   172
                    _this.onNewTweets();
3
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   173
                }
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   174
            }
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   175
        });
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   176
    }
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   177
    
10
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   178
    
3
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   179
    if (this.loading) {
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   180
        return;
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   181
    }
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   182
    this.loading = true;
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   183
    var _baseurl = "http://search.twitter.com/search.json",
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   184
        _currentPage = 0,
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   185
        _firstparams = "?q="
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   186
            + encodeURIComponent(this.options.keywords.join(' OR '))
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   187
            + "&rpp=100"
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   188
            + (this.options.lang ? "&lang=" + this.options.lang : '' ),
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   189
        _lastparams = ( _opts.since_id ? "&since_id=" + _opts.since_id : '' )
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   190
            + "&callback=?",
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   191
        _jsonurl = _baseurl + _firstparams + _lastparams,
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   192
        _this = this;
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   193
    getTwitterUrl(_jsonurl);
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   194
    
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   195
}
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   196
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   197
Btv_TweetSource.prototype.retrieveInitialTweets = function() {
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   198
    this.retrieveTweets({
32
1e47b1f9f42d Added server communication in the client and corrected server code
veltr
parents: 13
diff changeset
   199
        "pages": 1
3
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   200
    });
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   201
}
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   202
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   203
Btv_TweetSource.prototype.retrieveNewTweets = function() {
39
c9378e7e853a added Local Storage
veltr
parents: 32
diff changeset
   204
    var _last = this.lastTweet();
3
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   205
    this.retrieveTweets({
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   206
        "pages": 1,
39
c9378e7e853a added Local Storage
veltr
parents: 32
diff changeset
   207
        "since_id": _last ? _last.id_str : 0
3
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   208
    });
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   209
}
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   210
10
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   211
Btv_TweetSource.prototype.setOnNewTweets = function(_callback) {
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   212
    this.onNewTweets = _callback;
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   213
}
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   214
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   215
Btv_TweetQueueManager = function(_tweetArray, _callback) {
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   216
    this.tweetArray = _tweetArray;
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   217
    this.majorInterval = 10000; // Time slices for calculating the minor Interval setting
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   218
    this.minimumInterval = 1000; // Safe limit to avoid tweets going to the wrong column
44
02971f8dcaa5 set onair time, podium improvements
veltr
parents: 43
diff changeset
   219
    this.initialBuffer = 300000; // don't start with empty columns, but show the tweets of the last five minutes - 5 * 60 * 1000 = 300000
10
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   220
    this.waitIfNoTweets = 2000;
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   221
    this.callback = _callback;
42
6cba3a02a1a1 Correction for hashtag keywords
veltr
parents: 39
diff changeset
   222
    this.lastEndTime = new Date().valueOf() - this.initialBuffer;
10
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   223
    this.isPaused = false;
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   224
    this.onMajorInterval();
3
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   225
}
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   226
10
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   227
Btv_TweetQueueManager.prototype.onMinorInterval = function() {
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   228
    if (this.isPaused) {
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   229
        this.waitMinorInterval();
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   230
    } else {
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   231
        var _l = this.currentSlice.count();
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   232
        if (this.position < _l) {
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   233
            this.callback(this.currentSlice.tweetAtPos(this.position));
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   234
            this.position++;
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   235
            this.waitMinorInterval();
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   236
        } else {
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   237
            this.onMajorInterval();
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   238
        }
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   239
    }
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   240
}
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   241
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   242
Btv_TweetQueueManager.prototype.waitMinorInterval = function() {
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   243
    var _this = this;
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   244
    window.setTimeout(function() {
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   245
        _this.onMinorInterval();
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   246
    }, this.minorInterval);
3
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   247
}
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   248
10
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   249
Btv_TweetQueueManager.prototype.onMajorInterval = function() {
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   250
    this.position = 0;
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   251
    this.currentSlice = this.tweetArray.afterDate(this.lastEndTime);
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   252
    var _l = this.currentSlice.count();
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   253
    if (_l) {
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   254
        this.lastEndTime = this.currentSlice.tweetAtPos(_l - 1).date_value;
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   255
        this.minorInterval = Math.floor(Math.max(this.minimumInterval, this.majorInterval / _l));
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   256
        this.onMinorInterval();
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   257
    } else {
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   258
        var _this = this;
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   259
        window.setTimeout(function() {
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   260
            _this.onMajorInterval();
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   261
        }, this.waitIfNoTweets);
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   262
    }
3
82b4715202d1 Modified client side tweet scraping script
veltr
parents:
diff changeset
   263
}
10
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   264
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   265
Btv_TweetQueueManager.prototype.playPause = function() {
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   266
    this.isPaused = !this.isPaused;
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   267
    return this.isPaused;
dd7d86fbee70 Tweet Queue Algorithm + Counter
veltr
parents: 3
diff changeset
   268
}