Skip to content

Instantly share code, notes, and snippets.

What would you like to do?
Update beeminder with TeX wordcount
import re
import requests
import shlex
import subprocess
# login to beeminder and visit
auth_token = 'token'
username = 'username'
goal = 'thesis'
include = re.compile(r"(figures/|tables/|chapters/)?[^/]*.tex$")
url = '{}/goals/{}/datapoints.json'.format(username, goal)
commit = subprocess.check_output(shlex.split('git log -1 --format="%H"')).strip().decode('UTF-8')
files = subprocess.check_output(["git", "ls-tree", "-r", "--name-only", commit]).decode('UTF-8').split()
files = [fn for fn in files if include.match(fn)]
cmd = "git show {}|texcount -|awk '/Words in text:/ {{print $4}}'".format(" ".join(commit + ":" + fn for fn in files))
words = int(subprocess.check_output(cmd, shell=True))
comment = subprocess.check_output(shlex.split("git log -1 --format=%B")).strip().decode('UTF-8')
if words > 0:
payload = {
"value": words,
"comment": comment,
"requestid": commit,
"auth_token": auth_token
r =, data=payload)
print('updated beeminder with {} words'.format(words))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.