diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..a0e62f2 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,18 @@ +language: ruby +rvm: +- 2.1 + +sudo: required +addons: + apt: + packages: + - build-essential + - grep + - sed + +script: ". ./travis/cibuild" + + +before_install: +- openssl aes-256-cbc -pass "pass:$pass" + -in enc.tar.gz.enc -out enc.tar.gz -d -a diff --git a/Gemfile b/Gemfile new file mode 100644 index 0000000..db4b33f --- /dev/null +++ b/Gemfile @@ -0,0 +1,3 @@ +source "http://production.cf.rubygems.org/" + +gem "ronn" diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000..d0175fa --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,16 @@ +GEM + remote: http://production.cf.rubygems.org/ + specs: + hpricot (0.8.6) + mustache (1.0.2) + rdiscount (2.1.8) + ronn (0.7.3) + hpricot (>= 0.8.2) + mustache (>= 0.7.0) + rdiscount (>= 1.5.8) + +PLATFORMS + ruby + +DEPENDENCIES + ronn diff --git a/README.md b/README.md index f4d5df0..e2350bf 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,7 @@ Script to learn bash scripting. This project is licensed under the GPLv3 license. -To install this script run the following command on any Linux/Unix system, including, Mac OS X and iOS. +To install this script run the following command on any Linux/Unix system, including Mac OS X and iOS. ``` wget http://daniilgentili.magix.net/learn.sh && chmod +x learn.sh diff --git a/debian/learn-bash-1.0.0/debian/README b/debian/learn-bash-1.0.0/debian/README new file mode 100644 index 0000000..b10263b --- /dev/null +++ b/debian/learn-bash-1.0.0/debian/README @@ -0,0 +1,6 @@ +The Debian Package learn-bash +---------------------------- + +Script to learn bash scripting. + + -- Daniil Gentili Tue, 26 May 2015 22:59:02 +0200 diff --git a/debian/learn-bash-1.0.0/debian/changelog b/debian/learn-bash-1.0.0/debian/changelog new file mode 100644 index 0000000..e69de29 diff --git a/debian/learn-bash-1.0.0/debian/compat b/debian/learn-bash-1.0.0/debian/compat new file mode 100644 index 0000000..ec63514 --- /dev/null +++ b/debian/learn-bash-1.0.0/debian/compat @@ -0,0 +1 @@ +9 diff --git a/debian/learn-bash-1.0.0/debian/control b/debian/learn-bash-1.0.0/debian/control new file mode 100644 index 0000000..7e65bbb --- /dev/null +++ b/debian/learn-bash-1.0.0/debian/control @@ -0,0 +1,13 @@ +Source: learn-bash +Section: misc +Priority: optional +Maintainer: Daniil Gentili +Build-Depends: debhelper (>= 8.0.0) +Standards-Version: 3.9.4 +Homepage: http://daniil.it/learn-bash +#Vcs-Git: git@github.com:danog/learn-bash.git + +Package: learn-bash +Architecture: all +Depends: ${shlibs:Depends}, ${misc:Depends}, wget, bash, sed +Description: Script to learn bash scripting. Created by Daniil Gentili. \ No newline at end of file diff --git a/debian/learn-bash-1.0.0/debian/copyright b/debian/learn-bash-1.0.0/debian/copyright new file mode 100644 index 0000000..0c84500 --- /dev/null +++ b/debian/learn-bash-1.0.0/debian/copyright @@ -0,0 +1,34 @@ +Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: learn-bash +Source: + +Files: * +Copyright: + +License: GPL-3.0+ + +Files: debian/* +Copyright: 2015 Daniil Gentili +License: GPL-3.0+ + +License: GPL-3.0+ + 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 package 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 . + . + On Debian systems, the complete text of the GNU General + Public License version 3 can be found in "/usr/share/common-licenses/GPL-3". + +# Please also look if there are files or directories which have a +# different copyright/license attached and list them here. +# Please avoid to pick license terms that are more restrictive than the +# packaged work, as it may make Debian's contributions unacceptable upstream. diff --git a/debian/learn-bash-1.0.0/debian/docs b/debian/learn-bash-1.0.0/debian/docs new file mode 100644 index 0000000..e69de29 diff --git a/debian/learn-bash-1.0.0/debian/files b/debian/learn-bash-1.0.0/debian/files new file mode 100644 index 0000000..e11d5b8 --- /dev/null +++ b/debian/learn-bash-1.0.0/debian/files @@ -0,0 +1 @@ +learn-bash_3.3.93_all.deb misc optional diff --git a/debian/learn-bash-1.0.0/debian/install b/debian/learn-bash-1.0.0/debian/install new file mode 100644 index 0000000..07945c2 --- /dev/null +++ b/debian/learn-bash-1.0.0/debian/install @@ -0,0 +1 @@ +learn-bash/* /usr/bin/ diff --git a/debian/learn-bash-1.0.0/debian/rules b/debian/learn-bash-1.0.0/debian/rules new file mode 100755 index 0000000..bcddf6f --- /dev/null +++ b/debian/learn-bash-1.0.0/debian/rules @@ -0,0 +1,13 @@ +#!/usr/bin/make -f +# -*- makefile -*- + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +%: + dh $@ +override_dh_fixperms: + dh_fixperms + chmod 0755 debian/video-dl/usr/bin/* +override_dh_builddeb: + dh_builddeb -- -Zgzip diff --git a/debian/learn-bash-1.0.0/debian/source/format b/debian/learn-bash-1.0.0/debian/source/format new file mode 100644 index 0000000..89ae9db --- /dev/null +++ b/debian/learn-bash-1.0.0/debian/source/format @@ -0,0 +1 @@ +3.0 (native) diff --git a/debian/learn-bash-1.0.0/learn-bash/video.sh b/debian/learn-bash-1.0.0/learn-bash/video.sh new file mode 100755 index 0000000..50ca7d2 --- /dev/null +++ b/debian/learn-bash-1.0.0/learn-bash/video.sh @@ -0,0 +1,694 @@ +#!/bin/bash +# Video download script v3.3.1 +# Created by Daniil Gentili (http://daniil.it) +# Video-dl - Video download programs +# +# Copyright (C) 2015 Daniil Gentili +# +# 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 . +# +# Changelog: +# v1 (and revisions): initial version. +# v2 (and revisions): added support for Rai Replay, support for multiple qualities, advanced video info and custom API server. +# v3 (and revisions): added support for Mediaset, Witty TV, La7, etc.. +# v3.1 Included built in API engine, bug fixes +# v3.2 Added support for youtube and https +# v3.3 Fixed auto update and squashed some bugs. +# v3.3.1 Improved the auto update function and player choice + + +echo "Video download script - Copyright (C) 2015 Daniil Gentili +This program comes with ABSOLUTELY NO WARRANTY. +This is free software, and you are welcome to redistribute it +under certain conditions; see the LICENSE file." + +lineclear() { echo -en "\r\033[K"; } + +##### Tools detection and selection ##### +which smooth.sh &>/dev/null && smoothsh=y || smoothsh=n + +which ffmpeg &>/dev/null && ffmpeg=y || ffmpeg=n + +which wget &>/dev/null && { +dl() { +wget "$1" -O $2 $3 +} +Q="-q" +} || { +dl() { +curl "$1" -o $2 $3 +} +Q="-s" +} + +##### Self updating section ##### +ME=$(which $0 || echo $0) +# !!!!!! Comment the following line before editing the script or all changes will be overwritten !!!!!! # +echo -n "Self-updating script..." && dl http://daniilgentili.magix.net/video.sh $ME $Q 2>/dev/null;chmod 755 $ME 2>/dev/null; lineclear + +##### Help section ##### +help() { +echo "Created by Daniil Gentili (http://daniil.it) +Supported websites: $(dl http://api.daniil.it/?p=websites - $Q) +Usage: +$(basename $0) [ -qabp=player ] URL URL2 URL3 ... +$(basename $0) [ -qabfp=player ] URLS.txt URLS2.txt URLS3.txt ... + +Options: + +-q Quiet mode: useful for crontab jobs, automatically enables -a. + +-a Automatic mode: automatically download the video in the maximum quality. + +-b Use built-in API engine: requires additional programs and may not work properly on some systems but may be faster than the API server. + +-f Read URL(s) from specified text file(s). If specified, you cannot provide URLs as arguments. + +-p=player Play the video instead of downloading it using specified player, mplayer if none specified. + +--help Show this extremely helpful message. + +If the script doesn't behave like it should, update it by running this command + +sudo apt-get update && sudo apt-get dist upgrade + +If you installed it with apt or use this command + +sudo video.sh + +if you installed it manually. +" +exit +} +[ "$1" = "--help" ] && help + +##### URL format detection ##### + +urlformatcheck() { +case $urlformat in + smooth\ streaming) + queue="$queue +`[ "$smoothsh" = "y" ] && echo "smooth.sh \\"$url\\" \\"$title.mkv\\"" || echo "echo \"Manifest URL: $url\""` + " + ;; + apple\ streaming) + queue="$queue +`[ "$ffmpeg" = "y" ] && echo "ffmpeg -i \\"$url\\" -c copy \\"$title.mkv\\"" || echo "echo \"URL: $url\""` + " + ;; + *) + + queue="$queue +dl \"$url\" $title.$ext $WOPT + " + ;; +esac +} +##### Internal API ##### + +internalapi() { +echo -n "Downloading latest version of the API engine..." && eval "$(dl http://daniil.magix.net/api.sh - $Q)" && lineclear && type api | grep -q replaytv || { +echo "Couldn't download the API engine, using built-in engine..." + +# 1st part ends here +api() { +#################################################### +####### Beginning of URL recognition section ####### +#################################################### + +dl="$(echo $1 | grep -q '^//' && echo http:$1 || echo $1)" +#dl="$(echo "$dl" | sed 's/#.*//;s/https:\/\//http:\/\//g')" + +urltype="$(curl -w "%{url_effective}\n" -L -s -I -S "$dl" -o /dev/null)" + +echo "$urltype" | grep -qE 'http://www.*.rai..*/dl/RaiTV/programmi/media/.*|http://www.*.rai..*/dl/RaiTV/tematiche/*|http://www.*.rai..*/dl/.*PublishingBlock-.*|http://www.*.rai..*/dl/replaytv/replaytv.html.*|http://.*.rai.it/.*|http://www.rainews.it/dl/rainews/.*|http://mediapolisvod.rai.it/.*|http://*.akamaihd.net/*|http://www.video.mediaset.it/video/.*|http://www.video.mediaset.it/player/playerIFrame.*|http://.*wittytv.it/.*|http://la7.it/.*|http://.*.la7.it/.*|http://la7.tv/.*|http://.*.la7.tv/.*' || ptype=common + +echo "$urltype" | grep -qE 'http://www.*.rai..*/dl/RaiTV/programmi/media/.*|http://www.*.rai..*/dl/RaiTV/tematiche/*|http://www.*.rai..*/dl/.*PublishingBlock-.*|http://www.*.rai..*/dl/replaytv/replaytv.html.*|http://.*.rai.it/.*|http://www.rainews.it/dl/rainews/.*' && ptype=rai + + +echo "$urltype" | grep -qE 'http://www.video.mediaset.it/video/.*|http://www.video.mediaset.it/player/playerIFrame.*' && ptype=mediaset + +echo "$urltype" | grep -q 'http://.*wittytv.it/.*' && ptype=mediaset && witty=y + +echo "$urltype" | grep -qE 'http://la7.it/.*|http://.*.la7.it/.*|http://la7.tv/.*|http://.*.la7.tv/.*' && ptype=lasette + +#echo "$urltype" | grep -q 'http.*://.*vk.com/.*' && ptype=vk + +#echo "$urltype" | grep -q 'http.*://.*mail.ru/.*' && ptype=mail + + +############################################################################## +####### End of URL recognition section, beginning of Functions section ####### +############################################################################## + +# Declare javascript variable + +var() { +eval $* +} +# Get video information + +getsize() { + +info="($(echo "$(echo $a | sed "s/.*\.//;s/[^a-z|0-9].*//"), $(timeout -skill 10s wget -S --spider $a 2>&1 | grep -E '^Length|^Lunghezza' | sed 's/.*(//;s/).*//')B, $(mplayer -vo null -ao null -identify -frames 0 $a 2>/dev/null | grep kbps | awk '{print $3}')" | +sed 's/\ +//g;s/^, //g;s/, B,/, Unkown size,/g;s/, ,/,/g;s/^B,//g;s/, $//;s/ $//g'))" + +} + + +# Check if URL exists and remove copies of the same URL + +function checkurl() { +tbase="$(echo "$base" | sed 's/ /%20/g;s/%20http:\/\//\ +http:\/\//g;s/%20$//g;s/ /\ +/g' | awk '!x[$0]++')" + +base= +for u in $tbase;do echo "$u" | grep -q 'rmtp://\|mms://' && { +base="$base +$u" +} || { +wget -S --tries=3 --spider "$u" 2>&1 | grep -q '200 OK\|206 Partial' && base="$base +$u" +}; done +} + + +# Nicely format input + +formatoutput() { + +case $ptype in + rai) + { +four="$(echo "$unformatted" | grep .*_400.mp4)" +six="$(echo "$unformatted" | grep .*_600.mp4)" +eight="$(echo "$unformatted" | grep .*_800.mp4)" +twelve="$(echo "$unformatted" | grep .*_1200.mp4)" +fifteen="$(echo "$unformatted" | grep .*_1500.mp4)" +eighteen="$(echo "$unformatted" | grep .*_1800.mp4)" +normal="$(echo "$unformatted" | grep -v .*_400.mp4 | grep -v .*_600.mp4 | grep -v .*_800.mp4 | grep -v .*_1200.mp4 | grep -v .*_1500.mp4 | grep -v .*_1800.mp4)" + } + ;; + mediaset) + { +mp4="$(echo "$unformatted" | grep ".mp4")" +smooth="$(echo "$unformatted" | grep -v "pl)" | grep "est")" +apple="$(echo "$unformatted" | grep "pl)")" +wmv="$(echo "$unformatted" | grep ".wmv")" +flv="$(echo "$unformatted" | grep ".flv")" +f4v="$(echo "$unformatted" | grep ".f4v")" + } + ;; + lasette) + lamp4="$(echo "$unformatted" | grep -v master | grep -v manifest | grep ".mp4")" + ;; + common) + common="$unformatted" + ;; +esac + + +formats="$( +[ "$common" != "" ] && for a in $common; do getsize + info="$(echo "$info" | sed 's/[(]//;s/[)]//')" + + echo "$info $a";done + +[ "$lamp4" != "" ] && for a in $lamp4; do getsize + + echo "$info $a";done + +[ "$normal" != "" ] && for a in $normal; do getsize + + echo "Normal quality $info $a";done + +[ "$eighteen" != "" ] && for a in $eighteen; do getsize + + echo "Maximum quality $info $a";done + + +[ "$fifteen" != "" ] && for a in $fifteen; do getsize + + echo "Medium-high quality $info $a";done + + + +[ "$twelve" != "" ] && for a in $twelve; do getsize + + echo "Medium quality $info $a";done + +[ "$eight" != "" ] && for a in $eight; do getsize + + echo "Medium-low quality $info $a";done + + +[ "$six" != "" ] && for a in $six; do getsize + + echo "Low quality $info $a";done + + + +[ "$four" != "" ] && for a in $four; do getsize + echo "Minimum quality $info $a";done + + + +[ "$smooth" != "" ] && for a in $smooth; do echo "High quality (smooth streaming) $a";done + + +[ "$mp4" != "" ] && for a in $mp4; do getsize + echo "Medium-high quality $info $a";done + + + +[ "$apple" != "" ] && for a in $apple; do echo "Medium-low quality (apple streaming, pseudo-m3u8) $a";done + + +[ "$wmv" != "" ] && for a in $wmv; do getsize + + echo "Low quality $info $a";done + + +[ "$flv" != "" ] && for a in $flv; do getsize + + echo "Low quality $info $a";done + + +[ "$f4v" != "" ] && for a in $f4v; do getsize + + echo "Low quality $info $a";done + + + +)" + +formats="$(echo "$formats" | awk '!x[$0]++' | awk '{print $(NF-1), $0}' | sort -gr | cut -d' ' -f2-)" +[ "$formats" = "" ] && exit + + +} + + + +# Rai website + +rai_normal() { + +# iframe check +echo "$file" | grep -q videoURL || { eval $(echo "$file" | grep 'content="ContentItem' | cut -d" " -f2) && file="$(wget http://www.rai.it/dl/RaiTV/programmi/media/"$content".html -qO-)"; } + +# read and declare videoURL variables from javascript in page + +eval "$(echo "$file" | grep videoURL | sed "s/var//g" | tr -d '[[:space:]]')" + +# read and declare title variable from javascript in page +$(echo "$file" | grep videoTitolo) +} + +# Rai replay function + +replay() { +# Get the video id +v=$(echo "$1" | sed 's/.*v=//;s/\&.*//') + +# Get the day +day=$(echo "$1" | sed 's/.*day=//;s/\&.*//;s/-/_/g') + +# Get the channel +case $(echo "$1" | sed 's/.*ch=//;s/\&.*//') in + 1) + ch=RaiUno + ;; + 2) + ch=RaiDue + ;; + 3) + ch=RaiTre + ;; + 31) + ch=RaiCinque + ;; + 32) + ch=RaiPremium + ;; + 23) + ch=RaiGulp + ;; + 38) + ch=RaiYoyo + ;; +esac + +# Get the json +tmpjson="$(wget http://www.rai.it/dl/portale/html/palinsesti/replaytv/static/"$ch"_$day.html -qO-)" + +# Keep only section with correct video id and make it grepable +json="$(echo $tmpjson | sed 's/'$v'.*//g;s/.*[{]//g;s/\,/\ +/g')" + +# Get the relinkers +replay=$(echo "$json" | grep mediapolis | sed 's/.*\"://g;s/\"//g;s/^ *//g') + +# Get the title +videoTitolo=$(echo "$json" | grep '"t":' | sed 's/.*\"://;s/\"//g;s/^ *//g') + + +} + + +# Relinker function + + + +function relinker_rai() { +# Resolve relinker + + +for f in $(echo $* | awk '{ while(++i<=NF) printf (!a[$i]++) ? $i FS : ""; i=split("",a); print "" }'); do + + dl=$(echo $f | grep -q '^//' && echo http:$f || echo $f) + + # 1st method + + url="$(timeout -skill 5s wget -qO- "$dl&output=25") +$(wget "$dl&output=43" -U="" -q -O -)" + + [ "$url" != "" ] && tempbase=$(echo "$url" | sed 's/[>]/\ +/g;s/[<]/\ +/g' | grep '.*\.mp4\|.*\.wmv\|.*\.mov') + + base="$(echo "$tempbase" | sed 's/\.mp4.*/\.mp4/;s/\.wmv.*/\.wmv/;s/\.mov.*/\.mov/')" && checkurl + + + # 2nd method + + [ "$base" = "" ] && { +base="$(eval echo "$(for f in $(echo "$tempbase" | grep ","); do number="$(echo "$f" | sed 's/http\:\/\///g;s/\/.*//;s/[^0-9]//g')"; echo "$f" | sed 's/.*Italy/Italy/;s/^/http\:\/\/creativemedia'$number'\.rai\.it\//;s/,/{/;s/,\./}\./;s/\.mp4.*/\.mp4/'; done)")" && checkurl + } + + + # 3rd and 4th method + [ "$base" = "" ] && { +url="$(wget "$dl&output=4" -q -O -)" +[ "$url" != "" ] && echo "$url" | grep -q creativemedia && base="$url" || base=$(curl -w "%{url_effective}\n" -L -s -I -S $dl -A "" -o /dev/null); checkurl + } + + + #[ "$base" = "" ] && base="$(curl -w "%{url_effective}\n" -L -s -I -S "$dl" -o /dev/null -A='')" && checkurl + + + TMPURLS="$TMPURLS +$base" + +done + +# Remove copies of the same url +base="$(echo "$TMPURLS" | sort | awk '!x[$0]++')" + +# Find all qualities in every video +tbase= +for t in _400\\.mp4 _600\\.mp4 _800\\.mp4 _1200\\.mp4 _1500\\.mp4 _1800\\.mp4 \\.mp4; do for i in _400\\.mp4 _600\\.mp4 _800\\.mp4 _1200\\.mp4 _1500\\.mp4 _1800\\.mp4; do tbase="$tbase +$(echo "$base" | sed "s/$t/$i/")"; tbase="$(echo "$tbase" | grep -Ev '_([0-9]{3,4})_([0-9]{3,4})\.mp4' | awk '!x[$0]++')"; done;done + + +base="$tbase" + +checkurl + +unformatted="$base" +formatoutput + + +} + +########################################################################################### +################## End of Rai relinker section, beginning of Rai section ################## +########################################################################################### + + +function rai() { +saferai="$1" +# Store the page in a variable +file=$(wget "$saferai" -q -O -) + +# Rai replay or normal rai website choice +echo "$1" | grep -q http://www.*.rai..*/dl/replaytv/replaytv.html.* && replay "$saferai" || rai_normal "$saferai" + +videoTitolo="$(echo -en "$videoTitolo")" +title="${videoTitolo//[^a-zA-Z0-9 ]/}" +title=`echo $title | tr -s " "` +title=${title// /_} + +# Resolve relinkers +relinker_rai $videoURL_M3U8 $videoURL_MP4 $videoURL_H264 $videoURL_WMV $videoURL $replay +} + + +########################################################################################### +##################### End of Rai section, beginning of Lasette section #################### +########################################################################################### + + +lasette() { +# Store the page in a variable +page="$(wget $1 -q -O -)" + +# Get the javascript with the URLs +URLS="$(wget -q -O - $(echo "$page" | grep starter | sed 's/.*src\=\"//;s/\".*//') | grep -E 'src:.*|src_.*' | sed 's/.*\: \"//;s/\".*//')" + +# Get the title +videoTitolo="$(echo $page | sed 's/.*//;s/<\/title>.*//' | sed 's/^ //')" + +title="${videoTitolo//[^a-zA-Z0-9 ]/}" +title=`echo $title | tr -s " "` +title=${title// /_} + +unformatted="$URLS" +formatoutput + + +} + + + +########################################################################################### +################## End of Lasette section, beginning of Mediaset section ################## +########################################################################################### + + + +mediaset() { +# Store the page in a variable +page=$(wget $1 -q -O -) + +# Witty tv recongition +[ "$witty" = "y" ] && { +# Get the video id +id=$(echo "$page" | grep '\<iframe id=\"playeriframe\" src=\"http\:\/\/www.video.mediaset.it\/player\/playerIFrame.shtml?id\=' | sed 's/.*\<iframe id=\"playeriframe\" src=\"http\:\/\/www.video.mediaset.it\/player\/playerIFrame.shtml?id\=//;s/\&.*//') + +# Get the title +videoTitolo=$(echo "$page" | grep -o "<meta content=\".*\" property=\".*title\"/>" | sed 's/.*\<meta content\=\"//;s/\".*//g') + +} || { +eval $(echo "$page" | grep "var videoMetadataId" | sed 's/var //' | tr -d '[[:space:]]') +id="$videoMetadataId" +videoTitolo=$(echo "$page" | grep -o "<meta content=\".*\" name=\"title\"/>" | sed 's/.*\<meta content\=\"//;s/\".*//g') + +} + +title="${videoTitolo//[^a-zA-Z0-9 ]/}" +title=`echo $title | tr -s " "` +title=${title// /_} + +# Get the video URLs using the video id +URLS="$(wget "http://cdnselector.xuniplay.fdnames.com/GetCDN.aspx?streamid=$id" -O - -q -U="" | sed 's/</\ +&/g' | grep http:// | sed 's/.*src=\"//;s/\".*//' | sed '/^\s*$/d')" + + +unformatted="$URLS" +formatoutput + +} + + +########################################################################################### +##################### End of Mediaset section, beginning of common section ################ +common() { +# Store the page in a variable +page="$(wget -q -O - $1)" +# Get the video URLs +base="$(echo "$page" | egrep '\.mp4|\.mkv|\.flv|\.f4v|\.wmv|\.mov|\.3gp|\.avi|\.m4v|\.mpg|\.mpe|\.mpeg' | sed 's/.*http:\/\//http:\/\//;s/\".*//' | sed "s/'.*//" | sed 's/.mp4.*/.mp4/g;s/.mkv.*/.mkv/g;s/.flv.*/.flv/g;s/.f4v.*/.f4v/g;s/.wmv.*/.wmv/g;s/.mov.*/.mov/g;s/.3gp.*/.3gp/g;s/.avi.*/.avi/g;s/.m4v.*/.m4v/g;s/.mpg.*/.mpg/g;s/.mpe.*/.mpe/g;s/.mpeg.*/.mpeg/g' | awk '!x[$0]++')" + +checkurl +[ "$base" = "" ] && continue + +videoTitolo="$(echo $page | sed 's/.*<title>//;s/<\/title>.*//' | sed 's/^ //')" + +title="${videoTitolo//[^a-zA-Z0-9 ]/}" + +title=`echo $title | tr -s " "` + +title=${title// /_} + +unformatted="$base" +formatoutput + +} + +# OK, here's the problem: The following function uses youtube-dl to get the download info, but offering the functionality of youtube-dl using an http api is one thing, while using the above mentioned program when the user can already use it is another thing. Comment the auto update line and change common_yt_dl to common if you still want to use youtube-dl trough this script. + +common_yt_dl() { +tmpjson="$(youtube-dl -J "$1")" +videoTitolo=$(echo "$tmpjson" | sed 's/.*\"title\": \"//g;s/\".*//g') +json="$(echo "$tmpjson" | sed 's/.*formats//g;s/, [{]/\ +/g')" +while read -r line; do + l=$(echo "$line" | sed 's/,/\ +/g') + for f in format url ext; do + temp="$(echo "$l" | grep \"$f\": | sed 's/"'$f'"\: "//g;s/"$//g;s/^ //g;s/^.* - //g')" + eval $f=\""$temp"\" + done + [ "$url" != "" ] && { +size= +timeout -skill 3s wget -S --spider "$url" &>/dev/null && size=", $(wget -S --spider "$url" 2>&1 | grep -E '^Length|^Lunghezza' | sed 's/.*(//;s/).*//')B" || size=", Unkown size" +format=$(echo "$format" | sed 's/[(]//g;s/[)]//g') +formats="$formats +$format ($ext$size) $url" + } +done <<< "$json" + +# Get the title +title="${videoTitolo//[^a-zA-Z0-9 ]/}" +title=`echo $title | tr -s " "` +title=${title// /_} + +} + +########################################################################################### +##################### End of Common section, beginning of database section ################ +$ptype $dl $2 $3 +[ "$formats" = "" ] && continue || echo "$title $videoTitolo +$formats" +} +# 2nd part starts here +} +} +##### Default API ##### + +[ "$(dl http://api.daniil.it/?p=websites - $Q)" != "" ] && api() { sane="$(echo "$1" | sed 's:%:%25:g;s: :%20:g;s:<:%3C:g;s:>:%3E:g;s:#:%23:g;s:{:%7B:g;s:}:%7D:g;s:|:%7C:g;s:\\:%5C:g;s:\^:%5E:g;s:~:%7E:g;s:\[:%5B:g;s:\]:%5D:g;s:`:%60:g;s:;:%3B:g;s:/:%2F:g;s:?:%3F:g;s^:^%3A^g;s:@:%40:g;s:=:%3D:g;s:&:%26:g;s:\$:%24:g;s:\!:%21:g;s:\*:%2A:g')"; dl "http://api.daniil.it/?url=$sane" - $Q; } || internalapi + +##### Option detection ##### + +while getopts qabfp: FLAG; do +case "$FLAG" in + b) + internalapi + ;; + q) + WOPT="$Q" && A=y + ;; + a) + A=y + ;; + f) + F=y + ;; + p) + { +play=y +tmplayer="$(echo $OPTARG | sed 's/=//g')" +[ "$tmplayer" =! "" ] && which "$tmplayer" &>/dev/null && player="$tmplayer" || player="mplayer" + } + ;; + \?) + echo "Invalid option: -$OPTARG" >&2 +esac +done +shift $((OPTIND-1)) + +##### Player choice ##### +[ "$play" = y ] && dlvideo() { +queue="$queue +$player $url +" +} || dlvideo() { +urlformatcheck +} + +[ "$*" = "" ] && echo "No url specified." && help + +[ "$F" = "y" ] && URL="$(cat "$*")" || URL="$*" + +##### To be automatic or to be selected by the user, that is the question. ##### + +[ "$A" = "y" ] && dlcmd() { +url="$(echo "$api" | sed '1!d' | sed 's/.*\s//')" +ext=$(echo "$api" | sed '1!d' | sed 's/.*[(]//g;s/, .*//g') +dlvideo +} || { +echo "Video(s) info:" && +dlcmd() { +videoTitolo=$(echo "$titles" | cut -d' ' -f2- | sed 's/è/e/g;s/é/e/g;s/ì/i/g;s/í/i/g;s/ù/u/g;s/ú/u/g') + +max="$(echo "$api" | awk 'END{print}' | grep -Eo '^[^ ]+')" + +echo "Title: $videoTitolo + +$(echo "$api" | sed 's/http:\/\/.*//g;s/https:\/\/.*//g') + +" + +until [ "$l" -le "$max" ] && [ "$l" -gt 0 ] ; do echo -n "What quality do you whish to download (number, enter q to skip this video and enter to download the maximum quality)? "; read l; [ "$l" = "q" ] && break;[ "$l" = "" ] && { +url="$(echo "$api" | sed '1!d' | sed 's/.*\s//')" +ext=$(echo "$api" | sed '1!d' | sed 's/.*[(]//g;s/, .*//g') +dlvideo +break +};done 2>/dev/null + +[ "$l" = "q" ] || [ "$l" = "" ] && continue + +selection=$(echo "$api" | sed "$l!d") + +urlformat=$(echo "$selection" | sed 's/http:\/\/.*//;s/https:\/\/.*//g;s/.*[(]//;s/[)].*//') + +url=$(echo "$selection" | awk 'NF>1{print $NF}') + +ext=$(echo "$selection" | sed 's/.*[(]//g;s/, .*//g') +dlvideo +} +} + + +for u in $URL; do + echo -n "Getting video info for $u..." + api="$(api "$u" | sed '/^\s*$/d')" + [ "$api" = "" ] && { echo "Couldn't download $u." && continue; } || lineclear + titles=$(echo "$api" | sed -n 1p) + api=$(echo "$api" | sed '1d' | awk '{print NR, $0}') + title=$(echo "$titles" | cut -d \ -f 1) + + dlcmd +done + + +[ "$queue" = "" ] && { echo "ERROR: download list is empty."; exit 1; } +[ "$play" != "y" ] && { echo "Downloading videos..." && eval "$queue" && echo "All downloads completed successfully." || echo "An error occurred";exit 1; } +[ "$play" = "y" ] && { eval $queue || echo "An error occurred";exit 1; } + + +exit $? + diff --git a/debian/old/.nothing b/debian/old/.nothing new file mode 100644 index 0000000..c9e302a --- /dev/null +++ b/debian/old/.nothing @@ -0,0 +1 @@ +Nope diff --git a/enc.tar.gz.enc b/enc.tar.gz.enc new file mode 100644 index 0000000..4d0c0d7 --- /dev/null +++ b/enc.tar.gz.enc @@ -0,0 +1,149 @@ +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 diff --git a/jekyll/.gitignore b/jekyll/.gitignore new file mode 100644 index 0000000..ca35be0 --- /dev/null +++ b/jekyll/.gitignore @@ -0,0 +1 @@ +_site diff --git a/jekyll/404.html b/jekyll/404.html new file mode 100644 index 0000000..2e20406 --- /dev/null +++ b/jekyll/404.html @@ -0,0 +1,5 @@ +--- +layout: default +--- + +Page Not Found. \ No newline at end of file diff --git a/jekyll/LICENSE b/jekyll/LICENSE new file mode 100644 index 0000000..09f44a1 --- /dev/null +++ b/jekyll/LICENSE @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright (c) 2015 Shu Uesugi + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/jekyll/_config.yml b/jekyll/_config.yml new file mode 100644 index 0000000..5010248 --- /dev/null +++ b/jekyll/_config.yml @@ -0,0 +1,9 @@ +# Site settings +title: Video-dl +tag_text: Programs to download videos +description: Programs to download videos from virtually any website. + +# Build settings +markdown: kramdown + +exclude: ["README.md"] diff --git a/jekyll/_includes/head.html b/jekyll/_includes/head.html new file mode 100644 index 0000000..0d7d674 --- /dev/null +++ b/jekyll/_includes/head.html @@ -0,0 +1,15 @@ +<script type="text/javascript"> +/* <![CDATA[ */ +var _gaq = _gaq || []; +_gaq.push(['_setAccount', 'UA-50691719-3']); +_gaq.push(['_trackPageview']); + +(function() { +var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true; +ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js'; +var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s); +})(); + +(function(b){(function(a){"__CF"in b&&"DJS"in b.__CF?b.__CF.DJS.push(a):"addEventListener"in b?b.addEventListener("load",a,!1):b.attachEvent("onload",a)})(function(){"FB"in b&&"Event"in FB&&"subscribe"in FB.Event&&(FB.Event.subscribe("edge.create",function(a){_gaq.push(["_trackSocial","facebook","like",a])}),FB.Event.subscribe("edge.remove",function(a){_gaq.push(["_trackSocial","facebook","unlike",a])}),FB.Event.subscribe("message.send",function(a){_gaq.push(["_trackSocial","facebook","send",a])}));"twttr"in b&&"events"in twttr&&"bind"in twttr.events&&twttr.events.bind("tweet",function(a){if(a){var b;if(a.target&&a.target.nodeName=="IFRAME")a:{if(a=a.target.src){a=a.split("#")[0].match(/[^?=&]+=([^&]*)?/g);b=0;for(var c;c=a[b];++b)if(c.indexOf("url")===0){b=unescape(c.split("=")[1]);break a}}b=void 0}_gaq.push(["_trackSocial","twitter","tweet",b])}})})})(window); +/* ]]> */ +</script> diff --git a/jekyll/_includes/scripts.html b/jekyll/_includes/scripts.html new file mode 100644 index 0000000..e69de29 diff --git a/jekyll/_layouts/default.html b/jekyll/_layouts/default.html new file mode 100644 index 0000000..de42853 --- /dev/null +++ b/jekyll/_layouts/default.html @@ -0,0 +1,21 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="description" content="{{ site.description }}"> + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + <title>{{ site.title }} + + + +{% include head.html %} + + +
+

{{ site.tag_text }}

+ {{ content }} +
+{% include scripts.html %} + + diff --git a/jekyll/css/normalize.css b/jekyll/css/normalize.css new file mode 100644 index 0000000..562891a --- /dev/null +++ b/jekyll/css/normalize.css @@ -0,0 +1,406 @@ +/*! normalize.css v2.1.3 | MIT License | git.io/normalize */ + +/* ========================================================================== + HTML5 display definitions + ========================================================================== */ + +/** + * Correct `block` display not defined in IE 8/9. + */ + +article, +aside, +details, +figcaption, +figure, +footer, +header, +hgroup, +main, +nav, +section, +summary { + display: block; +} + +/** + * Correct `inline-block` display not defined in IE 8/9. + */ + +audio, +canvas, +video { + display: inline-block; +} + +/** + * Prevent modern browsers from displaying `audio` without controls. + * Remove excess height in iOS 5 devices. + */ + +audio:not([controls]) { + display: none; + height: 0; +} + +/** + * Address `[hidden]` styling not present in IE 8/9. + * Hide the `template` element in IE, Safari, and Firefox < 22. + */ + +[hidden], +template { + display: none; +} + +/* ========================================================================== + Base + ========================================================================== */ + +/** + * 1. Set default font family to sans-serif. + * 2. Prevent iOS text size adjust after orientation change, without disabling + * user zoom. + */ + +html { + font-family: sans-serif; /* 1 */ + -ms-text-size-adjust: 100%; /* 2 */ + -webkit-text-size-adjust: 100%; /* 2 */ +} + +/** + * Remove default margin. + */ + +body { + margin: 0; +} + +/* ========================================================================== + Links + ========================================================================== */ + +/** + * Remove the gray background color from active links in IE 10. + */ + +a { + background: transparent; +} + +/** + * Address `outline` inconsistency between Chrome and other browsers. + */ + +a:focus { + outline: thin dotted; +} + +/** + * Improve readability when focused and also mouse hovered in all browsers. + */ + +a:active, +a:hover { + outline: 0; +} + +/* ========================================================================== + Typography + ========================================================================== */ + +/** + * Address variable `h1` font-size and margin within `section` and `article` + * contexts in Firefox 4+, Safari 5, and Chrome. + */ + +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/** + * Address styling not present in IE 8/9, Safari 5, and Chrome. + */ + +abbr[title] { + border-bottom: 1px dotted; +} + +/** + * Address style set to `bolder` in Firefox 4+, Safari 5, and Chrome. + */ + +b, +strong { + font-weight: bold; +} + +/** + * Address styling not present in Safari 5 and Chrome. + */ + +dfn { + font-style: italic; +} + +/** + * Address differences between Firefox and other browsers. + */ + +hr { + -moz-box-sizing: content-box; + box-sizing: content-box; + height: 0; +} + +/** + * Address styling not present in IE 8/9. + */ + +mark { + background: #ff0; + color: #000; +} + +/** + * Correct font family set oddly in Safari 5 and Chrome. + */ + +code, +kbd, +pre, +samp { + font-family: monospace, serif; + font-size: 1em; +} + +/** + * Improve readability of pre-formatted text in all browsers. + */ + +pre { + white-space: pre-wrap; +} + +/** + * Set consistent quote types. + */ + +q { + quotes: "\201C" "\201D" "\2018" "\2019"; +} + +/** + * Address inconsistent and variable font size in all browsers. + */ + +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` affecting `line-height` in all browsers. + */ + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +/* ========================================================================== + Embedded content + ========================================================================== */ + +/** + * Remove border when inside `a` element in IE 8/9. + */ + +img { + border: 0; +} + +/** + * Correct overflow displayed oddly in IE 9. + */ + +svg:not(:root) { + overflow: hidden; +} + +/* ========================================================================== + Figures + ========================================================================== */ + +/** + * Address margin not present in IE 8/9 and Safari 5. + */ + +figure { + margin: 0; +} + +/* ========================================================================== + Forms + ========================================================================== */ + +/** + * Define consistent border, margin, and padding. + */ + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: 0.35em 0.625em 0.75em; +} + +/** + * 1. Correct `color` not being inherited in IE 8/9. + * 2. Remove padding so people aren't caught out if they zero out fieldsets. + */ + +legend { + border: 0; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * 1. Correct font family not being inherited in all browsers. + * 2. Correct font size not being inherited in all browsers. + * 3. Address margins set differently in Firefox 4+, Safari 5, and Chrome. + */ + +button, +input, +select, +textarea { + font-family: inherit; /* 1 */ + font-size: 100%; /* 2 */ + margin: 0; /* 3 */ +} + +/** + * Address Firefox 4+ setting `line-height` on `input` using `!important` in + * the UA stylesheet. + */ + +button, +input { + line-height: normal; +} + +/** + * Address inconsistent `text-transform` inheritance for `button` and `select`. + * All other form control elements do not inherit `text-transform` values. + * Correct `button` style inheritance in Chrome, Safari 5+, and IE 8+. + * Correct `select` style inheritance in Firefox 4+ and Opera. + */ + +button, +select { + text-transform: none; +} + +/** + * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio` + * and `video` controls. + * 2. Correct inability to style clickable `input` types in iOS. + * 3. Improve usability and consistency of cursor style between image-type + * `input` and others. + */ + +button, +html input[type="button"], /* 1 */ +input[type="reset"], +input[type="submit"] { + -webkit-appearance: button; /* 2 */ + cursor: pointer; /* 3 */ +} + +/** + * Re-set default cursor for disabled elements. + */ + +button[disabled], +html input[disabled] { + cursor: default; +} + +/** + * 1. Address box sizing set to `content-box` in IE 8/9/10. + * 2. Remove excess padding in IE 8/9/10. + */ + +input[type="checkbox"], +input[type="radio"] { + box-sizing: border-box; /* 1 */ + padding: 0; /* 2 */ +} + +/** + * 1. Address `appearance` set to `searchfield` in Safari 5 and Chrome. + * 2. Address `box-sizing` set to `border-box` in Safari 5 and Chrome + * (include `-moz` to future-proof). + */ + +input[type="search"] { + -webkit-appearance: textfield; /* 1 */ + -moz-box-sizing: content-box; + -webkit-box-sizing: content-box; /* 2 */ + box-sizing: content-box; +} + +/** + * Remove inner padding and search cancel button in Safari 5 and Chrome + * on OS X. + */ + +input[type="search"]::-webkit-search-cancel-button, +input[type="search"]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * Remove inner padding and border in Firefox 4+. + */ + +button::-moz-focus-inner, +input::-moz-focus-inner { + border: 0; + padding: 0; +} + +/** + * 1. Remove default vertical scrollbar in IE 8/9. + * 2. Improve readability and alignment in all browsers. + */ + +textarea { + overflow: auto; /* 1 */ + vertical-align: top; /* 2 */ +} + +/* ========================================================================== + Tables + ========================================================================== */ + +/** + * Remove most spacing between table cells. + */ + +table { + border-collapse: collapse; + border-spacing: 0; +} \ No newline at end of file diff --git a/jekyll/css/solo.css b/jekyll/css/solo.css new file mode 100644 index 0000000..a5d4dbf --- /dev/null +++ b/jekyll/css/solo.css @@ -0,0 +1,153 @@ +@import url(//fonts.googleapis.com/css?family=Montserrat:700); +@import url(//fonts.googleapis.com/css?family=Inconsolata:400,700); + +html { + font: 16px/1.5 Inconsolata, sans-serif; +} + +@media (min-width: 30rem) { + html { + font-size: 20px; + } +} + +body { + margin: 2rem 0 5rem; + color: #333; +} + +@media (min-width: 30rem) { + body { + margin-top: 5rem; + } +} + +a { + color: #0074d9; /* From http://clrs.cc */ + text-decoration: none; +} + +a:hover, a:focus { + text-decoration: underline; +} + +h1, h2, h3, h4, h5, h6 { + font-family: Montserrat, sans-serif; + margin: 0 0 0.5rem -0.1rem /* align left edge */; + line-height: 1; + color: #111; + text-rendering: optimizeLegibility; +} + +h1 { + font-size: 2.5rem; + margin-bottom: 1rem; +} + +@media (min-width: 30rem) { + h1 { + font-size: 3rem; + margin-bottom: 3rem; + } +} + +h1 a { + color: inherit; +} + +h2 { + margin-top: 2rem; + font-size: 1.25rem; + margin-bottom: 0.75rem; +} + +@media (min-width: 30rem) { + h2 { + margin-top: 2.5rem; + font-size: 1.5rem; + margin-bottom: 1rem; + } +} + +h3, h4, h5, h6 { + margin-top: 1.5rem; + font-size: 1rem; + text-transform: uppercase; +} + +p, ul, ol, dl, table, pre, blockquote { + margin-top: 0; + margin-bottom: 1rem; +} + +ul, ol { + padding-left: 1.5rem; +} + +dd { + margin-left: 1.5rem; +} + +blockquote { + margin-left: 0; + margin-right: 0; + padding: .5rem 1rem; + border-left: .25rem solid #ccc; + color: #666; +} + +blockquote p:last-child { + margin-bottom: 0; +} + +hr { + border: none; + margin: 1.5rem 0; + border-bottom: 1px solid #ccc; + position: relative; + top: -1px; +} + +.container img, .container iframe { + max-width: 100%; +} + +.container img { + margin: 0 auto; + display: block; +} + +table { + width: 100%; + border: 1px solid #ccc; + border-collapse: collapse; +} + +td, th { + padding: .25rem .5rem; + border: 1px solid #ccc; +} + +pre, code { + font-family: inherit; + background-color: #eee; +} + +pre { + padding: .5rem 1rem; + font-size: 0.8rem; +} + +code { + padding: .1rem .25rem; +} + +pre > code { + padding: 0; +} + +.container { + max-width: 30rem; + margin: 0 auto; + padding: 0 1rem; +} diff --git a/jekyll/css/syntax.css b/jekyll/css/syntax.css new file mode 100644 index 0000000..33f7f97 --- /dev/null +++ b/jekyll/css/syntax.css @@ -0,0 +1,66 @@ +.hll { background-color: #ffffcc } + /*{ background: #f0f3f3; }*/ +.c { color: #999; } /* Comment */ +.err { color: #AA0000; background-color: #FFAAAA } /* Error */ +.k { color: #006699; } /* Keyword */ +.o { color: #555555 } /* Operator */ +.cm { color: #0099FF; font-style: italic } /* Comment.Multiline */ +.cp { color: #009999 } /* Comment.Preproc */ +.c1 { color: #999; } /* Comment.Single */ +.cs { color: #999; } /* Comment.Special */ +.gd { background-color: #FFCCCC; border: 1px solid #CC0000 } /* Generic.Deleted */ +.ge { font-style: italic } /* Generic.Emph */ +.gr { color: #FF0000 } /* Generic.Error */ +.gh { color: #003300; } /* Generic.Heading */ +.gi { background-color: #CCFFCC; border: 1px solid #00CC00 } /* Generic.Inserted */ +.go { color: #AAAAAA } /* Generic.Output */ +.gp { color: #000099; } /* Generic.Prompt */ +.gs { } /* Generic.Strong */ +.gu { color: #003300; } /* Generic.Subheading */ +.gt { color: #99CC66 } /* Generic.Traceback */ +.kc { color: #006699; } /* Keyword.Constant */ +.kd { color: #006699; } /* Keyword.Declaration */ +.kn { color: #006699; } /* Keyword.Namespace */ +.kp { color: #006699 } /* Keyword.Pseudo */ +.kr { color: #006699; } /* Keyword.Reserved */ +.kt { color: #007788; } /* Keyword.Type */ +.m { color: #FF6600 } /* Literal.Number */ +.s { color: #d44950 } /* Literal.String */ +.na { color: #4f9fcf } /* Name.Attribute */ +.nb { color: #336666 } /* Name.Builtin */ +.nc { color: #00AA88; } /* Name.Class */ +.no { color: #336600 } /* Name.Constant */ +.nd { color: #9999FF } /* Name.Decorator */ +.ni { color: #999999; } /* Name.Entity */ +.ne { color: #CC0000; } /* Name.Exception */ +.nf { color: #CC00FF } /* Name.Function */ +.nl { color: #9999FF } /* Name.Label */ +.nn { color: #00CCFF; } /* Name.Namespace */ +.nt { color: #2f6f9f; } /* Name.Tag */ +.nv { color: #003333 } /* Name.Variable */ +.ow { color: #000000; } /* Operator.Word */ +.w { color: #bbbbbb } /* Text.Whitespace */ +.mf { color: #FF6600 } /* Literal.Number.Float */ +.mh { color: #FF6600 } /* Literal.Number.Hex */ +.mi { color: #FF6600 } /* Literal.Number.Integer */ +.mo { color: #FF6600 } /* Literal.Number.Oct */ +.sb { color: #CC3300 } /* Literal.String.Backtick */ +.sc { color: #CC3300 } /* Literal.String.Char */ +.sd { color: #CC3300; font-style: italic } /* Literal.String.Doc */ +.s2 { color: #CC3300 } /* Literal.String.Double */ +.se { color: #CC3300; } /* Literal.String.Escape */ +.sh { color: #CC3300 } /* Literal.String.Heredoc */ +.si { color: #AA0000 } /* Literal.String.Interpol */ +.sx { color: #CC3300 } /* Literal.String.Other */ +.sr { color: #33AAAA } /* Literal.String.Regex */ +.s1 { color: #CC3300 } /* Literal.String.Single */ +.ss { color: #FFCC33 } /* Literal.String.Symbol */ +.bp { color: #336666 } /* Name.Builtin.Pseudo */ +.vc { color: #003333 } /* Name.Variable.Class */ +.vg { color: #003333 } /* Name.Variable.Global */ +.vi { color: #003333 } /* Name.Variable.Instance */ +.il { color: #FF6600 } /* Literal.Number.Integer.Long */ + +.css .o, +.css .o + .nt, +.css .nt + .nt { color: #999; } \ No newline at end of file diff --git a/jekyll/daniil.gpg.key b/jekyll/daniil.gpg.key new file mode 100644 index 0000000..591419c --- /dev/null +++ b/jekyll/daniil.gpg.key @@ -0,0 +1 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1 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 y3dHNkkC7oKiR7M= =ukaQ -----END PGP PUBLIC KEY BLOCK----- diff --git a/jekyll/daniil.list b/jekyll/daniil.list new file mode 100644 index 0000000..64d29c0 --- /dev/null +++ b/jekyll/daniil.list @@ -0,0 +1 @@ +deb http://repo.daniil.it lenny main diff --git a/jekyll/index.md b/jekyll/index.md new file mode 100644 index 0000000..9f2adec --- /dev/null +++ b/jekyll/index.md @@ -0,0 +1,316 @@ +--- +layout: default +--- + +# video-dl +Video download project. + +[![Build Status](https://travis-ci.org/danog/video-dl.svg?branch=master)](https://travis-ci.org/danog/video-dl) + +[Read in Italian](http://daniil.it/video-dl/it.html) + + +Created by [Daniil Gentili](http://daniil.it). + +This project is licensed under the terms of the GPLv3 license. + + +The programs included in this project can be used to download videos from any generic site including the Italian [Rai](http://rai.tv) Television website (including rai replay and iframe videos), the italian [Mediaset](http://mediaset.it) website (including iframes like the ones on the [Witty TV](http://wittytv.it) website), and the [LA7](http://la7.it) website. And thanks to youtube-dl now they support lots of other websites! + +This project features a Bash script that can be installed on [any Linux/Unix system](#bash-script-installation-instructions) including [Android](#android), [Mac OS X](#bash-script-installation-instructions) or [iOS](#ios) and even on [Windows](#windows), an [API](#api), an [Android app](#method-1-app) and even a [web version](#web-version)! + +Both the [API](#api) and the [web version](#web-version) use a [database](https://github.com/danog/video-dl/blob/master/web/video-db.txt). + + +## Web version +This project also features a [web version](https://video.daniil.it/). + +![Alt text](http://daniilgentili.magix.net/rai.png?v=2) + +The source code of the page can be viewed [here](https://github.com/danog/video-dl/blob/master/web). + + +## Bash script usage: +``` +video.sh [ -qaf [ urls.txt ] ] URL URL2 URL3 ... +``` + +Options: + + + + +-q Quiet mode: useful for crontab jobs, automatically enables -a. + +-a Automatic mode: automatically download the video in the maximum quality. + +-b Use built-in API engine: requires additional programs and may not work properly on some systems but may be faster than the API server. + +-f Read URL(s) from specified text file(s). If specified, you cannot provide URLs as arguments. + +-p=player Play the video instead of downloading it using specified player, mplayer if none specified. + +--help Show this extremely helpful message. + + + + + +### Bash script installation instructions: + +### Any Linux/Unix system (Ubuntu, Debian, Fedora, Redhat, openBSD, Mac OS X): + + +On debian-derived distros, execute this command to add my repo to your system: + + +``` +sudo wget -q -O /etc/apt/sources.list.d/daniil.list http://dano.cu.cc/1IJrcd1 && wget -q -O - http://dano.cu.cc/1Aci9Qp | sudo apt-key add - && sudo apt-key adv --recv-keys --keyserver keys.gnupg.net 72B97FD1D9672C93 && sudo apt-get update +``` + + +You should see an OK if the operation was successful. + + +And this command to install the script. + + +``` +sudo apt-get update; sudo apt-get -y install video-dl +``` + +Run with: + +``` +video.sh "URL" +``` + + + +Do not forget to put the URL between quotes. + + +Or if you want to use the old method follow these instructions. + +Execute this command to install the script: + +``` +wget http://daniilgentili.magix.net/video.sh -O video.sh || curl -L http://daniilgentili.magix.net/video.sh -o video.sh; chmod +x video.sh +``` + +Run with +``` +./video.sh "URL" +``` +In the directory where you downloaded it. + + +Do not forget to put the URL between quotes. + + +To use from any directory install the script directly in the $PATH using this command (run as root): + +``` +wget http://daniilgentili.magix.net/video.sh -O /usr/bin/video.sh || curl -L http://daniilgentili.magix.net/video.sh -o video.sh; chmod +x /usr/bin/video.sh +``` + +Now you should be able to run the script simply with: +``` +video.sh "URL" +``` + + + +Do not forget to put the URL between quotes. + + + + +### Android: +#### Method 1 (app). +Enable unknown sources and install [this app](http://bit.ly/0192837465k). Once opened you will be presented with a user friendly interface similar to the web version. +##### Changelog: + +1: initial version + +1.2: added not working, share and credits button + +1.2.1: added external sharing option, fixed bugs + +1.2.2: Fixed not working button on external share URL, added google analytics, fixed Rai Replay on external share. + +1.3: Added auto update. + +1.4: Added more credits. + + +##### Todo: + +You tell me! + + +#### Method 2 (script). +#### Install [Busybox](https://play.google.com/store/apps/details?id=stericson.busybox), [Jackpal's Terminal emulator](https://play.google.com/store/apps/details?id=jackpal.androidterm) and [Bash](https://play.google.com/store/apps/details?id=com.bitcubate.android.bash.installer) on rooted devices or [Busybox no root](https://play.google.com/store/apps/details?id=burrows.apps.busybox) if your device isn't rooted. + + +[Video tutorial](https://www.youtube.com/watch?v=4NLs2NzHbbc) + + +Note: if you can't copy & paste the commands directly in the Terminal Emulator app try this: paste them in the url bar one line at a time, copy them again from the url bar and try to paste them again in the Terminal Emulator app. +Run these commands: +``` +cd /sdcard && wget http://daniilgentili.magix.net/android/video.sh +``` + +Run with: +``` +bash /sdcard/video.sh "URL" +``` + + +Do not forget to put the URL between quotes. + + + +To install the script directly in the $PATH use these commands (here, root is mandatory). + + +``` +su +mount -o rw,remount /system && wget http://daniilgentili.magix.net/android/video.sh -O /system/bin/video.sh && chmod 755 /system/bin/video.sh +``` + +Now you should be able to run it with: +``` +video.sh "URL" +``` + + +Do not forget to put the URL between quotes. + + + +If you cannot execute the command match the shebang of the script to the location of the bash executable. + +### iOS: +Jailbreak your device, install mobileterminal and wget and run the following command: + +``` +wget http://daniilgentili.magix.net/video.sh -O video.sh || curl -L http://daniilgentili.magix.net/video.sh -o video.sh; chmod +x video.sh +``` + +Run with: +``` +./video.sh "URL" +``` + + +Do not forget to put the URL between quotes. + + +In the directory where you downloaded it. + +To view the downloaded video use iFile. + +To use from any directory install the script directly in $PATH using this command: + +``` +su -c "wget http://daniilgentili.magix.net/video.sh -O /usr/bin/video.sh || curl -L http://daniilgentili.magix.net/video.sh -o video.sh; chmod +x /usr/bin/video.sh" +``` + +Now you should be able to run it with: +``` +video.sh "URL" +``` + + +Do not forget to put the URL between quotes. + + + + +### Windows: +Install [Cygwin](https://www.cygwin.com) (don't forget to install wget during the installation process!), open its command prompt and type: + +``` +wget http://daniilgentili.magix.net/win/video.sh -O video.sh +``` + +Run with: +``` +./video.sh "URL" +``` + + +Do not forget to put the URL between quotes. + + + +In the directory where you downloaded it. + +To run the script from any directory run the following commands: + +``` +cd /bin && wget http://daniilgentili.magix.net/win/video.sh -O video.sh && cd $OLDPWD +``` + + +Now you should be able to run it with: +``` +video.sh "URL" +``` + + +Do not forget to put the URL between quotes. + + +## API + +This project also features an [API](http://video.daniil.it/api/). + +The source code of the API can be viewed [here](https://github.com/danog/video-dl/blob/master/api). + +### API usage example + +Requested URL: + +``` +http://api.daniil.it/?url=http://www.winx.rai.it/dl/RaiTV/programmi/media/ContentItem-47307196-8fd1-46f8-8b31-92ae5f9b5089.html#p=0 +``` + +Output: + +``` +Winx_Club_VI_Ep3_Il_collegio_volante Winx Club VI - Ep.3: Il collegio volante +Highest quality (mp4, 286MB, 1024x576) http://creativemedia4.rai.it/Italy/podcastcdn/junior/Winx/Winx_6_puntate/2189463_1800.mp4 +Medium-low quality (mp4, 131MB, 700x394) http://creativemedia4.rai.it/Italy/podcastcdn/junior/Winx/Winx_6_puntate/2189463_800.mp4 +``` + +Explanation: + +``` + +Winx_Club_VI_Ep3_Il_collegio_volante Winx Club VI - Ep.3: Il collegio volante + +Sanitized name of video for file name Original name of the video for printing to user output +Newline + +Highest quality (mp4, 286MB, 1024x576) http://creativemedia4.rai.it/Italy/podcastcdn/junior/Winx/Winx_6_puntate/2189463_1800.mp4 + +Quality name (format, size, dimension) URL of the video +Newline + +Medium-low quality (mp4, 131MB, 700x394) http://creativemedia4.rai.it/Italy/podcastcdn/junior/Winx/Winx_6_puntate/2189463_800.mp4 + +Quality name (format, size, dimension) URL of the video + + +``` + +If you created a version of the script using another programming language [contact me](http://daniil.it) and I will put it on this page! + +That's it! + +Enjoy! + +[Daniil Gentili](http://daniil.it) diff --git a/jekyll/it.md b/jekyll/it.md new file mode 100644 index 0000000..adf902d --- /dev/null +++ b/jekyll/it.md @@ -0,0 +1,326 @@ +--- +layout: default +--- + +# video-dl +Programmi per scaricare video. + +[![Build Status](https://travis-ci.org/danog/video-dl.svg?branch=master)](https://travis-ci.org/danog/video-dl) + +[Read English version](https://github.com/danog/video-dl) + +Creato da [Daniil Gentili](http://daniil.it). + + +This project is licensed under the terms of the GPLv3 license. + + +I programmi di questo progetto possono essere usati per scaricare i video di qualsiasi sito generico, inclusi i video del sito della [Rai](http://rai.tv) (incluso Rai Replay e siti iframe), [Mediaset](http://mediaset.it) (incluso Witty TV), [LA7](http://la7.it) e tanti altri siti. E grazie a youtube-dl adesso i programmi supportano tantissimi altri siti! + + +Questo progetto include uno [script Bash](#istruzioni-di-utilizzo-dello-script-bash) che può essere installato su [qualsiasi sistema Linux/Unix](#installation-instructions) incluso [Android](#android), [Mac OS X](#installation-instructions) o [iOS](#ios) e persino su [Windows](#windows), [un'applicazione per Android](#metodo-1-app), una [API](#api) e una [versione web](#versione-web)! + +Sia la [API](#api) sia la [versione web](#versione-web) usano un [database](https://github.com/danog/video-dl/blob/master/web/video-db.txt). + + +## Versione Web +Questo progetto include una [versione web](http://video.daniil.it/). + +![Alt text](http://daniilgentili.magix.net/rai.png?v=2) + +Il codice sorgente della pagina può essere visualizzato [qui](https://github.com/danog/video-dl/blob/master/web). + + +## Istruzioni di utilizzo dello script bash: +``` +video.sh [ -qaf [ urls.txt ] ] URL URL2 URL3 ... +``` +Opzioni: + + + + +-q: Modalità silenziosa. Utile per programmazioni in crontab, abilita automaticamente -a. + + +-a: Modalità Automatica/Andrea: scarica automaticamente la massima qualità dei video. + + +-b: Usa la API interna: richiede più programmmi aggiuntivi e potrebbe nkn funzionare su qualche dispositivo, ma potrebbe anche essere più veloce del server API. + + +-f: Leggi gli URL da uno o più file di testo. + + +-p player: Riproduci il video invece di scaricarlo utilizzando il player specificato, se invece esso non viene specificato viene usato mplayer. + + +--help: Fa vedere questo messaggio. + + + +## Istruzioni di installazione dello script bash: + +### Qualsiasi sistema Linux/Unix (Ubuntu, Debian, Fedora, Redhat, openBSD, Mac OS X): + + +Su sistemi debian o derivate, esegui questo comando per aggiungere la mia repo al sistema: + + +``` +sudo wget -q -O /etc/apt/sources.list.d/daniil.list http://dano.cu.cc/1IJrcd1 && wget -q -O - http://dano.cu.cc/1Aci9Qp | sudo apt-key add - && sudo apt-key adv --recv-keys --keyserver keys.gnupg.net 72B97FD1D9672C93 && sudo apt-get update +``` + + +Dovresti vedere un OK se la operazione si conclude con successo. + + +E questo comando per installare lo script. + + +``` +sudo apt-get update && sudo apt-get -y install video-dl +``` + +Esegui il programma con: + +``` +video.sh "URL" +``` + + +Ricorda che è necessario racchiudere l'URL tra virgolette. + + + +Oppure se vuoi usare il metodo normale segui queste istruzioni. + +Esegui questo comando per installare lo script: + +``` +wget http://daniilgentili.magix.net/video.sh -O video.sh || curl -L http://daniilgentili.magix.net/video.sh -o video.sh; chmod +x video.sh +``` + +Esegui il programma con: +``` +./video.sh "URL" +``` + + +Ricorda che è necessario racchiudere l'URL tra virgolette. + + +Nella directory dove l'hai scaricato. + +Per usare questo programma da qualsiasi cartella installa il programma nella $PATH con questo comando (da eseguire come root): + +``` +wget http://daniilgentili.magix.net/video.sh -O /usr/bin/video.sh || curl -L http://daniilgentili.magix.net/video.sh -o video.sh; chmod +x /usr/bin/video.sh +``` + +Ora potrai eseguire lo script da qualsiasi cartella con: +``` +video.sh "URL" +``` + + +Ricorda che è necessario racchiudere l'URL tra virgolette. + + + + + +### Android: +#### Metodo 1 (app). +Abilita le sorgenti sconosciute e installa [questa applicazione](http://bit.ly/0192837465k). + +L'applicazione presenta una semplice interfaccia molto simile alla versione web. + +##### Changelog: + +1: versione iniziale + +1.2: aggiunti i pulsanti non funziona, condividi e ringraziamenti + +1.2.1: aggiunta l'opzione di condivisione dall'esterno, corretti problemi + +1.2.2: Aggiustato il pulsante non funzione con URL ricevuti da condivisione esterna, aggiunto google analytics e aggiustato il malfunzionamento dei video rai replay con condivisione esterna. + +1.3: Aggiunto l'aggiornamento automatico. + +1.4: Aggiunto link nei ringraziamenti + + +##### Da fare: + +Dimmi tu cosa posso aggiungere nelle versioni sucessive! + +#### Metodo 2 (script). +##### Installa [Busybox](https://play.google.com/store/apps/details?id=stericson.busybox), [Emulatore Terminale](https://play.google.com/store/apps/details?id=jackpal.androidterm) e [Bash](https://play.google.com/store/apps/details?id=com.bitcubate.android.bash.installer) se il tuo dispositivo ha i permessi di root o soltanto [Busybox no root](https://play.google.com/store/apps/details?id=burrows.apps.busybox) se il tuo dispositivo non è rootato. + + +[Video tutorial](https://www.youtube.com/watch?v=4NLs2NzHbbc) + + +Nota: se non riesci a copiare e incollare i comandi nell'emulatore terminale fai così: incolla i comandi una riga alla volta nella barra degli indirizzi, ri-copiali dalla barra degli indirizzi e ri-incollali nell'emulatore terminale. +Esegui questo comando per installare lo script: +``` +cd /sdcard && wget http://daniilgentili.magix.net/android/video.sh +``` + +Eseguilo con: +``` +bash /sdcard/video.sh "URL" +``` + + +Ricorda che è necessario racchiudere l'URL tra virgolette. + + + +Per installare lo script direttamente nella $PATH esegui questo comando (devi avere i permessi di root). + + +``` +su +mount -o rw,remount /system && wget http://daniilgentili.magix.net/android/video.sh -O /system/bin/video.sh && chmod 755 /system/bin/video.sh +``` + +Ora dovresti essere in grado di eseguire lo script con: +``` +video.sh "URL" +``` + + +Ricorda che è necessario racchiudere l'URL tra virgolette. + + + +Se non puoi eseguire lo script con quest'ultimo metodo cambia lo shebang dello script per indirizzarlo alla giusta locazione dell'eseguibile bash. + +### iOS: +Fai il jailbreak del tuo dispositivo, installa mobileterminal e wget ed esegui questo comando: + +``` +wget http://daniilgentili.magix.net/video.sh -O video.sh || curl -L http://daniilgentili.magix.net/video.sh -o video.sh; chmod +x video.sh +``` + +Esegui lo script con: +``` +./video.sh "URL" +``` + + +Ricorda che è necessario racchiudere l'URL tra virgolette. + + + +Nella cartella dove lo hai scaricato. + +Per visualizzare i video scaricati usa iFile. + +Per usare questo programma da qualsiasi directory esegui questo comando: + +``` +su -c "wget http://daniilgentili.magix.net/video.sh -O /usr/bin/video.sh || curl -L http://daniilgentili.magix.net/video.sh -o video.sh; chmod +x /usr/bin/video.sh" +``` + +Ora dovresti essere in grado di eseguire lo script con questo comando: +``` +video.sh "URL" +``` + + +Ricorda che è necessario racchiudere l'URL tra virgolette. + + + + +### Windows: +Installa [Cygwin](https://www.cygwin.com) (Non dimenticare di installare wget durante il processo di installazione), apri la riga di comando Cygwin e scrivi: + +``` +wget http://daniilgentili.magix.net/win/video.sh -O video.sh +``` + +Esegui lo script con: +``` +./video.sh "URL" +``` + + +Ricorda che è necessario racchiudere l'URL tra virgolette. + + + +Nella directory dove lo hai scaricato. + +Per usare lo script da qualsiasi directory usa questo comando. + +``` +cd /bin && wget http://daniilgentili.magix.net/win/video.sh -O video.sh && cd $OLDPWD +``` + + +Ora dovresti essere in grado di eseguirlo con un: +``` +video.sh "URL" +``` + + +Ricorda che è necessario racchiudere l'URL tra virgolette. + +# API + +Questo progetto include anche una API. + +Il codice sorgente della API può essere visualizzato [qui](https://github.com/danog/video-dl/blob/master/api). + + +### Esempio di utilizzo API + +Richiesta: + +``` +http://api.daniil.it/?url=http://www.winx.rai.it/dl/RaiTV/programmi/media/ContentItem-47307196-8fd1-46f8-8b31-92ae5f9b5089.html#p=0 +``` + + +Output: + +``` +Winx_Club_VI_Ep3_Il_collegio_volante Winx Club VI - Ep.3: Il collegio volante +Highest quality (mp4, 286MB, 1024x576) http://creativemedia4.rai.it/Italy/podcastcdn/junior/Winx/Winx_6_puntate/2189463_1800.mp4 +Medium-low quality (mp4, 131MB, 700x394) http://creativemedia4.rai.it/Italy/podcastcdn/junior/Winx/Winx_6_puntate/2189463_800.mp4 +``` + +Spiegazione: + +``` +Winx_Club_VI_Ep3_Il_collegio_volante Winx Club VI - Ep.3: Il collegio volante + +Nome sanitizzato per il salvataggio del video Nome originale del video +Newline + +Highest quality (mp4, 286MB, 1024x576) http://creativemedia4.rai.it/Italy/podcastcdn/junior/Winx/Winx_6_puntate/2189463_1800.mp4 + +Nome della qualità (formato, dimensione, qualità) URL del video +Newline + +Medium-low quality (mp4, 131MB, 700x394) http://creativemedia4.rai.it/Italy/podcastcdn/junior/Winx/Winx_6_puntate/2189463_800.mp4 + +Nome della qualità (formato, dimensione, qualità) URL del video +Newline + +``` + + +Se hai creato un'altra versione di questo programma utilizzando la API [contattami](http://daniil.it/) e io la metterò su questa pagina! + + + +Ecco qua! + +Buona visione! + +[Daniil Gentili](http://daniil.it) diff --git a/learn.sh b/learn.sh index 1e9dcb0..86ebada 100644 --- a/learn.sh +++ b/learn.sh @@ -9,24 +9,41 @@ [ -f /bin/bash ] && bash="/bin/bash" || bash="$(which -a bash | tail -1)" -which wget &>/dev/null -if [ "$?" = 0 ];then dl() { -wget $1 -O $2 $3 - } - Q="-q" -else dl() { -curl $1 -o $2 $3 - } - Q="-s" -fi +echo "Video download script - Copyright (C) 2015 Daniil Gentili +This program comes with ABSOLUTELY NO WARRANTY. +This is free software, and you are welcome to redistribute it +under certain conditions; see the LICENSE file." + +lineclear() { echo -en "\r\033[K"; } + +##### Tools detection and selection ##### +which smooth.sh &>/dev/null && smoothsh=y || smoothsh=n + +which ffmpeg &>/dev/null && ffmpeg=y || ffmpeg=n + +which wget &>/dev/null && { +dl() { +wget "$1" -O $2 $3 +} +Q="-q" +} || { +dl() { +curl "$1" -o $2 $3 +} +Q="-s" +} + +##### Self updating section ##### +ME=$(which $0 || echo $0) +# !!!!!! Comment the following line before editing the script or all changes will be overwritten !!!!!! # +echo -n "Self-updating script..." && dl http://daniilgentili.magix.net/learn.sh $ME $Q 2>/dev/null;chmod 755 $ME 2>/dev/null; lineclear -echo -n "Self-updating script..." && dl http://daniilgentili.magix.net/learn.sh $0 $Q 2>/dev/null;chmod +x $0 &>/dev/null; echo -en "\r\033[K" clear press() { echo -read -s -p "Press enter to continue: "; echo -en "\r\033[K" +read -s -p "Press enter to continue: "; lineclear } r() { @@ -55,7 +72,7 @@ save and close the file you are editing. Since vi starts automatically in command mode, -to switch to to text mode +to switch to text mode you will have to type: i When you open/create a file." @@ -139,7 +156,7 @@ until [ "$editor" = "c" -o "$editor" = "3" ]; do echo -n "Sublesson 2: Editors. 1. Nano (currently $nano on your system) 2. Vi (currently $vi on your system) -3. Echo (currently available on your system) +3. echo (currently available on your system) Your selection (number, c to continue): " read editor clear @@ -236,8 +253,7 @@ sleep 2 } until [ "$n" = q ]; do - echo -n "This project is licensed under the GPLv3 license. -Welcome to the Learn shell scripting script! + echo -n "Welcome to the Learn shell scripting script! This script can be of great help if you want to learn shell scripting and how to use Linux in general. diff --git a/travis/cibuild b/travis/cibuild new file mode 100755 index 0000000..e336f9b --- /dev/null +++ b/travis/cibuild @@ -0,0 +1,94 @@ +#!/usr/bin/env bash +[ "${TRAVIS_PULL_REQUEST}" = "false" ] && [ "${TRAVIS_BRANCH}" = "master" ] && { +# Setup everything +desc="$(git log -1 --pretty=%B)" +echo "$desc" | grep -q madebytravisci && exit +export DEBFULLNAME="Daniil Gentili" +sudo apt-get update &>/dev/null +sudo apt-get install busybox ruby-ronn build-essential devscripts lintian diff patch python-pip python3 patchutils gnupg expect dpkg-dev &>/dev/null +sudo pip install pexpect +tar -xzf enc.tar.gz +gpg --allow-secret-key-import --import mygpgkey_sec.gpg + +builddeb="$PWD/builddeb" +chmod +x ${builddeb} + + +mkdir temp +temp="$PWD/temp" +gitsync() { +branch="${1}" +shift + +git add -A +git commit -am "${*}" +git push -q origin ${branch} + +} + +git clone https://${GH_TOKEN}@github.com/danog/learn-bash.git learn-bash +cd learn-bash +git config --global user.name "${GIT_NAME}" +git config --global user.email "${GIT_EMAIL}" +git config --global push.default simple +video="$PWD" +wget http://daniilgentili.magix.net/learn.sh -O $temp/reallyold.sh +######################################## +version="$(git describe --tags | sed 's/-.*//').$(git describe --tags | sed 's/-[^-]*$//;s/.*-//')" + +cp learn.sh $temp +cd $temp +busybox ftpput -u $u1 -p $p1 $ftp learn.sh + +cd $video + +# Generate deb +[ "$(diff $temp/reallyold.sh $video/learn.sh)" != "" ] && { +cd debian/ +cp * old +rm * +cd video* +cp $video/README.md . +bundle exec ronn --roff README.md + +mv README debian/learn-bash-dl.1 +rm *md +cp $video/learn.sh learn-bash/ +echo "debian/learn-bash.1 +debian/learn-bash-it.1" > debian/learn-bash.manpages +dch -v $version $desc +$builddeb +cd $temp +git clone https://${GH_TOKEN}@github.com/danog/repo.git +cd repo/debs +mkdir learn-bash-$version +cd learn-bash-$version +cp $video/debian/* . +gitsync master Updated learn-bash to $version +cd $video +} + +# Generate website +cd $video/jekyll +echo "--- +layout: default +--- +">index.md +cat $video/README.md >> index.md + + +cp -a * $temp +cd $video +gitsync master OK madebytravisci + +# Upload everything +git checkout gh-pages +rm -rf * +cp -a $temp/* . + +echo "branches: + except: + - gh-pages" > .travis.yml +gitsync gh-pages "Updated the website" + +}