Yup. Uses a modified version of this Beeminder wrapper.
#!/usr/bin/env python3
import os
import yaml
from beeminderpy import Beeminder
import time
import requests
from functions import *
import json
def post_to_goal(goal, timestamp, value, comment):
b.create_datapoint(
config["auth"]["beeminder"]["username"],
goal,
timestamp,
value,
comment
)
directory = os.path.dirname(os.path.realpath(__file__))
config = yaml.load(open(f"{directory}/config.yaml", "r"))
b = Beeminder(config["auth"]["beeminder"]["token"])
##################
# Update /buffer #
##################
goal_infos = json.loads(b.get_goals(config["auth"]["beeminder"]["username"]))
now = time.time()
buffers = {info["slug"]: (info["losedate"] - now) / (60 * 60 * 24) for info in goal_infos if info["slug"] is not "buffer"}
sorted_buffer_keys = sorted(buffers, key=buffers.__getitem__)
min_key = sorted_buffer_keys[0]
post_to_goal("buffer", now, buffers[min_key], f'{min_key} #airtimer #cron')
print(datetime.datetime.now(), "Posted datapoint to /buffer")