Sketch ideas for YNAB integration
The end goal is to have some functions that help me manage my Monzo and YNAB accounts. YNAB (i.e. youneedabudget.com) doesn't support Monzo integrations. However, both services offer APIs. Here I'm sketching ideas for what the API integrations might look like. Coming soon: monzo.el.
This commit is contained in:
		
							parent
							
								
									5399b4bd03
								
							
						
					
					
						commit
						4952142916
					
				
					 1 changed files with 56 additions and 0 deletions
				
			
		
							
								
								
									
										56
									
								
								configs/shared/.emacs.d/wpc/ynab.el
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										56
									
								
								configs/shared/.emacs.d/wpc/ynab.el
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,56 @@
 | 
			
		|||
;;; ynab.el --- Functions for YNAB's API -*- lexical-binding: t -*-
 | 
			
		||||
;; Author: William Carroll <wpcarro@gmail.com>
 | 
			
		||||
 | 
			
		||||
;;; Commentary:
 | 
			
		||||
;; I'm not sure what the outcome of this project is.  I'm just writing some
 | 
			
		||||
;; Elisp at the moment to document some of my cursory interactions with YNAB's
 | 
			
		||||
;; API.
 | 
			
		||||
 | 
			
		||||
;;; Code:
 | 
			
		||||
 | 
			
		||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 | 
			
		||||
;; Dependencies
 | 
			
		||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 | 
			
		||||
 | 
			
		||||
(require 'json)
 | 
			
		||||
(require 'a)
 | 
			
		||||
(require 'request)
 | 
			
		||||
 | 
			
		||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 | 
			
		||||
;; Library
 | 
			
		||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 | 
			
		||||
 | 
			
		||||
(defvar ynab/api-url "https://api.youneedabudget.com/v1/"
 | 
			
		||||
  "The URL of the YNAB API.")
 | 
			
		||||
 | 
			
		||||
(defun ynab/get-secret (name)
 | 
			
		||||
  "Fetch and decrypt the secret for YNAB at NAME in the password store."
 | 
			
		||||
  (password-store-get (format "%s/%s" "finance/youneedabudget.com" name)))
 | 
			
		||||
 | 
			
		||||
(defvar ynab/personal-access-token
 | 
			
		||||
  (ynab/get-secret "personal-access-token")
 | 
			
		||||
  "My personal access token to YNAB's API.")
 | 
			
		||||
 | 
			
		||||
(defvar ynab/budget-id
 | 
			
		||||
  (ynab/get-secret "budget-id")
 | 
			
		||||
  "The ID of my current budget on YNAB.")
 | 
			
		||||
 | 
			
		||||
(defvar ynab/account-id
 | 
			
		||||
  (ynab/get-secret "account-id")
 | 
			
		||||
  "The ID of my current budget on YNAB.")
 | 
			
		||||
 | 
			
		||||
(defun ynab/url-for-endpoint (endpoint)
 | 
			
		||||
  "Return the URL for the YNAB ENDPOINT.
 | 
			
		||||
This will resolve any variables in the form of {variable_name} using a prefined
 | 
			
		||||
scope object."
 | 
			
		||||
  (format "%s%s" ynab/api-url endpoint))
 | 
			
		||||
 | 
			
		||||
(macros/comment
 | 
			
		||||
 ;; TODO: Use these this map to resolve variables in an endpoint URL like
 | 
			
		||||
 ;; '/budgets/{budget_id}/'.
 | 
			
		||||
 '((budget_id . (ynab/get-secret "budget-id"))
 | 
			
		||||
   (account_id . (ynab/get-secret "account-id")))
 | 
			
		||||
 (request (ynab/url-for-endpoint "/budgets/{budget_id}/transactions")))
 | 
			
		||||
 | 
			
		||||
(provide 'ynab)
 | 
			
		||||
;;; ynab.el ends here
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue