-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlambda.js
69 lines (57 loc) · 1.68 KB
/
lambda.js
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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
/**
* Created by mario (https://github.com/hyprstack) on 01/10/2019.
*/
const {DynamoDB} = require('aws-sdk');
const uuid = require('uuidv4').default;
const {getTweets} = require('./tweet-fetcher');
async function uploadToDynamo(tableName, dataRow) {
const {tweetId} = dataRow;
try {
const now = new Date().toISOString();
const item = {
id: uuid(),
createdAt: now,
...dataRow
};
const params = {
TableName: tableName,
Item: item
};
const dynamodb = new DynamoDB.DocumentClient();
return dynamodb.put(params).promise();
} catch (err) {
console.log(`Error uploading tweet #${tweetId} to dynamoDb`);
throw err;
}
}
async function handler(event, context) {
try {
console.log(JSON.stringify(event, null, 2));
const {
twitter_consumer_key,
twitter_consumer_secret,
twitter_access_token_key,
twitter_access_token_secret,
target_twitter_handler,
number_of_tweets,
table_name
} = event;
const twitterClient = new Twitter({
consumer_key: twitter_consumer_key,
consumer_secret: twitter_consumer_secret,
access_token_key: twitter_access_token_key,
access_token_secret: twitter_access_token_secret
});
const twitterHandler = target_twitter_handler;
const numberOfTweets = number_of_tweets <= 100 ? number_of_tweets : 50;
const tweets = await getTweets(twitterClient, twitterHandler, numberOfTweets);
const promisesToResolve = tweets.map((dataRow) => {
return uploadToDynamo(table_name, dataRow);
});
await Promise.all(promisesToResolve);
return context.done()
} catch (e) {
throw e;
}
}
exports.tweetHandler = handler;