程式調用飛信API發送免費簡訊(JAVA例子,其他語言一樣用)

來源:互聯網
上載者:User

網上看到有網頁版的飛信,http://fetionlib.appspot.com/ 可以添加好友,群發和定時傳送簡訊給飛信好友,還開放了API介面供程式調用,可以用它來監控機器是否正常服務定期給管理員發簡訊,或者小規模的網站給會員發簡訊之類的服務。

重要提示:近期所有appspot的https都慘遭RESET,請先前使用API的使用者,把調用地址中https改成http

簡單測試一下:http://fetionlib.appspot.com/restlet/fetion/13812345678/password/13912345678/message

其中13812345678 和13912345678是發送方和接收方的手機號碼,注意這兩個號碼必須相互是好友,我們把它換成自己的手機號碼,讓它發送給自己,password改成您的密碼,在瀏覽器裡輸入該好後的連結,稍等片刻,如果成功,便會顯示OK,此時您的手機應該能收到自己發來的message。

好了,上面是最簡單的測試,廢話不多說了,下面放Java調用的例子,來實現傳送簡訊,發送和取消定時簡訊,加好友等一系列動作。其他語言應該類似的調用Http Connection用GET或POST去實現。下面例子上是發簡訊的,其他的如取得好友名單、發送和取消定時簡訊、添加好友的例子請直接查看http://fetionlib.appspot.com/api.html

package com.test;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.UUID;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import org.json.JSONArray;
import org.json.JSONObject;

/**
 *@author Terry Email: yaoxinghuo at 126 dot com
 *@version create: Aug 5, 2009 11:17:23 AM
 *@version update: Oct 15, 2009 00:11:00 AM
 *@description 飛信API(fetionlib) HTTP簡單調用舉例 另有Restlet的方式可供調用。網頁版飛信首頁:http://fetionlib.appspot.com/
 *              小提示:免費開通飛信:如果您的手機號沒有開通飛信,可以到中國移動飛信網站查看開通,或者直接編輯簡訊KTFX發送到10086開通
 *              修改飛信密碼:手機編輯新密碼(6到16位,不能是中文或全形字元)內容發送到12520050
 *              直接在瀏覽器裡輸入以下地址(您的手機號碼和密碼請自行更改,密碼不要包含/,朋友號碼請填寫自己的手機號碼):
 *              http://fetionlib.appspot.com/restlet/fetion/13812345678/password/13912345678/message
 *              以上四個用/隔開的加粗的地方,應該分別替換成:您的手機號、密碼、對方手機號(可以寫自己的手機號發給自己)、簡訊內容(不超過180字),
 *              如果是密碼錯誤,沒有開通飛信,對方不是您好友等原因不能發送都是返回提示Message Not Sent,只有成功返回OK
 *              如果要發送中文,最好用URLEncode(UTF-8編碼,如“你好”Encode後為%E4%BD%A0%E5%A5%BD,現已支援)或後面舉的例子(POST方式,注意調用的URL略有不同)
 *              如果您可以收到自己發給自己的簡訊,恭喜您,測試通過,你可以用您熟悉的語言通過POST或GET調用,調用格式請看下面Java例子,其他語言類似
 *              如有疑問或對API的介面調用方式有任何更好的建議,歡迎提出寶貴意見
 * 
 *              現已經更新支援取得好友名單、POST方式的群發(8個或8個以下好友)和定時發送群發(定時群發最多30個好友),請看更新的例子
 * 
 *              更新近期發現有人利用本程式給他人發送轟炸簡訊,給他人造成嚴重騷擾,同時也大量消耗本站資源,已作如下限制:
 *              同一個手機號給同一個好友的發簡訊API以及其他的API(如:添加好友、擷取好友名單等)請求間隔為30秒,30秒內的類似請求將無法完成。
 *              註:考慮到實際需要,給自己傳送簡訊(手機號和對方好友號碼相同或者群發好友裡麵包含自己手機號)的API請求將不會有30秒時間間隔的限制!
 * 
 *              本飛信API介面程式由Google強力驅動、免費託管,將長期保留,樣本程式用到的json包,請到www.json.org下載jar包,也可到這裡下載
 */
public class Test {
    private static Log log = LogFactory.getLog(Test.class);

    public static void main(String[] args) {
        //測試發簡訊
        boolean b = fetchToSendSMS("13812345678", "12345678", new String[] { "13812345678" },
                "TestMessage");
        System.out.println("Send Message result:" + b);

        //測試取得好友名單
        // JSONArray friends = fetchToGetFriends("13812345678", "12345678");
        // System.out.println("friends:/r/n"+ (friends == null ? "null" : friends.toString()));

        //測試添加好友
        // int result = fetchToAddFriend("13812345678", "12345678","13812345678","TestMyName", "TestFriendName");
        // System.out.println("Add Friend result:"+result);

        //測試發送定時簡訊(注意是太平洋時間,所以2009-10-09 01:00 是北京時間09:00發奧)
        // String sid = fetchToSendScheduleMsg("13812345678", "12345678", new String[]{"13912345678"}, "TestScheduleMessage", "2009-10-09 01:00");
        // System.out.println("sid:"+sid);

        //測試刪除定時簡訊
        // boolean b2 = fetchToDeleteScheduleMsg("13812345678", "12345678", "123456");
        // System.out.println("schedule message delete result:"+b2);
    }

    private static final int TRY_TIMES = 3;
    private static final int TIME_OUT = 30000;

    /**
     *發送短訊息 更簡單的Get方式(不支援群發,如要群發用下面POST方式,已更新),直接在瀏覽器裡輸入以下地址,手機號碼和密碼請自行改掉:
     * http://fetionlib.appspot.com/restlet/fetion/13812345678/password/13912345678/message 成功返回OK
     * 否則返回Message Not Sent,如果要群發或者您的密碼包含/或者需要提交中文訊息避免可能的亂碼最好請用以下的程式(POST方式)
     * 注意參數String[] friends 中的數組可以是好友的手機號,也可以是後面用程式取到的好友的uri,詳見後面取得好友名單的說明
     * 如fetchToSendSMS("13812345678","password",new String[]{"sip:12345678@fetion.com.cn;p=5065","13916416465","tel:15912345678"},"Test");
     * 好友數不能超過8個,如果有需要,請用程式分開來多次調用

    * 注意:相同手機號,相同好友的請求的調用間隔要超過30秒,否則不成功(responseCode:406),但接受好友中包含你自己的手機號的請求不受30秒的限制!
     */
    public static boolean fetchToSendSMS(String mobile, String password,
            String[] friends, String message) {
        // 加上UUID的目的是防止這樣的情況,在伺服器上已經成功傳送簡訊,卻在返回結果過程中遇到錯誤,
        // 而導致用戶端繼續嘗試請求,此時讓伺服器根據UUID分辨出該請求已經發送過,避免再次傳送簡訊。
        String uuid = UUID.randomUUID().toString();
        for (int i = 0; i < TRY_TIMES; i++) {
            int responseCode = 0;
            try {
                URL postUrl = new URL(
                        "http://fetionlib.appspot.com/restlet/fetion");
                HttpURLConnection connection = (HttpURLConnection) postUrl
                        .openConnection();
                connection.setConnectTimeout(TIME_OUT);
                connection.setReadTimeout(TIME_OUT);
                connection.setDoOutput(true);
                connection.setRequestMethod("POST");
                connection.setUseCaches(false);
                connection.setInstanceFollowRedirects(true);
                connection.setRequestProperty("Content-Type",
                        "application/x-www-form-urlencoded");
                connection.connect();
                DataOutputStream out = new DataOutputStream(connection
                        .getOutputStream());
                String content = "mobile=" + mobile + "&uuid=" + uuid
                        + "&password=" + password + "&friend=" + convertArrayToJSONString(friends)
                        + "&message=" + URLEncoder.encode(message, "utf-8");
                out.writeBytes(content);

                out.flush();
                out.close();

                responseCode = connection.getResponseCode();
                connection.disconnect();
                if (responseCode == 202)
                    return true;
                else
                    return false;
            } catch (Exception e) {
                log.warn("error fetchToSendSMS, exception:" + e.getMessage()
                        + ". tried " + i + " times");
            }
        }
        return false;
    }

 

 //把數組轉化成JSONString
    private static String convertArrayToJSONString(String[] arr) throws Exception {
           JSONArray ja = new JSONArray();
           for (String a : arr)
                 ja.put(a);//ja.add(a);//?
           return URLEncoder.encode(ja.toString(), "UTF-8");
     }

}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.