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かけた方が速いのはアレ。