3 # Download video files with quvi.
5 # Don't use clive which is just a front-end to quvi anyway, but with
6 # vulnerable "exec" code (system() with missing escaping).
8 # Copyright (C) 2013-2014 Simon Ruderich
10 # This program is free software: you can redistribute it and/or modify
11 # it under the terms of the GNU General Public License as published by
12 # the Free Software Foundation, either version 3 of the License, or
13 # (at your option) any later version.
15 # This program is distributed in the hope that it will be useful,
16 # but WITHOUT ANY WARRANTY; without even the implied warranty of
17 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 # GNU General Public License for more details.
20 # You should have received a copy of the GNU General Public License
21 # along with this program. If not, see <http://www.gnu.org/licenses/>.
31 if (scalar @ARGV != 1) {
32 print STDERR "Usage: $0 <url>\n";
38 my @cmd = ('quvi', $ARGV[0]);
39 if (not IPC::Run::run(\@cmd, \undef, \$out, \$err)) {
40 die "'@cmd' died:\n$err";
43 my $data = JSON::decode_json($out);
45 my $url = $data->{link}[0]{url};
46 my $suffix = $data->{link}[0]{file_suffix};
48 my $name = $data->{page_title};
49 # Strip all non-ASCII characters including "/" which is illegal in file names.
50 $name =~ s{[^\x20-\x2E\x30-\x7e]}{-}g;
52 @cmd = ('wget', '--no-clobber', '--progress=bar:force',
53 '-O', "$name.$suffix", $url);
54 exec { $cmd[0] } @cmd or die $!;