[Prosperapi-commits] SF.net SVN: prosperapi: [18] trunk/api/src/main
Brought to you by:
jonrssll
From: <pro...@li...> - 2008-02-24 18:10:19
|
Revision: 18 http://prosperapi.svn.sourceforge.net/prosperapi/?rev=18&view=rev Author: rateladder Date: 2008-02-24 10:10:21 -0800 (Sun, 24 Feb 2008) Log Message: ----------- QuickCnipe added to SourceForge Added Paths: ----------- trunk/api/src/main/java/ trunk/api/src/main/java/src/ trunk/api/src/main/java/src/prosper/ trunk/api/src/main/java/src/prosper/api/ trunk/api/src/main/java/src/prosper/api/QuickSnipe.java Added: trunk/api/src/main/java/src/prosper/api/QuickSnipe.java =================================================================== --- trunk/api/src/main/java/src/prosper/api/QuickSnipe.java (rev 0) +++ trunk/api/src/main/java/src/prosper/api/QuickSnipe.java 2008-02-24 18:10:21 UTC (rev 18) @@ -0,0 +1,126 @@ +package prosper.api; + +import java.math.BigDecimal; +import java.math.MathContext; +import java.rmi.RemoteException; +import java.sql.Timestamp; +import java.util.Calendar; +import java.util.Iterator; +import java.util.TreeMap; + +import javax.xml.rpc.ServiceException; + +import com.prosper.services.ProsperAPI.DefinitionResult; +import com.prosper.services.ProsperAPI.Field; +import com.prosper.services.ProsperAPI.Listing; +import com.prosper.services.ProsperAPI.ProsperAPILocator; +import com.prosper.services.ProsperAPI.ProsperAPISoap; +import com.prosper.services.ProsperAPI.ProsperObject; +import com.prosper.services.ProsperAPI.ProsperObjectResult; + +public class QuickSnipe +{ + private String m_Username; + private String m_Password; + private double m_MinROI; + private int m_HoursToGo; + private boolean m_PlaceBids; + private ProsperAPISoap m_APISoap; + + public QuickSnipe(String username, String password, double minROI, int hoursToGo, boolean placeBids) throws ServiceException + { + m_Username = username; + m_Password = password; + m_MinROI = minROI; + m_PlaceBids = placeBids; + m_HoursToGo = hoursToGo; + m_APISoap = (new ProsperAPILocator()).getProsperAPISoap(); + } + /** + * @param args + */ + public static void main(String[] args) + { + if (args.length!=5) + { + System.err.println("Usage: QuickSnipe username password minROI hoursToGo PlaceBids"); + return; + } + try + { + QuickSnipe qs = new QuickSnipe(args[0], args[1], Double.parseDouble(args[2]), Integer.parseInt(args[3]), Boolean.parseBoolean(args[4])); + qs.snipe(); + } + catch (Exception e) + { + e.printStackTrace(System.err); + } + } + + private void snipe() throws Exception + { + DefinitionResult res = m_APISoap.login(m_Username,m_Password); + String token = res.getMessage(); + ProsperObjectResult por = m_APISoap.query(token, "listing", getFieldsString("listing",true), "status=2 and (creditgrade=7 or creditgrade=6 or creditgrade=5 or creditgrade=4)"); + ProsperObject[] pos = por.getProsperObjects(); + TreeMap<Calendar,Listing> timeLeftListings = new TreeMap<Calendar,Listing>(); + for (int i=0; i<pos.length; i++) + { + Listing l = (Listing)pos[i]; + Calendar end = (Calendar)l.getStartDate().clone(); + end.add(Calendar.HOUR, (l.getDuration()*24)); + long millisToGo = end.getTimeInMillis() - System.currentTimeMillis(); + if (l.getNowDelinquent()==0 //my required extended credit and ROI + && (millisToGo/1000/60/60)<=m_HoursToGo + && l.getInquiriesLast6Months()<2 + && l.getPublicRecordsLast10Years()==0 + && l.getDelinquenciesLast7Years()==0 + && l.getBankcardUtilization().doubleValue()<=.8 + && l.getBankcardUtilization().doubleValue()>=.03 + && ((l.getBidMaximumRate().doubleValue()+l.getROINetDefaultRate().doubleValue()+l.getROIInterestAndFeesRate().doubleValue()+l.getROIServicingFeeRate().doubleValue())>=m_MinROI) + ) + { + timeLeftListings.put(end, l); + } + } + boolean pause = false; + for (Iterator<Listing> i = timeLeftListings.values().iterator(); i.hasNext(); ) + { + if (pause) // you have to pause to avoid bid throttling + {try {Thread.sleep(6000);}catch (Exception ignore){}} + Listing l = i.next(); + Timestamp startts = new Timestamp(l.getStartDate().getTimeInMillis()); + Calendar end = (Calendar)l.getStartDate().clone(); + end.add(Calendar.HOUR, (l.getDuration()*24)); + Timestamp endts = new Timestamp(end.getTimeInMillis()); + long hoursToGo = (end.getTimeInMillis() - System.currentTimeMillis())/1000/60/60; + System.err.println("\n"+startts+" + "+l.getDuration()+" days = "+endts+" | Hours To Go: "+hoursToGo); + System.err.println("Bid on Listing: "+l.getListingNumber()+"\nAt Rate: "+(m_MinROI-l.getROINetDefaultRate().doubleValue()-l.getROIInterestAndFeesRate().doubleValue()-l.getROIServicingFeeRate().doubleValue())); + res = m_APISoap.bid(token, l.getListingNumber(), new BigDecimal(50,new MathContext(4)), new BigDecimal(m_MinROI-l.getROINetDefaultRate().doubleValue()-l.getROIInterestAndFeesRate().doubleValue()-l.getROIServicingFeeRate().doubleValue(),new MathContext(4)), m_PlaceBids); + pause = true; + System.err.println("Bid Message: "+res.getMessage()); + } + m_APISoap.logout(token); + } + + private String getFieldsString(String type, boolean authenticated) throws RemoteException + { + DefinitionResult res = m_APISoap.describe(null, type); + Field[] fields = res.getDefinition().getFields(); + int count = 0; + String s=""; + for (int i=0; i<fields.length; i++) + { + if (authenticated || !fields[i].isAuthenticated()) + { + if (count!=0) + { + s+= ","; + } + s+= fields[i].getName(); + count++; + } + } + return s; + } +} \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |