1 | const StreamClient = require('./stream_client');
|
2 | const DATA_TIMEOUT = 30000;
|
3 | const RULES_TIMEOUT = 5000;
|
4 |
|
5 |
|
6 |
|
7 |
|
8 | class FilteredStream extends StreamClient {
|
9 | constructor({token, timeout = DATA_TIMEOUT, stream_timeout = DATA_TIMEOUT}) {
|
10 | super({
|
11 | token: token,
|
12 | timeout: timeout,
|
13 | stream_timeout: stream_timeout
|
14 | });
|
15 | this.url = 'tweets/search/stream';
|
16 | }
|
17 |
|
18 | |
19 |
|
20 |
|
21 | addRule(rules) {
|
22 | let data = { add: rules };
|
23 | return this.twitrClient.post('/tweets/search/stream/rules', data, {
|
24 | timeout: RULES_TIMEOUT,
|
25 | responseType: 'json'
|
26 | });
|
27 | }
|
28 |
|
29 | |
30 |
|
31 |
|
32 | async clearRules() {
|
33 | let res = await this.rules();
|
34 | if(res.data && 'data' in res.data) {
|
35 | const has_id = (e) => { return 'id' in e; }
|
36 | let data = res.data.data;
|
37 | if(!Array.isArray(data) || !data.every(has_id)) {
|
38 | return Promise.reject(res);
|
39 | }
|
40 | let rules = data.map((r) => r.id);
|
41 | return this.deleteRules(rules);
|
42 | } else {
|
43 | return Promise.reject(res)
|
44 | }
|
45 | }
|
46 |
|
47 | |
48 |
|
49 |
|
50 | rules() {
|
51 | return this.twitrClient.get('/tweets/search/stream/rules', {
|
52 | timeout: RULES_TIMEOUT,
|
53 | responseType: 'json'
|
54 | });
|
55 | }
|
56 |
|
57 | |
58 |
|
59 |
|
60 | deleteRules(ruleids) {
|
61 | let data = { delete: { ids: ruleids } };
|
62 | return this.twitrClient.post('/tweets/search/stream/rules', data, {
|
63 | timeout: RULES_TIMEOUT,
|
64 | responseType: 'json'
|
65 | });
|
66 | }
|
67 | }
|
68 |
|
69 | module.exports = FilteredStream;
|