好的,所以我是Rx的初学者,不幸的是js中的js和stream也是新手。我使用这个https://github.com/trygve-lie/twitter-stream-api连接到twitters流式api并通过推文接收json对象。到目前为止,我有这个代码
var Rx = require('rxjs/Rx');
var TwitterStream = require('twitter-stream-api'),
fs = require('fs');
var filter = 'tweet';
var keys = {
consumer_key : "key",
consumer_secret : "secret",
token : "token",
token_secret : "tokensecret"
};
var Twitter = new TwitterStream(keys);
Twitter.stream('statuses/filter', {
track: filter
});
Twitter.on('connection success', function (uri) {
console.log('connection success', uri);
});
Twitter.on('data', function (obj) {
console.log(obj.text);
});
我成功地将推文写入控制台,但我真正想要学习的是使用流,尤其是RxJS。我已经尝试了所有可以想到的方法来创建一个可观察的。 Rx.Observable。创建/来自等...
我也尝试了Twitter.resume(),因为它显然暂停了,恢复流并观察它。我只得到错误,如不能.subscribe不是一个功能。根据我的上述内容,如何使用Rx.Observable开始过滤和播放数据?
谢谢!
答案 0 :(得分:2)
RxJS 5没有任何方法可以将流转换为Observable,因此您需要自己完成此操作。理想情况下使用Observable.create
。
const Rx = require('rxjs');
const Observable = Rx.Observable;
var TwitterStream = require('twitter-stream-api'),
...
var source$ = Observable.create(observer => {
var Twitter = new TwitterStream(keys);
Twitter.stream('statuses/filter', {
track: filter
});
Twitter.on('data', function (obj) {
observer.next(obj);
});
return () => {
Twitter.close();
};
});
这使得一个冷的Observable只有在你订阅它时才能连接到Twitter。 Observable.create
静态方法允许您将值推送给观察者,最后返回拆卸功能,然后关闭连接。取消订阅或Observable完成时会调用此函数。
然后你可以用你想要的任何东西链接这个Observable:
source$.filter(...).map(...)
请注意,还有Observable.bindCallback()
和Observable.bindNodeCallback()
方法,但这些对您的情况无济于事。
了解更多:
答案 1 :(得分:0)
以下是使用desmondmorris / node-twitter和rxjs 5的示例。
const Observable = require('rxjs').Observable;
Observable
.of(new require('twitter')({
consumer_key: 'xxxx',
consumer_secret: 'xxxx',
access_token_key: 'xxxx',
access_token_secret: 'xxxx',
})).mergeMap(twitter =>
Observable
.fromEvent(twitter.stream('statuses/filter', {
track: 'Stack Overflow'
}),
'data'))
.filter(tweet => tweet.user.follow_count > 10000)
.subscribe(console.log);