SMS API Java Class

The TotalSend Java class source is provided for your use or extension

    package com.totalsend;

     

    import java.io.BufferedReader;

    import java.io.IOException;

    import java.io.InputStream;

    import java.io.InputStreamReader;

    import java.net.ConnectException;

    import java.net.HttpURLConnection;

    import java.net.URL;

    import java.net.URLEncoder;

    import java.text.SimpleDateFormat;

    import java.util.Calendar;

    import java.util.HashMap;

    import java.util.Iterator;

    import java.util.Set;

     

    import org.json.JSONObject;

     

     

    public class Api {

        

        private String apiUrl = "http://api.totalsend.com/json";

        private String username;

        private String password;

        

        private String encodingScheme = "UTF-8";

        

        private boolean debug = false;

        

        /**

         * Instantiates a new instance of the API

         * 

         * @param username Your TotalSend username

         * @param password Your TotalSend password

         */

        

        public Api(String username, String password) {

            this.username = username;

            this.password = password;

        }

        

        /**

         * Set's the debugging state

         * 

         * (if on it will print lines to the console, default: off)

         * 

         * @param state

         */

        

        public void setDebugging(boolean state) {

            this.debug = state;

        }

        

        private static java.util.HashMap<string, string=""> createParams(String action) {

            HashMap<string, string=""> map = new HashMap<string, string="">();

            map.put("action", action);

            return map;

        }

        

        private static void addParameter(java.util.Map<string, string=""> map, String key, String value) {

            if(value != null) {

                map.put(key, value);

            }

        }

        

        private static void addParameter(java.util.Map<string, string=""> map, String key, Integer value) {

            if(value != null) {

                map.put(key, String.valueOf(value));

            }

        }

        

        

        private static String convertStreamToString(InputStream is) {

            /*

             * To convert the InputStream to String we use the

             * BufferedReader.readLine() method. We iterate until the BufferedReader

             * return null which means there's no more data to read. Each line will

             * appended to a StringBuilder and returned as String.

             */

            BufferedReader reader = new BufferedReader(new InputStreamReader(is));

            StringBuilder sb = new StringBuilder();

     

            String line = null;

            try {

                while ((line = reader.readLine()) != null) {

                    sb.append(line + "\n");

                }

            } catch (IOException e) {

                e.printStackTrace();

            } finally {

                try {

                    is.close();

                } catch (IOException e) {

                    e.printStackTrace();

                }

            }

            return sb.toString();

        }

        

        private JSONObject call(java.util.Map<string, string=""> map) {

            String workingUrl = apiUrl;

            String key = null;

            String val = null;

            try {

                workingUrl += "?username="+URLEncoder.encode(username, encodingScheme);

                workingUrl += "&password="+URLEncoder.encode(password, encodingScheme);

                

                Set keys = map.keySet();

                Iterator i = keys.iterator();

                

                

                while(i.hasNext()) {

                    key = (String) i.next();

                    val = map.get(key);

                    if(val != null) {

                        workingUrl += "&"+URLEncoder.encode(key, encodingScheme) + "=" +URLEncoder.encode(val, encodingScheme);

                    }

                }

                

                debug("URL to be called "+workingUrl);

                

                URL url = new URL(workingUrl);

                HttpURLConnection urlConnection = (HttpURLConnection)url.openConnection();

                

     

                String result = convertStreamToString(urlConnection.getInputStream());

                

                if(result != null) {

                    if(result.length() > 0) {

                        /* Something */

                        JSONObject json = new JSONObject(result);

                        return json;

                    }

                }

            } catch(ConnectException e) {

                debug("Connection error "+ e.getMessage());

            } catch(Exception e) {

                e.printStackTrace();

            }

            

            return null;

        }

        

        private boolean validateResult(JSONObject json) {

            if(json != null) {

                try {

                    int status = json.getInt("status");

                

                    if(status >= 0) {

                        /* OK! */

                        return true;

                    }

                    debug("result was "+json.toString());

                } catch(Exception e) {

                    e.printStackTrace();

                }

            }

            

            return false;

        }

        

        private void debug(String data) {

            if(this.debug) {

                Calendar cal = Calendar.getInstance();

                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

                String str = "[" + sdf.format(cal.getTime()) + "] "+data;

                System.out.println(str);

            }

        }

        

        /**

         * Send's a message via TotalSend

         * 

         * @param to The destination of the message

         * @param text The text of the message

         * @param from The source of the message (where the user will see it came from)

         * @param report_mask Delivery report mask (See API documentation)

         * @param report_url Delivery report URL (See API documentation)

         * @param charset Character set encoding (default: UTF-8)

         * @param data_coding Data coding (See API documentation)

         * @return

         */

        public String message_send(String to, String text, String from, Integer report_mask, String report_url, String charset, Integer data_coding) {

            HashMap<string, string=""> map = new HashMap<string, string="">();

            addParameter(map, "action", "message_send");

            addParameter(map, "to", to);

            addParameter(map, "text", text);

            addParameter(map, "from", from);

            addParameter(map, "report_mask", report_mask);

            addParameter(map, "report_url", report_url);

            addParameter(map, "charset", charset);

            addParameter(map, "data_coding", data_coding);

            

            JSONObject result = call(map);

            

            if(validateResult(result)) {

                /* Return the message ID */

                try {

                    return result.getString("details");

                } catch(Exception e) {

                    e.printStackTrace();

                }

            }

            

            return null;

        }

        

        /**

         * Check your balance

         * 

         * @return The balance

         */

        public Double user_get_balance() {

            HashMap<string, string=""> map = createParams("user_get_balance");

            JSONObject result = call(map);

            if(validateResult(result)) {

                try {

                    return Double.valueOf(result.getDouble("details"));

                } catch(Exception e) {

                    e.printStackTrace();

                }

            }

            return null;

        }

        

        /**

         * Check the status of a message

         * @param message_id The message ID you wish to check

         * @return A JSONObject containing keys status, cost and parts see ApiExample.java

         */

        public JSONObject message_status(String message_id) {

            HashMap<string, string=""> map = createParams("message_status");

            addParameter(map, "message_id", message_id);

            JSONObject result = call(map);

            if (validateResult(result)) {

                try {

                    return result.getJSONObject("details");

                } catch (Exception e) {

                    e.printStackTrace();

                }

            }

            return null;

        }

        

        

        

        

        

        

     

    }