[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.
|