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