Search code examples
apitwitch

Twitch Api: How can I know that stream was finished?


I have a stream url like https://www.twitch.tv/streams/26114851120/channel/31809543. Stream is online and I need to catch moment when stream will be finished.

I researched twitch api documentation and didn't find any events. The first thought was to send requests every several minutes and when stream going online - handle this. It was a little delay, but it isn't critical.

But there are many streams that I must track and I scare that twitch can block me for this.

Are there any other ways to catch stream's finish?


Solution

  • As best I can tell there's no way to directly listen for a stream going online or offline, but you can still monitor a large number of streams in spite of that.

    There are a fair number of Q&A on the official Twitch developer site wanting this functionality, but all of them I could find are answered with the same "it's not currently possible."

    Keep in mind that you can check the status of multiple channels simultaneously (up to 100 per request) using a comma separated list and the limit query parameter: Get-Live-Streams

    https://api.twitch.tv/kraken/streams/?get-live-streams?channel=Channel1,Channel2&limit=100
    

    That'll return an object containing an array of online streams (the streams property).


    Rate Limits

    Twitch's official stance regarding rate limiting is a recommendation of no more than "about 1 request per second". That said they don't throttle you for making several requests in immediate succession, but rather the cumulative amount.

    Note that there's a separate rate limit for IRC-related actions of 20 commands/messages per 30 seconds normally or 100 per 30 if a mod. Violating that will trigger a 30 minute lockout.


    API-Side Caching

    API results are also cached for 1-3 minutes which reduces load on their end. Given that, there's not much value in polling for anything more frequently than that (i.e. you should wait at least 1 minute before making the exact same request again since you'd just get the same response).


    You Can Still Monitor ~6000 Streams

    Given the ability to check 100 streams at a time, a need to wait for at least 1 minute per request to get new results, and an approximate rate limit of 1 request per second, you can theoretically check the status of about 6000 streams continuously (assuming you're not making other requests; 100 streams per second * 60 per minute).


    PubSub For Monitoring Other Things

    Currently the PubSub API doesn't have anything for monitoring stream's going online, but you may want to keep it in mind for other polling-type actions (it currently deals with things like new subscriptions or donations).


    Using The Embedded Player

    One last thing worth noting is you can listen for a channel going online or offline when you're using the Twitch Embedded Player.