-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhar-extract.pl
More file actions
86 lines (64 loc) · 2.1 KB
/
har-extract.pl
File metadata and controls
86 lines (64 loc) · 2.1 KB
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
#!/usr/bin/perl
# Author: Saúl Blanco Tejero (@elGolpista)
# License: GPL-3.0-only
use strict;
use JSON;
use File::Path;
use MIME::Base64;
my @image_extensions = (
'png', 'jpg',
'svg', 'gif',
);
my @video_extensions = (
'mp4', 'flv', 'mkv',
'avi', 'wmv', 'm4v',
'mov', 'mpg',
);
my @requested_extensions = ();
print <<MENU;
==== OPTIONS ====
1 · ALL MEDIA
2 · ONLY IMAGES
3 · ONLY VIDEOS
4 · OTHER\n
MENU
print "Select an option: "; my $op = <STDIN>;
if ($op == 1) {
push(@requested_extensions, @image_extensions);
push(@requested_extensions, @video_extensions);
}
elsif ($op == 2) { push(@requested_extensions, @image_extensions); }
elsif ($op == 3) { push(@requested_extensions, @video_extensions); }
elsif ($op == 4) {
print "\nType the extensions (delimited by ',' or ' ' or '|')\n";
print "-> "; my $custom_extensions = <STDIN>;
push(@requested_extensions, split(/[,|\s]+/, $custom_extensions));
}
# TODO: Refactor all code below
$/ = undef;
my $json = <>;
my $json_hash_ref = decode_json($json);
my @entries = @{$json_hash_ref->{log}->{entries}};
foreach my $entry ( @entries ) {
# TODO: Refactor, (create a subroutine)
# Check requested extension with regexy
foreach my $extension ( @requested_extensions ) {
my $resource_url = $entry->{request}->{url};
if ($resource_url =~ /(?i)(\w+\.($extension))/i) {
my $resource_name = $1;
my $is_media = grep(/$2/, (@image_extensions, @video_extensions));
# Using the mime-type to build resource path
my $resource_path = 'out/'.$entry->{response}->{content}->{mimeType};
my $file_content = $entry->{response}->{content}->{text};
unless ( -d $resource_path ) { mkpath($resource_path); }
$resource_path .= "/$resource_name";
open my $fh, '>', $resource_path or die "Cannot open file: $!";
if ( ! $is_media ) { binmode $fh, ':utf8'; }
else { $file_content = decode_base64($file_content); }
print $fh $file_content;
close $fh or die "Cannot close fh: $!";
last;
}
}
}
# print time - $^T, "\n";