#!/bin/bash -vx
# Function to get filesize
function FileSize ()
{
if [ -f "$1" ] ; then
SIZE=`ls -ld "$1" | awk '{print $5}'`
echo $SIZE
else
echo 0
fi
}
# Function to output an error message and terminate
function ErrorMessage ()
{
echo -e "Error: $1"
exit 1
}
function usage() {
local CMDNAME=`basename "$0"`
echo "Usage ${CMDNAME} -u \"URI\" " 1>&2
}
USER_AGENT='Mozilla/4.0 (compatible; MSIE 6.0; Windows XP)'
URI="FALSE"
URIVALUE=
OPT=
while getopts "u:" OPT
do
case ${OPT} in
"u" ) URI="TRUE"
URIVALUE="${OPTARG}" ;;
* ) usage
exit 1 ;;
esac
done
if [ "${URI}" != "TRUE" ] ; then
usage
exit 2
fi
CURL='curl -sSv --retry 10'
CURL='curl -sSv --retry 10 -0 -C -'
CURL='curl -sSv --retry 10 -0'
#WGET='wget -t 10 -Sd --keep-session-cookies'
ITERATION=10
URL1=''
FILE=''
i=0
while [ -z "${URL1}" -o -z "${FILE}" ];
do
${CURL} -A "${USER_AGENT}" -o tmp2.$$ -c cookie2.$$ ${URIVALUE}
cat tmp2.$$ | grep -e 'param.*embed' > tmp0.$$
cat tmp0.$$ | cut -d "&" -f3 > tmp0.$$
cat tmp0.$$ | cut -d "=" -f2 > tmp0.$$
cat tmp0.$$ | sed 's/%3A/:/g;s/%2F/\//g;s/%3F/?/g;s/%26/\&/g;s/%3D/=/g' > tmp0.$$
URL1=$(cat tmp0.$$)
cat tmp0.$$ | cut -d "&" -f5 > tmp0.$$
cat tmp0.$$ | cut -d "=" -f2 > tmp0.$$
cat tmp0.$$ | sed 's/%3A/:/g;s/%2F/\//g;s/%3F/?/g;s/%26/\&/g;s/%3D/=/g' > tmp0.$$
FILE=$(cat tmp0.$$)
if [ ${i} -lt ${ITERATION} ];
then
i=`expr $i + 1`
sleep 1
else
rm tmp2.$$ cookie2.$$ tmp0.$$ tmp3.$$ cookie3.$$
exit 1
fi
done
echo "# Successfully set URL1 of path to file including path to flash video and FILE meaning filename"
echo $URL1
echo $FILE
if [ -s "${FILE}" ];
then
rm tmp2.$$ cookie2.$$ tmp0.$$ tmp3.$$ cookie3.$$
exit 1
else
rm -f ${FILE}
fi
URL=''
i=0
while [ -z "${URL}" ];
do
${CURL} -A "${USER_AGENT}" -o tmp3.$$ -c cookie3.$$ ${URL1}
cat tmp3.$$ | cut -d "&" -f1 > tmp0.$$
cat tmp0.$$ | cut -d "=" -f2 > tmp0.$$
cat tmp0.$$ | sed 's/%3A/:/g;s/%2F/\//g;s/%3F/?/g;s/%26/\&/g;s/%3D/=/g' > tmp0.$$
URL=$(cat tmp0.$$)
cat tmp3.$$
if [ ${i} -lt ${ITERATION} ];
then
i=`expr $i + 1`
sleep 1
else
rm tmp2.$$ cookie2.$$ tmp0.$$ tmp3.$$ cookie3.$$
exit 1
fi
done
echo "# Successfully set URL to flash video"
echo $URL
FILESIZE=''
i=0
while [ -z "${FILESIZE}" ];
do
${CURL} -A "${USER_AGENT}" -b cookie3.$$ ${URL} -I 2> /dev/null | sed -e "s/^$//" > "z_${FILE}.header"
FILESIZE="`grep -i '^\(Content-Length: \)\?[0-9]\+' "z_${FILE}.header" | sed 's/^\(Content-Length: \)\?\([0-9]\+\)/\2/i'`"
if [ ${i} -lt ${ITERATION} ];
then
i=`expr $i + 1`
sleep 1
else
rm tmp2.$$ cookie2.$$ tmp0.$$ tmp3.$$ cookie3.$$
exit 1
fi
done
echo "# Successfully set FILESIZE of flash video"
echo ${FILESIZE}
NUM=10
FILESIZE="`echo ${FILESIZE} | sed 's/\r//g;s/\n//g;'`"
WIDTH_BYTE=`expr ${FILESIZE} / ${NUM}`
START_BYTE=0
END_BYTE=${WIDTH_BYTE}
SLEEP_SEC=1;
i=0;
while [ ${i} -lt ${NUM} ];
do
TEMP_FILE="${FILE}.$i"
START_BYTE="`expr ${WIDTH_BYTE} '*' ${i}`"
if [ ${i} -lt `expr ${NUM} - 1` ];
then
END_BYTE="`expr ${START_BYTE} + ${WIDTH_BYTE} - 1`"
else
END_BYTE=`expr ${FILESIZE} - 1`
fi
FILE_BYTE=`expr ${END_BYTE} - ${START_BYTE} + 1`
TEMP_FILE_BYTE=0;
(
while [ ${FILE_BYTE} -ne ${TEMP_FILE_BYTE} ];
do
echo "$i / ${NUM} : byte range ${START_BYTE}-${END_BYTE} ${FILE_BYTE}"
${CURL} -A "${USER_AGENT}" --range ${START_BYTE}-${END_BYTE} -o ${TEMP_FILE} -b cookie3.$$ ${URL}
TEMP_FILE_BYTE="`FileSize "${TEMP_FILE}"`"
sleep ${SLEEP_SEC}
done
echo "$i / ${NUM} : byte range ${START_BYTE}-${END_BYTE} ${FILE_BYTE} end"
)&
i=`expr $i + 1`
done
echo "Waiting for cURLs to finish..."
wait
echo
echo "Assembling ${FILE}... "
i=0;
while [ ${i} -lt ${NUM} ];
do
TEMP_FILE="${FILE}.$i"
echo "cat ${TEMP_FILE} >> ${FILE}"
cat ${TEMP_FILE} >> ${FILE}
echo rm ${TEMP_FILE}
rm ${TEMP_FILE}
i=`expr $i + 1`
done
rm tmp2.$$ cookie2.$$ tmp0.$$ tmp3.$$ cookie3.$$
exit