Май за сефте отварям този сайт, та не го зная в подробности, но за видеата, на които попаднах там, забелязах, че в генерирания HTML код на сайта, когато цъкнеш на някое видео се появява object елемент, в който е въпросното видео. В този object елемент в параметъра flashvars имаш две стойности, които те интересуват - "netConnectionUrl" и "url". Като сглобиш тези две стойности в едно url, получаваш адреса на rtmp потока, който можеш да си свалиш с rtmpdump (ако го нямаш, инсталирай си го, ще ти трябва и по-надолу). Изглежда обаче netConnectionUrl се повтаря навсякъде един и същ, а променлива е само стойността на url, която стойност може да се види в HTML кода и без да се цъка на видеото. И понеже ме е хванала музата за писане, а не за търсене, ето ти едно скриптче за целта
GeSHi (Bash):
#!/bin/bash
while getopts u:d:h option
do
case "${option}" in
u) URL=${OPTARG};;
d) DIR=${OPTARG};;
h) HELP=1;;
esac
done
if [[ "$URL" = "" || "$HELP" = 1 ]]; then
echo 'Използване: scriptname -u URL [-d ДИРЕКТОРИЯ]
Изтегляне на видеа от страница в http://ask.fm с rtmpdump.
Налични аргументи:
-u URL : URL адрес на страницата в http://ask.fm
-d ДИРЕКТОРИЯ : Директория, в която да се запазят свалените видеа (ако е празно, в текущата)
-h : Тази помощна информация'
exit
fi
if [[ ! $(which curl) || ! $(which rtmpdump) ]]; then
echo 'Този скрипт се нуждае от инсталирани инструменти curl и rtmpdump, за да работи.'
exit
fi
if [[ "$DIR" = "" ]]; then
DIR='.'
fi
if [[ ! -d "$DIR" || ! -w "$DIR" ]]; then
echo 'Указаната директория не съществува или няма права за писане в нея.'
exit
fi
pageSource=$(curl -s "$URL")
videoArr=( $(echo "$pageSource" | grep flipVideoAnswer | awk -F';|&' '{print $3}') )
if [[ ${#videoArr[*]} -eq 0 ]]; then
echo 'Няма видеа в указания URL адрес.'
exit
elif [[ ${#videoArr[*]} -eq 1 ]]; then
rtmpdump -r "rtmp://su0wjemth7nht.cloudfront.net/cfx/st/${videoArr[0]}" -o "$DIR/1.flv"
exit
fi
IFS="|DELIMITER|"
titleArr=( $(echo "$pageSource" | grep -B 15 flipVideoAnswer | grep 'span dir="ltr"' | awk -F'>|</' '{print $3}' | tr '\n' '|DELIMITER|') )
IFS=" "
echo "В страницата има налични ${#videoArr[*]} видеа:"
i=1
for title in "${titleArr[@]}"; do
echo "$i. $title"
i=$((i+1))
done
echo -e '\nНомера за изтегляне, разделени с клавиш Enter (думата "all" за всички; празен ред за край):'
numTemplate='^[1-9][0-9]*$'
selectedArr=()
while IFS= read -r -p "=> " line; do
[[ $line ]] || break
if [[ "$line" = "all" ]]; then
selectedArr=( all )
break
elif [[ $line =~ $numTemplate ]] && [[ $line -le ${#videoArr[*]} ]] && [[ ! $(echo ${selectedArr[*]} | grep -w $line) ]]; then
selectedArr+=("$line")
fi
done
if [[ "${selectedArr[0]}" = "all" ]]; then
i=1
for video in "${videoArr[@]}"; do
rtmpdump -r "rtmp://su0wjemth7nht.cloudfront.net/cfx/st/$video" -o "$DIR/$i.flv"
i=$((i+1))
done
else
for number in "${selectedArr[@]}"; do
rtmpdump -r "rtmp://su0wjemth7nht.cloudfront.net/cfx/st/${videoArr[$((number-1))]}" -o "$DIR/$number.flv"
done
fi
Слагаш това в един файл, правиш файла изпълним и го изпълняваш с описаните параметри. Ако се натъкнеш на бъгче, опиши го, за да го оправим
П.П.: За да не стане объркване да кажа, че скриптът сваля видеа от
ей такива страници. Ако трябва да се свали видео, което не е налично в началната страница (т.е., трябва да се цъкне бутонът "Виж повече" в дъното на страницата, за да се покаже), тогава на съответния пост се цъка линкът, в който пише преди колко време е публикуван (например "преди около месец") и на скрипта се подава URL-ът на самостоятелното видео. Да ме прощава собственичката на профила, че ѝ ползвам страницата за пример, ама излиза първа в Google при търсене на "ask.fm video"
Редактирано в 23:17: Малко корекции по скрипта.