The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

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