]> ruderich.org/simon Gitweb - config/dotfiles.git/blob - bin/squvi
zsh/rc: add more files to ignored-patterns for vim
[config/dotfiles.git] / bin / squvi
1 #!/usr/bin/perl
2
3 # Download video files with quvi.
4 #
5 # Don't use clive which is just a front-end to quvi anyway, but with
6 # vulnerable "exec" code (system() with missing escaping).
7
8 # Copyright (C) 2013-2014  Simon Ruderich
9 #
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.
14 #
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.
19 #
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/>.
22
23
24 use strict;
25 use warnings;
26
27 use IPC::Run ();
28 use JSON ();
29
30
31 if (scalar @ARGV != 1) {
32     print STDERR "Usage: $0 <url>\n";
33     exit 1;
34 }
35
36
37 my ($out, $err);
38 my @cmd = ('quvi', $ARGV[0]);
39 if (not IPC::Run::run(\@cmd, \undef, \$out, \$err)) {
40     die "'@cmd' died:\n$err";
41 }
42
43 my $data = JSON::decode_json($out);
44
45 my $url    = $data->{link}[0]{url};
46 my $suffix = $data->{link}[0]{file_suffix};
47
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;
51
52 @cmd = ('wget', '--no-clobber', '--progress=bar:force',
53         '-O', "$name.$suffix", $url);
54 exec { $cmd[0] } @cmd or die $!;