Example #1
0
class Autobuy:

    lc = None
    #main_filter = 'low-risk2'
    saved_filters = None
    main_filters = []
    main_filter_ids = [8641686, 9061019]

    def __init__(self, email = None, password = None, filter_ids = None):
        if filter_ids != None:
            self.main_filter_ids = filter_ids

        self.lc = LendingClub(email, password)
        self.lc.authenticate()
        self.saved_filters = self.lc.get_saved_filters()
        self.main_filters = \
            filter(lambda x: x.id in self.main_filter_ids, self.saved_filters)

    def lc(self):
        self.lc
    
    def run_all(self):
        loan_ids = []
        for f in self.main_filters:
            loan_ids = list(set(loan_ids) | set(self.run(f)))
        
        if len(loan_ids) > 0:
            order = self.lc.start_order()
            order.add_batch(loan_ids, 25)
            order.execute()
            print "%s loans processed" % len(loan_ids)
            return len(loan_ids)
         
        print "No loans processed"
        return False

    def run(self, _filter = None, just_loans = True):
        if _filter is None:
            raise Exception("No filter specified")
        results = self.lc.search(_filter)
        if results[u'totalRecords'] > 30:
            raise Exception("Filter probably broken, returning > 30 results")
        elif results[u'totalRecords'] == 0:
            return []

        if not just_loans:
            order = self.lc.start_order()
        loans = []
        for result in results[u'loans']:
            loan_id = result[u'loan_id']
            additional_details = self.lc.loan_details(loan_id)
            if additional_details[u'currentJobTitle'] == u'n/a':
                continue
            rate = float(re.findall(r"\d+\.\d+|\d+", additional_details[u'rate'])[0]) 
            term = int(additional_details[u'loanLength'])
            if (term == 36 and rate < 0.19) or rate < 0.22:
                continue
            loans.append(loan_id)
        
        if len(loans) > 0:
            if just_loans:
                return loans
            order.add_batch(loans, 25) 
            order.execute()
            return True

        print "No loans found"
        if just_loans:
            return []
        else:
            return True

    def __str__(self):
        print "Autobuyer"