From fe4fcc49195bdaabd949ee1060a3de2c89fd8bf2 Mon Sep 17 00:00:00 2001 From: zevav Date: Wed, 24 May 2017 12:14:58 -0400 Subject: [PATCH] mega-commit --- get_some_transactions_v1.py | 12 ++ get_some_transactions_v2.py | 36 ++++++ get_yesterdays.py | 17 +++ run.py | 5 + screenshot.png | Bin 0 -> 170794 bytes send_summary.py | 14 +++ spending_summary.md | 232 ++++++++++++++++++++++++++++++++++++ spending_summary.py | 60 ++++++++++ splurgebot.md | 5 - splurgebot.py | 71 ----------- 10 files changed, 376 insertions(+), 76 deletions(-) create mode 100644 get_some_transactions_v1.py create mode 100644 get_some_transactions_v2.py create mode 100644 get_yesterdays.py create mode 100644 run.py create mode 100644 screenshot.png create mode 100644 send_summary.py create mode 100644 spending_summary.md create mode 100644 spending_summary.py delete mode 100644 splurgebot.md delete mode 100644 splurgebot.py diff --git a/get_some_transactions_v1.py b/get_some_transactions_v1.py new file mode 100644 index 0000000..4f1ebd0 --- /dev/null +++ b/get_some_transactions_v1.py @@ -0,0 +1,12 @@ +import os +from typing import List + +# twilio.rest has a Client too, so let's avoid a namespace collision +from plaid import Client as PlaidClient + +plaid_client = PlaidClient(client_id=os.getenv('PLAID_CLIENT_ID'), secret=os.getenv('PLAID_SECRET'), + public_key=os.getenv('PLAID_PUBLIC_KEY'), environment=os.getenv('PLAID_ENV')) + + +def get_some_transactions(access_token: str, start_date: str, end_date: str) -> List[dict]: + return plaid_client.Transactions.get(access_token, start_date, end_date) diff --git a/get_some_transactions_v2.py b/get_some_transactions_v2.py new file mode 100644 index 0000000..48aa145 --- /dev/null +++ b/get_some_transactions_v2.py @@ -0,0 +1,36 @@ +import math +import os +from typing import List + +# twilio.rest has a Client too, so let's avoid a namespace collision +from plaid import Client as PlaidClient + +plaid_client = PlaidClient(client_id=os.getenv('PLAID_CLIENT_ID'), secret=os.getenv('PLAID_SECRET'), + public_key=os.getenv('PLAID_PUBLIC_KEY'), environment=os.getenv('PLAID_ENV')) + + +# https://plaid.com/docs/api/#transactions +MAX_TRANSACTIONS_PER_PAGE = 500 +OMIT_CATEGORIES = ["Transfer", "Credit Card", "Deposit"] + + +def get_some_transactions(access_token: str, start_date: str, end_date: str) -> List[dict]: + account_ids = [account['account_id'] for account in plaid_client.Accounts.get(access_token)['accounts'] + if account['subtype'] not in ['cd', 'savings']] + + num_available_transactions = plaid_client.Transactions.get(access_token, start_date, end_date, + account_ids=account_ids)['total_transactions'] + num_pages = math.ceil(num_available_transactions / MAX_TRANSACTIONS_PER_PAGE) + transactions = [] + + for page_num in range(num_pages): + transactions += [transaction + for transaction in plaid_client.Transactions.get(access_token, start_date, end_date, + account_ids=account_ids, + offset=page_num * MAX_TRANSACTIONS_PER_PAGE, + count=MAX_TRANSACTIONS_PER_PAGE)['transactions'] + if transaction['category'] is None + or not any(category in OMIT_CATEGORIES + for category in transaction['category'])] + + return transactions diff --git a/get_yesterdays.py b/get_yesterdays.py new file mode 100644 index 0000000..b3ef2d1 --- /dev/null +++ b/get_yesterdays.py @@ -0,0 +1,17 @@ +import datetime +import os +from typing import List + +from get_some_transactions_v2 import get_some_transactions + + +def get_yesterdays_transactions() -> List[dict]: + yesterday = ('2017-05-16' if os.getenv('PLAID_ENV') == 'sandbox' + else (datetime.date.today() - datetime.timedelta(days=1)).strftime('%Y-%m-%d')) + + transactions = [] + + for access_id in [os.getenv('CHASE_ACCESS_TOKEN'), os.getenv('BOFA_ACCESS_TOKEN')]: + transactions += get_some_transactions(access_id, yesterday, yesterday) + + return transactions diff --git a/run.py b/run.py new file mode 100644 index 0000000..121456a --- /dev/null +++ b/run.py @@ -0,0 +1,5 @@ +from get_yesterdays import get_yesterdays_transactions +from send_summary import send_summary + + +send_summary(get_yesterdays_transactions()) \ No newline at end of file diff --git a/screenshot.png b/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..9ea4b158492665d62a808a6667ee9ddd6a65321e GIT binary patch literal 170794 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 VHwo*gnqq)IvxA3??-~*={s(zwi@X2; literal 0 HcmV?d00001 diff --git a/send_summary.py b/send_summary.py new file mode 100644 index 0000000..256f99c --- /dev/null +++ b/send_summary.py @@ -0,0 +1,14 @@ +import os +from typing import List + +from twilio.rest import Client as TwilioClient + +twilio_client = TwilioClient(os.getenv('TWILIO_SID'), os.getenv('TWILIO_TOKEN')) + + +def send_summary(transactions: List[dict]) -> None: + total_spent = sum(transaction['amount'] for transaction in transactions) + + message = f'You spent ${total_spent} yesterday. 💸' + + twilio_client.api.account.messages.create(to=os.getenv('MY_CELL'), from_=os.getenv('MY_TWILIO_NUM'), body=message) diff --git a/spending_summary.md b/spending_summary.md new file mode 100644 index 0000000..44bc7db --- /dev/null +++ b/spending_summary.md @@ -0,0 +1,232 @@ +Your bank lets you set up SMS alerts for various triggers; it might even give you the option of receiving periodic spending summaries (mine doesn't!). +But what about a daily SMS summary of your spending across *all* your accounts? This is harder to come by, so let's roll our own: + +## Pre-work + +1. [Nab a sandbox account](https://dashboard.plaid.com/signup) from Plaid, and put those credentials into `PLAID_CLIENT_ID`, `PLAID_SECRET`, +and `PLAID_PUBLIC_KEY` environment variables. While you're at it, +[ask for access](https://dashboard.plaid.com/overview/request-development) the development API (it'll take a few days). +For now, though, create an env var `PLAID_ENV` and set it to 'sandbox'. + +```bash +export PLAID_CLIENT_ID='somechars1234' +export PLAID_PUBLIC_KEY='somemorechars1234' +export PLAID_SECRET='somesecretchars1234' +export PLAID_ENV='sandbox' +``` + +1. Clone the [quickstart for Plaid](https://github.com/plaid/quickstart) and reference those environment variables in the +Python quickstart's `server.py`. + +```python +PLAID_CLIENT_ID = os.getenv('PLAID_CLIENT_ID') +PLAID_SECRET = os.getenv('PLAID_SECRET') +PLAID_PUBLIC_KEY = os.getenv('PLAID_PUBLIC_KEY') +PLAID_ENV = os.getenv('PLAID_ENV') +``` + +1. Run `server.py` (Python 2 only 😦) and log into Chase with the test credentials ("user_good" and +"pass_good" as of 5/24/2017). It prints the access token to your terminal: Grab that and put it into a +`CHASE_ACCESS_TOKEN` environment variable. Repeat this for Bank of America and put that access token into `BOFA_ACCESS_TOKEN`. + +1. [Grab your Twilio credentials](https://www.twilio.com/console/account/settings) and +[Twilio incoming phone number](https://www.twilio.com/console/phone-numbers/incoming) make sure those are available as +environment variables too (see below). + +1. Put your cell phone number in an environment variable as `MY_CELL`. + +```bash +export CHASE_ACCESS_TOKEN='access-sandbox-someprettysecretchars1234' +export BOFA_ACCESS_TOKEN='access-sandbox-somemoreprettysecretchars1234' +export TWILIO_SID='somechars1234' +export TWILIO_TOKEN='somesecretchars1234' +export MY_TWILIO_NUM='+11111111111' +export MY_CELL='+12222222222' +``` + +1. Install just a couple of dependencies: + +```bash +$ pip install python-plaid twilio +``` + +## Get Some Transactions + +Make yourself a Plaid client instance and grab some transactions from Chase: + +[get_some_transactions_v1.py](https://github.com/zevaverbach/spending_summary/blob/master/get_some_transactions_v1.py) + +```python +import os +from typing import List + +# twilio.rest has a Client too, so let's avoid a namespace collision +from plaid import Client as PlaidClient + +plaid_client = PlaidClient(client_id=os.getenv('PLAID_CLIENT_ID'), secret=os.getenv('PLAID_SECRET'), + public_key=os.getenv('PLAID_PUBLIC_KEY'), environment=os.getenv('PLAID_ENV')) + + +def get_some_transactions(access_token: str, start_date: str, end_date: str) -> List[dict]: + return plaid_client.Transactions.get(access_token, start_date, end_date) + +``` + +Inspecting the output of `get_some_transactions`, we see that there are multiple accounts, 337 transactions among them, but only +100 transactions returned from this API call. Two of these accounts are for savings, so presumably they're only +going to have transfers rather than purchases. + +```python +>>> from get_some_transactions_v1 import get_some_transactions +>>> import os +>>> some_transactions = get_some_transactions(os.getenv('CHASE_ACCESS_TOKEN'), '1972-01-01', '2017-05-26')) +>>> some_transactions['total_transactions'] +337 +>>> from pprint import pprint +>>> pprint(some_transactions['accounts']) +[{'account_id': 'qwp96Z11b5IBKVMl8XvLSkJXjgj6ZxIXX3o79', + 'name': 'Plaid Checking', + 'subtype': 'checking' + ...}, + {'account_id': 'Kk9ZL7NN4wSX3lR9evV8f9P4GVGk3BF33QnAM', + 'name': 'Plaid Saving', + 'subtype': 'savings' + ...}, + {'account_id': 'rEy96MWWgXukrnBW4yVphv7yl3lznosBBzo6n', + 'name': 'Plaid CD', + 'subtype': 'cd' + ...} + {'account_id': '9rNKomMMdWTvVL4X9RP6UKb4qEqng1uJJ6nQw', + 'name': 'Plaid Credit Card', + 'subtype': 'credit' + ...}] +>>> len(some_transactions['transactions']) +100 +``` +## Get **The Right** Transactions + +Looking at the transactions themselves, we see that there is a `category` field which sometimes has a list of values, +sometimes `None`. Among the categories there are "Transfer", "Credit Card", and "Deposit": These aren't going to be +useful in gleaning spending activity, so we'll refactor our `get_some_transactions` function to 1) skip transactions +with those categories and 2) skip accounts with a subtype of "savings" or "cd". Let's also 3) make sure to get all +available transactions by using pagination and 4) just return transactions. + +```python +>>> some_transactions['transactions'].keys() +dict_keys(['account_id', 'account_owner', 'amount', 'category', 'category_id', 'date', 'location', 'name', 'payment_meta', 'pending', 'pending_transaction_id', 'transaction_id', 'transaction_type']) +>>> {category for transaction in some_transactions['transactions'] if some_transactions['category'] for category in trans['category']} +{'Airlines and Aviation Services', + 'Coffee Shop', + 'Credit Card', + 'Deposit', + 'Fast Food', + 'Food and Drink', + 'Payment', + 'Restaurants', + 'Transfer', + 'Travel'} +``` + +[get_some_transactions_v2.py](https://github.com/zevaverbach/spending_summary/blob/master/get_some_transactions_v2.py) + +```python +import math +... +# https://plaid.com/docs/api/#transactions +MAX_TRANSACTIONS_PER_PAGE = 500 +OMIT_CATEGORIES = ["Transfer", "Credit Card", "Deposit"] + + +def get_some_transactions(access_token: str, start_date: str, end_date: str) -> List[dict]: + account_ids = [account['account_id'] for account in plaid_client.Accounts.get(access_token)['accounts'] + if account['subtype'] not in ['cd', 'savings']] + + num_available_transactions = plaid_client.Transactions.get(access_token, start_date, end_date, + account_ids=account_ids)['total_transactions'] + num_pages = math.ceil(num_available_transactions / MAX_TRANSACTIONS_PER_PAGE) + transactions = [] + + for page_num in range(num_pages): + transactions += [transaction + for transaction in plaid_client.Transactions.get(access_token, start_date, end_date, + account_ids=account_ids, + offset=page_num * MAX_TRANSACTIONS_PER_PAGE, + count=MAX_TRANSACTIONS_PER_PAGE)['transactions'] + if transaction['category'] is None + or not any(category in OMIT_CATEGORIES + for category in transaction['category'])] + + return transactions +``` + +Now there are just 265 transactions. Are any of them negative? + +```python +>>> pprint([transaction for transaction in some_transactions if transaction['amount'] < 0]) +[{'amount': -500, + 'category': ['Travel', 'Airlines and Aviation Services'], + 'name': 'United Airlines', + 'transaction_type': 'special', + ...}, + ...] +``` + +Okay, that seems legit -- airfare refund, I guess. Let's keep negative items in. + +## Pulling it All Together + +Now let's get all the transactions from yesterday, making sure to pull them from both accounts. + +[get_yesterdays.py](https://github.com/zevaverbach/spending_summary/blob/master/get_yesterdays.py) + +```python +... +def get_yesterdays_transactions() -> List[dict]: + yesterday = ('2017-05-16' if os.getenv('PLAID_ENV') == 'sandbox' + else (datetime.date.today() - datetime.timedelta(days=1)).strftime('%Y-%m-%d')) + + transactions = [] + + for access_id in [os.getenv('CHASE_ACCESS_TOKEN'), os.getenv('BOFA_ACCESS_TOKEN')]: + transactions += get_transactions_from_multiple_accounts(access_id, yesterday, yesterday) + + return transactions +``` + +As of 5/24/2017, the most recent transactions available in these sandbox accounts are from 5/16/17: Hence, the hardcoded +`yesterday` value above. + +Let's send an SMS to ourselves with the total spent yesterday! + +[send_summary.py](https://github.com/zevaverbach/spending_summary/blob/master/send_summary.py) + +```python +... +from twilio.rest import Client as TwilioClient + +twilio_client = TwilioClient(os.getenv('TWILIO_SID'), os.getenv('TWILIO_TOKEN')) + + +def send_summary(transactions: List[dict]) -> None: + total_spent = sum(transaction['amount'] for transaction in transactions) + + message = f'You spent ${total_spent} yesterday. 💸' + + twilio_client.api.account.messages.create(to=os.getenv('MY_CELL'), from_=os.getenv('MY_TWILIO_NUM'), body=message) + + +``` +Voila! + +![mobile screenshot](screenshot.png) + +## Representing Money as a Float? + +You're gonna have a bad time, 'mkay? If you build anything significant (budget tracker bot?) with the Plaid API, +be sure to convert those transaction amounts to Decimals: + +```python +import decimal +def convert_transaction_amount(transaction_amount): + return decimal.Decimal(transaction_amount) +``` diff --git a/spending_summary.py b/spending_summary.py new file mode 100644 index 0000000..9ca235c --- /dev/null +++ b/spending_summary.py @@ -0,0 +1,60 @@ +import datetime +import math +import os +from typing import List + +from twilio.rest import Client as TwilioClient + +from plaid import Client as PlaidClient + +# these are access IDs from Plaid for a specific bank/credit account +ACCOUNT_ACCESS_IDS: List[str] = [os.getenv('PLAID_ACCESS_ID'), os.getenv('OTHER_PLAID_ACCESS_ID')] +MAX_TRANSACTIONS_PER_PAGE = 500 + +plaid_client = PlaidClient(client_id=os.getenv('PLAID_CLIENT_ID'), secret=os.getenv('PLAID_SECRET'), + public_key=os.getenv('PLAID_PUBLIC_KEY'), environment=os.getenv('PLAID_ENV')) + +twilio_client = TwilioClient(os.getenv('TWILIO_SID'), os.getenv('TWILIO_TOKEN')) + + +def get_num_available_transactions(access_id, start: str, end: str) -> int: + return plaid_client.Transactions.get(access_id, start, end)['total_transactions'] + + +def get_transactions_from_account(access_id: str, start: str, end: str) -> List[dict]: + transactions = [] + num_available_transactions = get_num_available_transactions(access_id, start, end) + num_pages = math.ceil(num_available_transactions / MAX_TRANSACTIONS_PER_PAGE) + + for page_num in range(num_pages): + transactions += plaid_client.Transactions.get(access_id, start, end, + offset=page_num * MAX_TRANSACTIONS_PER_PAGE, + count=MAX_TRANSACTIONS_PER_PAGE)['transactions'] + + return transactions + + +def get_transactions_from_multiple_accounts(access_ids: List[str], start: str, end: str) -> List[dict]: + transactions = [] + for access_id in access_ids: + transactions += get_transactions_from_account(access_id, start, end) + return transactions + + +def get_yesterdays_transactions() -> List[dict]: + yesterday: str = (datetime.date.today() - datetime.timedelta(days=1)).strftime('%Y-%m-%d') + return get_transactions_from_multiple_accounts(ACCOUNT_ACCESS_IDS, yesterday, yesterday) + + +def send_summary(transactions: List[dict]) -> None: + total_spent = sum(transaction['amount'] + for transaction in transactions + if transaction['amount'] > 0) + + message = f'You spent ${total_spent} yesterday. 💸' + + twilio_client.api.account.messages.create(to=os.getenv('MY_CELL'), from_=os.getenv('MY_TWILIO_NUM'), body=message) + + +if __name__ == "__main__": + send_summary(get_yesterdays_transactions()) diff --git a/splurgebot.md b/splurgebot.md deleted file mode 100644 index 0393f1e..0000000 --- a/splurgebot.md +++ /dev/null @@ -1,5 +0,0 @@ -Budgeting. You do it, then you stop doing it. You wake up in a cold sweat and you start tracking your spending again. It sucks: You stop. - -There are tools! Horrible, awful tools that are glorified spreadsheets which think all your Amazon purchases go under `books`. Much data entered, many hairs pulled out. - -Surely this is fodder for a bot. \ No newline at end of file diff --git a/splurgebot.py b/splurgebot.py deleted file mode 100644 index 1b92a77..0000000 --- a/splurgebot.py +++ /dev/null @@ -1,71 +0,0 @@ -import datetime -import os -import time -from typing import List - -import math -from twilio.rest import Client as TwilioClient - -from plaid import Client as PlaidClient - -CHECK_FOR_NEW_TRANSACTIONS_EVERY_X_MINUTES = 5 -ALERT_FOR_TRANSACTIONS_GTE = 500 -MY_CELL = os.getenv('MY_CELL') -MY_TWILIO_NUM = os.getenv('MY_TWILIO_NUM') -PLAID_ENV = os.getenv('PLAID_ENV') or 'sandbox' - -# this is an access ID from Plaid for a specific user and bank/credit account -PLAID_ACCESS_ID = os.getenv('PLAID_ACCESS_ID') - -plaid_client = PlaidClient(client_id=os.getenv('PLAID_CLIENT_ID'), secret=os.getenv('PLAID_SECRET'), - public_key=os.getenv('PLAID_PUBLIC_KEY'), environment=PLAID_ENV) - -twilio_client = TwilioClient(os.getenv('TWILIO_SID'), os.getenv('TWILIO_TOKEN')) - -transaction_ids = set() - - -def get_all_transactions() -> List[dict]: - today = datetime.date.today().strftime('%Y-%m-%d') - total_transactions: int = plaid_client.Transactions.get(PLAID_ACCESS_ID, '1972-01-01', today)['total_transactions'] - all_transactions = [] - for page in range(math.ceil(total_transactions / 500)): - all_transactions += plaid_client.Transactions.get(PLAID_ACCESS_ID, '1972-01-01', today, - offset=page * 500, count=500)['transactions'] - return all_transactions - - -def get_latest_transactions() -> List[dict]: - """get 100 most recent transactions""" - today = datetime.date.today().strftime('%Y-%m-%d') - return [transaction - for transaction in - plaid_client.Transactions.get(PLAID_ACCESS_ID, '1972-01-01', today)['transactions'] - if transaction['transaction_id'] not in transaction_ids] - - -def alert(transaction: dict) -> None: - message = (f'hey, a transaction hit your account that exceeds ${ALERT_FOR_TRANSACTIONS_GTE}: ' - f'{transaction["date"]} {transaction["name"]} ${transaction["amount"]}') - - twilio_client.api.account.messages.create(to=MY_CELL, from_=MY_TWILIO_NUM, body=message) - - -def main() -> None: - if len(transaction_ids) == 0: - transaction_ids.update(transaction['transaction_id'] for transaction in get_all_transactions()) - - while True: - - for transaction in get_latest_transactions(): - - transaction_ids.add(transaction['transaction_id']) - - if transaction['amount'] >= ALERT_FOR_TRANSACTIONS_GTE: - alert(transaction) - - time.sleep(CHECK_FOR_NEW_TRANSACTIONS_EVERY_X_MINUTES * 60) - - -if __name__ == "__main__": - main()