Twitterのログアーカイブから、指定のキーワードを含むツイートを検索する
収録されるデータが大幅に増えたTwitterのログアーカイブのビュアーをPowerShellで作ってみようかと思い、とりあえずの取っ掛かりとして
- PowerShellでzipアーカイブからツイートデータを含むファイルを取り出して、メモリ上に展開する
- 展開したツイートデータからキーワード検索する
ところまで作ってみた。
Param(
[String]$InputPath = "twitter-log-archive.zip",
[String]$Keyword = "にゃーん"
)
Add-Type -assemblyname system.io.compression.filesystem;
function ReadTweetJS($path){
$tweet = [System.IO.Compression.ZipFile]::OpenRead($path).GetEntry('tweet.js');
$buf = New-Object System.Byte[]($tweet.Length);
[void]$tweet.Open().Read($buf, 0, $tweet.Length);
$s = [System.Text.Encoding]::UTF8.GetString($buf);
return $s.Remove(0, $s.IndexOf(" = ") + 2) | ConvertFrom-JSON;
}
$path = [System.IO.Path]::Combine((pwd).path, $InputPath);
if((Test-Path $path -PathType Leaf) -eq $false){
"not found: $path"
exit;
}
"input file: $path"
"search word: $Keyword"
'Parsing tweet data ...'
$tweet_data = ReadTweetJS($path);
# 一番最初のツイート
# $tweet_data[0];
# 一番最後のツイート
# $tweet_data[$tweet_data.Length - 1];
# 全ツイートから$Keywordを含むツイートを列挙する
$tweet_data | %{
if($_.tweet.full_text -match $Keyword){
# 改行を無視して、1行=1tweetになるようにする
$_.tweet.full_text -replace '\n','\n';
}
}
JSON構造を維持して情報を検索したい場合を除いて、手作業でtweet.js
を取り出してgrepかけた方が速いのはアレ。