#!/usr/bin/env bash set -e # super quickly hacked together script # for listing your twitch following from the command-line. # REQUIREMENTS: # editing this script. # downloading a python script. # python 2 or 3. # a web browser. # curl. # GNU sort. # GNU awk. # KNOWN ISSUES: # output is not always sorted by viewer count. # TODO: # fix known issues. # automatically extract relevant values from a cURL string. # add toggle for colors. # optional CSV output. # automatically download json2? # rewrite in python? # fill these in with values extracted from your browser's # "copy as cURL" feature. # 1. open a new tab in Chromium or Firefox; these instructions apply to either. # 2. open the web inspector (ctrl+shift+I) and click on the network tab. # 3. go to https://www.twitch.tv/directory/following/live # make sure this is with the network tab already open! # if it isn't, open it up and just refresh the page. # 4. type "followed" in the filter of the network tab. # 5. right click on the first result and click copy as cURL. # in Chromium, it's in a submenu as "copy as cURL (bash)" # 6. paste into a text editor and extract the following header values: # (each header is specified by a -H flag) cookie="cookie: [fill me in!]" client_id="client-id: [fill me in!]" # note: technically, you only need the "persistent" cookie. json2() { # download this from https://github.com/vi/json2/blob/master/json2 # and edit this line accordingly. python ~/src/json2/json2 "$@" } curl -LsS 'https://api.twitch.tv/kraken/streams/followed?limit=100&stream_type=all' \ -H 'accept: application/vnd.twitchtv.v5+json' \ -H "$cookie" \ -H "$client_id" | json2 | sort -n | awk ' function trunc(s,L) { e = length(s) > L ? "…" : ""; return (substr(s, 0, L -(e ? 1 : 0)) e); } $1~/\/game$/{game=substr($2,2)} $1~/\/channel\/status$/{status=substr($2,2)} $1~/\/channel\/name$/{name=substr($2,2)} $1~/\/viewers$/{ viewers=substr($2,2); printf "\x1b[90m%5s\x1b[0m \x1b[97m%-25s\x1b[0m %s\n \x1b[1m%s\x1b[0m\n", viewers, name, trunc(game, 48), status; } ' FPAT='(^[^=]+)|(=.*)'