使用 Node.js、Mongo 和 D3 创建一个工具来分析 Twitter 用户信息(5)
 
- UID
- 1066743
|

使用 Node.js、Mongo 和 D3 创建一个工具来分析 Twitter 用户信息(5)
第 4 步. 连接到 Mongo在发出 Twitter API 请求时,Node 服务器代码必须能够包含用户的 Twitter 私钥。Twitter 请求中同时需要公钥和私钥。
我使用公钥作为查找私钥的数据库句柄。我希望我的 ProfileWords 应用程序能够同时支持多个人;因此,它需要能够代表多个用户接受并创建请求,每个用户拥有她或他自己的 Twitter 帐户。
当用户执行身份验证时,Twitter 会为该用户提供一个私钥。该密钥存储在数据库中。然后在用户发出请求时,应用程序会针对公钥部分查找存储的私钥,公钥保存在 Web 浏览器中并在请求中发送。
以下是身份验证序列。
Mongo 使用了一个连接池。我的 Node 应用程序在启动时会创建一个连接:
1
2
3
4
5
6
7
8
9
10
11
| mongo = { "hostname":"127.0.0.1",
"port":27017,
"username":"",
"password":"",
"name":"",
"db":"db",
"url":"mongodb://127.0.0.1:27017/db" };
path = mongo.url;
MongoClient.connect( path, function(err, followersDatabase) {
|
请注意,我的整个 Node 应用程序都在此连接中运行,在运行应用程序之后,我可使用 followersDatabase 表达式引用该数据库。
在许多 Mongo 示例中,每次发出请求时都会创建一个全新的连接。我了解到此方法在部署到 PaaS 运行时时很快会发生故障。Mongo 文档(我在其中了解了 MongoClient.connect)建议使用一个连接的会话来运行,就像我所做的那样。
我创建了 作为参考来帮助显示一些 Mongo 基本信息,但您还可以学习如何在 app.js 中使用它。
例如,以下代码将会查找秘密令牌,以便该代码可以向 Twitter 发送请求。
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
| app.param('id', function(req, res, next, id){
res.setHeader( 'Content-Type', 'application/json' );
if( req.headers['oauth_token'] ){
var token = req.headers['oauth_token'];
var cloudType = req.headers['cloudtype'];
var collection = followersDatabase.collection( 'tokens' );
collection.findOne( { 'oauth_access_token': token }, function( err, item ) {
var config = {
consumer_key: 'YOUR CONSUMER KEY',
consumer_secret: 'YOUR CONSUMER SECRET',
access_token_secret: item.oauth_access_token_secret,
access_token: item.oauth_access_token
}
console.log( 'account: ' + item.name );
retrieveProfiles( config, res, id, cloudType );
var requests = followersDatabase.collection( 'requests' );
var date = new Date();
var request = ( { 'twitterId':id, 'timeStamp': date, 'account': item.name } );
requests.insert( request, {safe:true}, errorHandler );
});
}
next();
});
app.get( "/words/:id", function(req, res ){ } );
|
您有许多机会将分析数据保存在数据库中。例如,您可以按照用户统计每个请求,或者可以记录词汇云的颜色主题选择。该应用程序的当前迭代使用数据库来管理多个用户的令牌访问。
在这里,我介绍了使用 Node 和 express 执行的后续步骤,比如使用 Mongo 和使用身份验证。相同的要素也可以用在其他社交媒体 mashup 中。这些构建块可能对您很有帮助。
我花费了一段时间才积累了这些知识,但这个过程(解决问题并学习)很过瘾。node 包会对您很有帮助,会提供了一个不错的基础。 |
|
|
|
|
|