Using jq to display cricket scores on i3bar

i3bar screenshot

It’s the IPL season and I thought why not keep a track of the score of the matches that are in progress. I have two tests tomorrow and I don’t want to be wasting time looking at the scores every now and then; instead let’s spend some more time looking into an utility that I haven’t used before and test and play around with it. I don’t even like cricket that much.

The utility I am talking about here is jq. jq is a command-line JSON parser. You can think of it like awk that is tailord to work with JSON. Following the UNIX philosophy, jq can take it’s input from the standard input or from a file. That means we can pipe it’s output to other programs or pipe in from other programs into it. jq has a very straight forward man page. It has a mini language of it’s own which is quite intuitive.

The command below fetches the information using cricbuzz. Turns out they have an undocumented API that is publicly usable. We get the score of the batting side and also the status of the match. tr -d \" | tr \n ' ' gets rid of double quotes and converts the newlines into spaces.

#!/usr/bin/bash
curl -s https://www.cricbuzz.com/match-api/livematches.json\
    | jq '.matches."22455"|.score.batting.score,.status'\
    | tr -d \" | tr '\n' ' '

Output: "145/5 (18.0 Ovs) Delhi Capitals need 5 runs in 12 balls"

The script below sends a notification with the current score, run rate, and balls of the previous overs for the match id 22454.

#!/usr/bin/bash
notify-send "$(curl -s https://www.cricbuzz.com/match-api/livematches.json\
    | jq '.matches."22454".score |.batting.score, .crr, .prev_overs'\
    | tr \" " ")"

I can then place them in ~/.config/i3blocks and configure i3blocks to run the script every 10-15 seconds.

[match]
command=match_score
interval=10