No que diz respeito à parte de transferência da sua pergunta, pode utilizar o livestreamer , por exemplo:
livestreamer <livestream-url> best -o vod.mp4
Para obter instruções de instalação, consulte esta resposta por @ henry .
Na verdade, não deve ser muito difícil monitorar a atividade de fluxo por meio da API do Twitch. Por exemplo, você pode executar uma solicitação simples de curl
canalizada para grep
para identificar se o fluxo está off-line ou se há outro tipo de erro:
curl -s https://api.twitch.tv/kraken/streams/totalbiscuit | grep '"stream":null'
Isso retornará como verdadeiro se nenhum fluxo estiver sendo executado no momento.
Com isso em mente, você pode criar um loop simples que verifique se há fluxos ativos em intervalos de alguns minutos, por exemplo:
#!/bin/bash
Channel="totalbiscuit"
while sleep 60; do
if ! curl -s "https://api.twitch.tv/kraken/streams/$Channel" | grep -q '"stream":null'; then
echo "$Channel is live. Downloading stream..."
livestreamer "http://www.twitch.tv/$Channel" best -o "${Channel}_livestream.mp4"
else
echo "$Channel is offline"
fi
done
Ou, um pouco mais complexo e com mais verificações de integridade:
#!/bin/bash
# Simple Twitch Poller
# Author: Glutanimate
# License: GPL v3
# Dependencies: livestreamer
#
# Description: Polls twitch channel status and downloads stream if user is online
Usage="$0 <space-separated list of twitch channels>"
Channels=($@)
Interval="60" # polling interval in seconds
if [[ -z "$Channels" ]]; then
echo "Error: No channels provided"
echo "Usage: $Usage"
exit 1
fi
while true; do
for i in ${Channels[@]}; do
StreamData="$(curl -s "https://api.twitch.tv/kraken/streams/$i")"
if echo "$StreamData" | grep -q '"status":404'; then # 404 Error
echo "Error: $i does not exist."
break 2
elif echo "$StreamData" | grep -q '"stream":null'; then # Channel offline
echo "$i is offline."
else # Channel online
echo "$i is live. Downloading stream..."
livestreamer "http://www.twitch.tv/$i" best -o "$(date +"${i}_TwitchVOD_%Y-%m-%d_%H%M%S.mp4")"
fi
done
sleep "$Interval"
done
Para experimentar este script, copie e cole o codeblock acima em um novo arquivo de texto vazio, salve-o como twitch_poller.sh
ou algo similar e torne-o executável através do menu Properties do seu gerenciador de arquivos (Clique com o botão direito → Propriedades → Permissões → Permitir a execução do arquivo como programa ).
Certifique-se de ter o livestreamer instalado e, em seguida, execute o script em um terminal, fornecendo os canais de contração que deseja monitorar, por exemplo:
$ './twitch_poller.sh' totalbiscuit TSM_Dyrus
totalbiscuit is offline.
TSM_Dyrus is live. Downloading stream...
[cli][info] Found matching plugin twitch for URL http://www.twitch.tv/TSM_Dyrus
[cli][info] Available streams: audio, high, low, medium, mobile (worst), source (best)
[cli][info] Opening stream: source (hls)
[download][..D_2014-11-07_001503.mp4] Written 3.1 MB (6s @ 460.6 KB/s)
Você pode ajustar o intervalo de pesquisa definindo a variável Interval
no script.