class account: def __init__ (self,token): self.loggin = False self.token = token self.processTransactions() # TRANSER def transfer(self, recipientName, a, name ): dest = self.getContactFromName(recipientName) if (dest == {}): return {"speech":"Transfer failed, no account in your contacts with that name","action":"transfer"} destId = dest['id'] data = { "payment": { "currency": "GBP", "amount": a }, "destinationAccountUid": destId, "reference": name } res = httpHelper.post_req(self.token, "https://api-sandbox.starlingbank.com/api/v1/payments/local", data) # res = httpHelper.post_req(self.token, "http://32325652.ngrok.io/", data) return {"speech":"Transfer success","action":"transfer"} # userInfo def getUserInfo(self): accountData = self.getAccountData() cardData = httpHelper.get_req(self.token, "https://api-sandbox.starlingbank.com/api/v1/me") addressData = httpHelper.get_req(self.token, "https://api-sandbox.starlingbank.com/api/v1/addresses") balance = httpHelper.get_req(self.token, "https://api-sandbox.starlingbank.com/api/v1/accounts/balance") balance = balance['effectiveBalance'] return {"accountData":accountData, "cardData":cardData, "addressData":addressData, "balance": balance} # CONTACTS def getContacts(self): contacts = httpHelper.get_req(self.token, "https://api-sandbox.starlingbank.com/api/v1/contacts") return contacts['_embedded']['contacts'] def getContactFromName(self, name): contacts = self.getContacts() for contact in contacts: if (contact['name'] == name): return contact return {} # BALANCE def returnBalance(self): data = httpHelper.get_req(self.token, "https://api-sandbox.starlingbank.com/api/v1/accounts/balance") speech = "You have "+str(data['effectiveBalance'])+" in your balance." return {"speech":speech,"action":"returnBalance"} # ACCOUNT def getAccountData(self): data = httpHelper.get_req(self.token, "https://api-sandbox.starlingbank.com/api/v1/accounts") return data def returnAccSort(self): data = self.getAccountData() speech = "Your sort code is "+str(data['sortCode'])+"." return {"speech":speech,"action":"returnSortCode"} def returnAccCurr(self): data = self.getAccountData() speech = "The currency of your account is "+str(data['currency'])+"." return {"speech":speech,"action":"returnSortCode"} def returnAccNumber(self): data = self.getAccountData() speech = "Your account number is "+str(data['number'])+"." return {"speech":speech,"action":"returnSortCode"} # TRANSACTIONS def getAllTransactions(self): data = httpHelper.get_req(self.token, "https://api-sandbox.starlingbank.com/api/v1/transactions") return data['_embedded']['transactions'] def returnAllTransactions(self): return self.returnTransactions(self.getAllTransactions()) def returnRecentTransaction(self): data = self.getAllTransactions() return self.returnTransactions([data[0]]) def returnTransactions(self, data): transactions = data speech = "" for transaction in transactions: if transaction['direction'] == "OUTBOUND": msg = "Outbound transaction. Amount going out: " + str(transaction['amount']*-1) + " balance remaining: " + str(transaction['balance']) + " Date : " + str(transaction['created']) + "\n\n\n" else: msg = "Inbound transaction. Amount going in: " + str(transaction['amount']) + " balance remaining: " + str(transaction['balance']) + " Date : " + str(transaction['created']) + "\n\n\n" speech += msg return {"speech":speech, "action":"returnTransactions"} # PAYMENT SCHEDULES def getAllPaymentSchedules(self): data = httpHelper.get_req(self.token, "https://api-sandbox.starlingbank.com/api/v1/payments/scheduled") paymentOrders = data ['_embedded'] ['paymentOrders'] return paymentOrders def returnAllPaymentSchedules(self): return self.returnPaymentSchedules(self.getAllPaymentSchedules()) def returnPaymentSchedules(self, data): paymentOrders = data speech = "" for payment in paymentOrders: msg = "This payment is for "+payment['reference'] + " for" + payment['recipientName'] + "of amount " + payment['amount']+"\n" speech += msg return {"speech":speech, "action":"returnPaymentSchedules"} # SAVING GOALS def returnAllSavingsGoals(self): return self.returnSavingGoals(self.getAllSavingGoals()) def returnSavingsGoals(self, data): savingGoals = data if savingGoals == {}: return {} savingGoals = savingGoals['savingsGoalList'] speech = "" for savingGoal in savingGoals: targetAmount = int(savingGoal['target']['minorUnits']) savedAmount = int(savingGoal['totalSaved']['minorUnits']) percentageSaved = savedAmount / targetAmount msg = "For the "+ savingGoal['name'] + " savings goal, you've saved " + str(percentageSaved) + " percent." if (percentageSaved >= 1): msg = "You've reached your goal for " + savingGoal['name'] + "." elif (percentageSaved > 0.7): msg += " Keep going, you're only "+str(targetAmount-savedAmount)+" away." else: msg += " Get saving, you're "+str(targetAmount-savedAmount)+" away. " speech += msg return {"speech":speech, "action":"returnSavingGoals"} def getAllSavingsGoals(self): data = httpHelper.get_req(self.token, "https://api-sandbox.starlingbank.com/api/v1/savings-goals") return data def addSavingsGoal(self, goalName, goalAmount): data = { "name": goalName, "currency": "GBP", "target": { "currency": "GBP", "minorUnits": goalAmount }, "totalSaved": { "currency": "GBP", "minorUnits": 0 }, "savedPercentage": 0 } httpHelper.put_req(self.token, "https://api-sandbox.starlingbank.com/api/v1/savings-goals/b43d3060-2c83-4bb9-ac8c-c627b9c45f8b", data) speech = "You added a new savings goal: "+data['name'] + " for £" + str(data['target']['minorUnits']) + "!" return {"speech": speech, "action":"addSavingGoal"} def deleteSavingsGoal(self, goalName): savingGoals = self.getAllSavingGoals() if savingGoals == {}: return {"speech": "You have no saving goals!", "action":"deleteSavingGoal"} savingGoals = savingGoals['savingsGoalList'] for savingGoal in savingGoals: if (savingGoal['name'] == goalName): sgId = savingGoal['_links']['photo']['href'] if httpHelper.delete_req(self.token, "https://api-sandbox.starlingbank.com/"+sgId) == {}: return {"speech": "Deleting " + goalName + " failed", "action":"deleteSavingGoal"} return {"speech": "Deleted " + goalName, "action":"deleteSavingGoal"} return {} def returnSavingsGoal(self, goalName): savingGoals = self.getAllSavingGoals() if savingGoals == {}: return {"speech": "You have no saving goals!", "action":"getSavingGoal"} savingGoals = savingGoals['savingsGoalList'] for savingGoal in savingGoals: if (savingGoal['name'] == goalName): return self.returnSavingGoals({"savingsGoalList":[savingGoal]}) return {"speech": "Couldn't find that goal!", "action":"returnSavingGoal"} # ANALYTIC def getAllAnalyticsData(self): totalInbound = self.getTotalInbound(30) totalOutbound = self.getTotalOutbound(30) averageInbound = self.getAverageInbound(30) averageOutbound = self.getAverageOutbound(30) allInbound = self.getAllInbounds() allOutbound = self.getAllOutbounds() return {"totalInbound":totalInbound, "totalOutbound":totalOutbound, "averageInbound":averageInbound, "averageOutbound": averageOutbound, "allInbound": allInbound, "allOutbound":allOutbound} def processTransactions(self): transactions = self.getAllTransactions() transactions.reverse() self.analysis = Analytics(transactions) self.analysis.process() # return {"speech":speech, "action":"analysedTransactions"} def getTotalInbound(self, day): return self.analysis.getTotalInbound(int(day)) def returnTotalInbound(self, day): total = self.analysis.getTotalInBound(day) speech = "In " + day + " days " + "you received a total of: £" + str(float("{0:.2f}".format(total))) return {"speech": speech, "action": "returnTotalInBound"} def getTotalOutbound(self, day): return self.analysis.getTotalOutbound(int(day)) def returnTotalOutbound(self, day): total = self.getTotalOutbound(day) speech = "In " + day + " days " + "you spent a total of: £" + str(float("{0:.2f}".format(total))) return {"speech": speech, "action": "returnTotalOutbound"} def getAverageInbound(self, interval): return self.analysis.getAverageInbound(interval) def returnAverageInbound(self, interval): avg = self.analysis.getAverageInbound(int(interval)) speech = "Over " + str(interval) + " days, you receive an average of: " + str(float("{0:.2f}".format(avg))) return {"speech": speech, "action": "returnAverageInbound"} def returnAverageOutbound(self, interval): avg = self.analysis.getAverageOutbound(int(interval)) print("Average: ", avg) speech = "Over " + str(interval) + " days, you spend an average of: " + str(float("{0:.2f}".format(avg))) return {"speech": speech, "action": "returnAverageOutbound"} def getAverageOutbound(self, interval): return self.analysis.getTotalOutbound(interval) def getAllInbounds(self): return self.analysis.getInboundPoints() def getAllOutbounds(self): return self.analysis.getOutboundPoints() def setSpreadsheet(self): transactions = self.getAllTransactions() to_csv = csvHelper.to_csv(transactions)