カテゴリー

月別過去記事

みるくぜりー内 検索
Loading

Twitterの全ツイート履歴を使ってNode.jsで遊ぼう

GMOペパボ Advent Calendar 2017の16日目の記事です。

すっかり筆無精となっている私ですが、なんだかんだツイートはしている。
せっかくなので、今年の締めくくりとして1年間のツイートを振り返って総括して見よう!と
色々調べていたところ、全ツイート履歴をメールでダウンロードできると知り、早速ファイル生成のリクエスト→zipファイルを解凍して
楽しく解析を行ってみました。

提供されている履歴だけでも月別のグラフが出ていたり検索が出来たりと十分使えるのですが、
せっかくjsonで落ちてきてるし、javascriptで処理してみるかーと始めたものの
ローカルのファイルはChromeでは直接の読みこみ不可と知り断念。

このまま諦めるのは悔しいし、Node.jsなら問題無くできるだろうってことで
まだほんのちょっとかじった程度の知識ですが、やってみました。
メールにてダウンロードしてきた全ツイートのディレクトリにて、
下記のコードを実行すればリツイートを取り除いた今年のツイートのデータを
集計する仕組みになってます。
(動かす前にnpm install にてdate-utils,fs,pathの3つを入れてください。)
後日時間作って、機能追加した上でGitHubにそのまま使えるコードはアップしようと思っています。

require('date-utils');

var fs = require('fs'),
path = require('path');

var tweets_dir = path.join('data', 'js', 'tweets');

var Grailbird = {
data: {},
};

var dt = new Date();
regexp = new RegExp(dt.toFormat("YYYY"));
fs.readdirSync(tweets_dir).forEach(function (file) {
if (file.match(regexp)){
var filepath = path.join(tweets_dir, file);
var data = fs.readFileSync(filepath, 'utf8');
eval(data);
}
});

totalLength = 0;
count = 0;
Object.keys(Grailbird.data).forEach(function (key) {
Grailbird.data[key].forEach(function(tweet){
// リツイートを除く
if (tweet.retweeted_status == undefined) {
totalLength += tweet.text.length
count++;
}
})
});

console.log('今年の文字数: ' + totalLength);
console.log('今年の投稿数: ' + count);
console.log('平均文字数: ' + Math.round(totalLength/count));


ちなみに私の結果はこんな感じ。
今年の文字数: 66371
今年の投稿数: 1029
平均文字数: 65


結構長文を書いてることが多いので100越えてるかなと思ってたのですが、
意外とそうでも無かった。

もう少し時間があれば形態素解析通したり、テキストの感情値取得したりして
もっと面白いデータを出せたかなと思うのですが…。
我が家でまさかのインフルエンザ発生により今回はここで断念…(´・ω・`)

Node.js今回初めて真面目に書いてみたのですが
調べれば調べるほど幅広く使えて大変面白そう。
同僚にもNode.jsを活用した面白いプロダクトを教えて貰ったので
もう少し学習を進めて面白いものを作り出せる様になれたらいいなと思ってます。


コメント
コメントする








   
この記事のトラックバックURL
トラックバック