April 24th, 2010

Groovy send SMS using http post

No Comments », Groovy, by nolifelover

สำหรับใครที่ต้องการส่ง sms ไปยังพวก sms gateway ด้วย grails ลองเอา script ตัวนี้ไปใช้ดูนะครับเป็น groovy script สำหรับการใช้งานส่ง sms ด้วย thaibulksms ครับหากใครไม่ได้ใช้ของที่นี้ก็ลองดูโค้ดเอานะครับ(ไม่ได้ค่าโฆษณาจาก thaibulksms นะครับ อิๆ)

class ThaiBulkSmsEngine{
    def username
    def password
    def sender = 'SMS'
 
    //return a map containing keys as documented
    def send(target, message){
        def conn = new URL("http://www.thaibulksms.com/sms_api.php").openConnection();
        conn.requestMethod = "POST"
        conn.doOutput = true
        conn.outputStream.withWriter("UTF-8") { writer ->
            [ 
    "username":username,"password":password,"msisdn":target,
    "message":message,"sender":sender
            ].each{
                writer.write("&"+URLEncoder.encode(it.key,"UTF-8")+"="+URLEncoder.encode(it.value,"UTF-8"))
            }
        }
        def resultXml = conn.inputStream.text
        parseXml(resultXml)
    }
 
    //return a long
    def readCredits(){
        def conn = new URL("http://www.thaibulksms.com/sms_api.php").openConnection();
        conn.requestMethod = "POST"
        conn.doOutput = true
        conn.outputStream.withWriter("UTF-8") { writer ->
            [
    "username":username,"password":password,"tag":"credit_remain"
            ].each{
                writer.write("&"+URLEncoder.encode(it.key,"UTF-8")+"="+URLEncoder.encode(it.value,"UTF-8"))
            }
        }
        def resultCredit = conn.inputStream.text
        try{
            resultCredit.toLong() //this will generate an exception
        }catch(NumberFormatException e){
            -1
        }
    }
 
    def parseXml(xml){
        def results = [:]
        def replyXml = new XmlParser().parseText(xml)
        if(replyXml.QUEUE.size()>0){
            //Ok
            results.action = 'ok'
            results.status = replyXml.QUEUE[0].Status.text().toInt()
            results.msisdn = replyXml.QUEUE[0].Msisdn.text()
            results.transaction = replyXml.QUEUE[0].Transaction.text()
            results.usedCredit = replyXml.QUEUE[0].UsedCredit.text().toInt()
            results.remainCredit = replyXml.QUEUE[0].RemainCredit.text().toInt()
        }else{
            //Fail
            results.action = 'fail'
            results.status = replyXml.Status.text().toInt()
            results.detail = replyXml.Detail.text()
        }
        results
    }
}
 
//def engine = new ThaiBulkSmsEngine(username:'nolifelover', password:'ไม่บอก')
List lines = new File("sms.txt").readLines() //ผมอ่านมาจากไฟล์ utf-8 นะครับเพราะถ้า hardcode ไปส่งเป็นภาษาไรไม่รู้
engine.send('xxxxxxxxxx',lines[0])
engine.readCredits();

ที่มา

http://blog.bemoko.com/2008/11/19/http-post-with-groovy-to-send-smss-using-web-service/

28 views

Leave a Reply