streamlink / streamlink-twitch-gui

A multi platform Twitch.tv browser for Streamlink
https://streamlink.github.io/streamlink-twitch-gui/
MIT License
2.7k stars 204 forks source link

New helix API features #856

Open bastimeyer opened 2 years ago

bastimeyer commented 2 years ago

Opening this thread so I can have a list of features of the helix API that could / should be implemented in the future. I initially wanted to have a similar but shorter list in the 2.0.0 changelog, but that would mean that I wouldn't be able to edit it later on. I will instead refer to this thread in the changelog, which makes much more sense.

As said in #849, some features were not implemented by #852 for simplicity reasons, but there's also some stuff that's questionable, or stuff that's not possible or doesn't make any sense.


Local game/channel following

Since Twitch has killed the (un)follow channel API endpoints (#813), and never made the (un)follow game API endpoints public (they were on their old private REST API which got shut down in 2019 - #684), following games and channels with Twitch accounts is not possible anymore via the public APIs.

However, a local list of followed games and channels could be implemented instead. https://github.com/streamlink/streamlink-twitch-gui/issues/689#issuecomment-559371963

The old kraken API didn't support querying games, so this was impossible to implement. Querying streams by multiple user IDs is already being done for lots of data requests now, so following users locally and querying their online status is simple. Merging this data with the regular followed streams data will be a bit annoying though.

Multi-language filtering

This is available again on the Helix API after it was removed twice on the Kraken API over the years. The current implementation still allows for just one selection when filtering out streams.

Stream tags

https://dev.twitch.tv/docs/api/reference#get-all-stream-tags https://dev.twitch.tv/docs/api/reference#get-streams

Not sure if I'm blind or not, but there doesn't seem to be a way to filter streams by tag IDs. This would make implementing stream tags rather pointless, because they would just show what the streamer has set, and users wouldn't be able to filter streams by those tags. I've tried querying the streams API endpoint with various parameter names for the stream tags, but nothing seemed to work, so it looks like the docs are not out of date and indeed correct. A shame.

Search live streams

https://dev.twitch.tv/docs/api/reference#search-channels

The search channels API endpoint for some very weird reason mixes user/channel data and stream data.

I've intentionally avoided mixing the search results here, because it would mess with the infinite scroll mechanism and how the list items (streams or users) are displayed. A new separate search result list item component would need to be implemented that can either show a live stream or a user/channel depending on the result's is_live property.

Stream schedules

https://dev.twitch.tv/docs/api/reference#get-channel-stream-schedule

Seems useful, unless the feature will get killed at some point because nobody is using it.

Channel emotes

https://dev.twitch.tv/docs/api/reference#get-emote-sets

While this would provide a bit more content for channel pages, I currently very much dislike promoting Twitch channel subscriptions because of Twitch killing the follow channel endpoints. Hence why there's also no subscribe button anymore.

Unavailable stuff

https://dev.twitch.tv/docs/api/reference#get-polls https://dev.twitch.tv/docs/api/reference#get-predictions https://dev.twitch.tv/docs/api/reference#get-hype-train-events https://dev.twitch.tv/docs/api/reference#get-channel-chat-badges

All of this can't be implemented, because only the authenticated user's own channel can be queried for some reason. This could be a documentation error, but I'm not sure as I haven't tested this yet. Seems weird.

lextra2 commented 2 years ago

Local game/channel following

If that ever gets added, surely there is a way to do the exact opposite with that, and blacklist/hide the channel/game?