NAME

WWW::Twitch - automate parts of Twitch without the need for an API key

SYNOPSIS

use 5.012; # say
use WWW::Twitch;

my $channel = 'corion_de';
my $twitch = WWW::Twitch->new();
my $info = $twitch->live_stream($channel);
if( $info ) {
    my $id = $info->{id};

    opendir my $dh, '.'
        or die "$!";

    # If we have stale recordings, maybe our network went down
    # in between
    my @recordings = grep { /\b$id\.mp4(\.part)?$/ && -M $_ < 30/24/60/60 }
                     readdir $dh;

    if( ! @recordings ) {
        say "$channel is live (Stream $id)";
        say "Launching youtube-dl";
        exec "youtube_dl", '-q', "https://www.twitch.tv/$channel";
    } else {
        say "$channel is recording (@recordings)";
    };

} else {
    say "$channel is offline";
}

METHODS

->new

my $twitch = WWW::Twitch->new();

Creates a new Twitch client

device_id

Optional device id. If missing, a hardcoded device id will be used.

client_id

Optional client id. If missing, a hardcoded client id will be used.

client_version

Optional client version. If missing, a hardcoded client version will be used.

ua

Optional HTTP user agent. If missing, a HTTP::Tiny object will be constructed.

->schedule( $channel )

my $schedule = $twitch->schedule( 'somechannel', %options );

Fetch the schedule of a channel

->is_live( $channel )

if( $twitch->is_live( 'somechannel' ) ) {
    ...
}

Check whether a stream is currently live on a channel

->stream_playback_access_token( $channel )

my $tok = $twitch->stream_playback_access_token( 'somechannel' );
say $tok->{channel_id};

Internal method to fetch the stream playback access token

->live_stream( $channel )

my $tok = $twitch->live_stream( 'somechannel' );

Internal method to fetch information about a stream on a channel

->stream_status( $channel )

my $status = $twitch->stream_status_f( 'somechannel', 'another_channel' );
for my $channel ($status->get) {
    say $status->{channel}, $status->{status};
}

Fetches the status of multiple channels