如视频所示, 我可以下载打开 fb 直播之前的 15 分钟剧情 (从少林足球比赛进行中, 倒退 15 分钟 , 能看到刚刚开始集合的剧情。)
有时你打开直播, miss 掉之前重要的画面, 直播后也可能被隐藏或删除, 所以这招很有用。
Bash代码:
# rf: https://stackoverflow.com/questions/12498304/using-bash-to-display-a-progress-working-indicator progressBarWidth=20 # Function to draw progress bar progressBar () { taskCount="$1" tasksDone="$2" # Calculate number of fill/empty slots in the bar progress=$(echo "$progressBarWidth/$taskCount*$tasksDone" | bc -l) fill=$(printf "%.0f\n" $progress) if [ $fill -gt $progressBarWidth ]; then fill=$progressBarWidth fi empty=$(($fill-$progressBarWidth)) # Percentage Calculation percent=$(echo "100/$taskCount*$tasksDone" | bc -l) percent=$(printf "%0.2f\n" $percent) if [ $(echo "$percent>100" | bc) -gt 0 ]; then percent="100.00" fi # Output to screen printf "\r[" printf "%${fill}s" '' | tr ' ' '#' printf "%${empty}s" '' | tr ' ' ' ' printf "] $percent%% - $text " } fb_live_backward () { echo lili; ##no nid care if `firefox -no-remote -ProfileManager` then create lolo.default collision, overkill cookie_f='/tmp/fb_cookie'; printf ".mode tabs \n select host, case when host glob '.*' then 'TRUE' else 'FALSE' end, path, case when isSecure then 'TRUE' else 'FALSE' end, expiry, name, value from moz_cookies where host = '.facebook.com';" | sqlite3 ~/.mozilla/firefox/*.default/cookies.sqlite > "$cookie_f"; echo "$cookie_f"; #echo > "$cookie_f"; #curl -b "$cookie_f" -vLk "https://www.facebook.com/video/playback/playlist.m3u8?v=$vid" -H 'Host: www.facebook.com' -H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:53.0) Gecko/20100101 Firefox/53.0' -H 'Accept: */*' -H 'Accept-Language: en-US,en;q=0.5' --compressed -H 'Referer: https://www.facebook.com/live' -H 'Connection: keep-alive' #curl -b "$cookie_f" -vLk 'https://video.fkul8-1.fna.fbcdn.net/hvideo-prn1/v/rvgvfRr3mfgtrG9-5YYe0/live-md/320741391732419.m3u8?_nc_rl=AfACJUPO37BnG6-k&oh=ca49b289cfe55cc22554f06974a11197&oe=597BC9DD' vid="$1"; url="$(curl -b "$cookie_f" -s "https://www.facebook.com/video/playback/playlist.m3u8?v=$vid" -H 'Host: www.facebook.com' -H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:53.0) Gecko/20100101 Firefox/53.0' -H 'Accept: */*' -H 'Accept-Language: en-US,en;q=0.5' --compressed -H 'Referer: https://www.facebook.com/live' -H 'Connection: keep-alive' | tail -1)"; if [[ $url != http* ]]; then echo "url failed"; else curl -b "$cookie_f" -s "$url" | awk '/^#EXTINF/,/ts$/' > /tmp/tss; awk 'NR==2' /tmp/tss > /tmp/ts; awk 'NR==1 {first = $0} END {print}' /tmp/tss > /tmp/ts2; endI2="$(awk 'NR > 1 {print $1}' RS='__-' FS='.ts' /tmp/ts2 | tail -1)"; endI="$(awk 'NR > 1 {print $1}' RS='__-' FS='.ts' /tmp/ts | tail -1)"; echo '###'; echo "$endI"; echo "$endI2"; echo '#####'; if [[ -z "$endI" || -z "$endI2" ]]; then echo "Abort."; else startI=$(($endI - 300)); #Backward up to 15 minutes * 60 seconds if [ "$startI" -lt "0" ]; then startI=0; fi; fi; furl="$(awk -F'__-' '{print $1}' /tmp/ts)"; startURL="${url%/*}"; endURL="$(echo "${url##*/}" | awk -F? '{print $NF}')"; rm /tmp/$vid.mp4 2> /dev/null; for n in `seq "$startI" "$endI2"`; do text=$(echo "Saving to /tmp/$vid.mp4 ..." `ls -lah /tmp/$vid.mp4 2>/dev/null | awk -F " " {'print $5'}` ); progressBar $(($endI2 - $startI)) $(($n - $startI)) "$text"; curl -b "$cookie_f" -s "$startURL"'/'"$furl"'__-'"$n"'.ts?'"$endURL" -H 'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:53.0) Gecko/20100101 Firefox/53.0' -H 'Accept: */*' -H 'Accept-Language: en-US,en;q=0.5' --compressed -H 'Referer: https://www.facebook.com/live' -H 'Connection: keep-alive' >> /tmp/$vid.mp4; done; echo "Download completed :)"; fi }
虽然这 2017 年的招已经 deprecated, 我也没时间研究 fb 新招, 不过希望可以带给你一点 idea 关于倒退直播的可能性 :D