- 浏览: 262690 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
小清新雪仔_:
报错The import org.springframewor ...
Spring Security oAuth学习之Hello World -
hrybird:
http://www.dolit.cn/portfolios/ ...
LightVOD P2P点播系统完全开源 -
xiaoxiao_qiang:
感谢,正在学习oAuth,有机会一起交流
Spring Security oAuth学习之Hello World -
thinkgem:
你好,lightvodcode.zip现在不能下了,能否发我一 ...
LightVOD P2P点播系统完全开源 -
gdw520:
<div style="text-align: ...
如何实现javascript截图 jQuery插件imgAreaSelect使用详解
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 email: yaoxinghuo at 126 dot com
*@version create: Aug 5, 2009 11:17:23 AM
*@version update: Oct 28, 2009 00:11:00 AM
*@description 飞信API(fetionlib) HTTP简单调用举例 另有Restlet的方式可供调用。网页版飞信首页:http://fetionlib.appspot.com/
* 小提示:免费开通飞信:如果您的手机号没有开通飞信,可以到中国移动飞信网站查看开通,或者直接编辑短信KTFX发送到10086开通
* 修改飞信密码:手机编辑新密码(6到16位,不能是中文或全角字符)内容发送到12520050
*
* 2009.11.23更新:已增加简易版飞信界面,可以使用iframe嵌套或者直接使用提供的HTML代码粘贴到您的网页,详情点击http://fetionlib.appspot.com/simple_fetion.html
*
* 直接在浏览器里输入以下地址(您的手机号码和密码请自行更改,密码不要包含/,朋友号码请填写自己的手机号码):
* 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例子,其他语言类似
* 注意,如果您使用Eclipse等IDE,最好文本源代码编码为UTF-8,否则可能得到中文信息产生乱码。
* 如有疑问或对API的接口调用方式有任何更好的建议,欢迎提出宝贵意见
*
* 本飞信API包括的所有功能为:1)获取好友列表 2)发送即时短信 3)发送定时短信 4)删除定时短信 5)邀请添加好友 6)测试能否登录
* 调用方式支持GET和POST,POST方式还支持群发(8个或8个以下好友)和定时群发(定时群发最多30个好友),请看下面例子
*
* 近期发现有人利用本程序给他人发送轰炸短信,给他人造成严重骚扰,同时也大量消耗本站资源,已作如下限制:
* 同一个手机号给同一个好友的发短信API以及其他的API(如:添加好友、获取好友列表等)请求间隔为30秒,30秒内的类似请求将无法完成。
* 注:考虑到实际需要,给自己发送短信(手机号和对方好友号码相同或者群发好友里面包含自己手机号)的API请求将不会有30秒时间间隔的限制!
*
* 重要提示:近期所有appspot的https都惨遭RESET,请先前使用API的用户,把调用地址中https改成http
*
* 本飞信API接口程序由Google强力驱动、免费托管,将长期保留,示例程序用到的json包,请到www.json.org下载jar包,也可到这里下载
*/
public class Test {
private static Log log = LogFactory.getLog(Test.class);
public static void main(String[] args) {
//测试发短信,注意:相同手机号,相同好友的请求的调用间隔要超过30秒(除非好友中包含你自己的手机号),否则不成功(responseCode:406)
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","自己姓名", "对方姓名");
// 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", new String[]{"aglmZXRpb25saWJyGgsSB0FjY291bnQYAQwLEgdNZXNzYWdlGCQM")};
// System.out.println("schedule message delete result:"+b2);
//测试能否登录(以测试密码是否正确)
// boolean b3 = fetchToLoginTest("13812345678", "12345678"};
// System.out.println("login test result:"+b3);
}
private static final int TRY_TIMES = 3;
private static final int TIME_OUT = 30000;
/**
*发送短消息 更简单的Get方式(中文请先URLEncode,不支持群发,如要群发用下面POST方式,已更新),直接在浏览器里输入以下地址,手机号码和密码请自行改掉:
* http://fetionlib.appspot.com/restlet/fetion/13812345678/password/13912345678/message 成功返回OK
* 否则返回Message Not Sent,如果要群发或者您的密码包含/或者需要提交中文消息避免可能的乱码最好请用以下的程序(POST方式)
*@param friends
* 短信接收方的好友们
* 注意参数String[] friends 中的数组可以是好友的手机号,也可以是后面用程序取到的好友的uri,详见后面取得好友列表的说明
* 如fetchToSendSMS("13812345678","password",new String[]{"sip:12345678@fetion.com.cn;p=5065","13912345678","tel:15912345678"},"Test");
* 好友数不能超过8个,如果有需要,请用程序分开来多次调用
* 注意:相同手机号,相同好友的请求的调用间隔要超过30秒,否则不成功(responseCode:406),但接受好友中包含你自己的手机号的请求不受30秒的限制!
*@param message
* 短信内容,字数不能超过180字
*/
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;
}
/**
*取得好友列表 GET方式为:
* http://fetionlib.appspot.com/restlet/fetion/friendsList/13812345678/password
* 成功将返回JSON格式的好友列表,如果您不了解JSON格式,请先网上查阅相关知识,
* 如:[{"nickname":"Jerry","localname":"小张","uri":"sip:123456@fetion.com.cn;p=6012","mobile":"13912345678"}]
* 其中nickname是对方给自己设置的昵称,localname是您给对方设置的名字,mobile是对方公开的手机号,uri是该用户的标识符,可用于发送短信时传递的参数
* 注意nickname、localname、mobile 这三个字段可能为空,如果为空,将不会再JSON中显示!
* 如果因得到好友的信息是乱码而报错,请在IDE中将源码编码改成UTF-8,或者手动修改读取Stream的编码方式为UTF-8
* 不成功返回空白
* 注意:相同手机号调用间隔要超过30秒,否则不成功(responseCode:406)
*
* 您从JSONArray中取得的uri,如sip:123456@fetion.com.cn;p=6012或可能为tel:13912345678,
* 可直接作为参数传入上面的例子中发送短信, 如果有mobile,也可以传入mobile如13916416465,
* 不过有些时候,对方不公开手机号,便无法获取手机号,只有通过uri来发送短信
*
*/
public static JSONArray fetchToGetFriends(String mobile, String password) {
String uuid = UUID.randomUUID().toString();
for (int i = 0; i < TRY_TIMES; i++) {
try {
URL postUrl = new URL(
"http://fetionlib.appspot.com/restlet/fetion/friendsList");
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;
out.writeBytes(content);
out.flush();
out.close();
int responseCode = connection.getResponseCode();
if (responseCode == 202) {
BufferedReader reader = new BufferedReader(
new InputStreamReader(connection.getInputStream(), "UTF-8")); // 读取结果
StringBuffer sb = new StringBuffer();
String line;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
reader.close();
connection.disconnect();
return new JSONArray(sb.toString());
} else {
connection.disconnect();
}
} catch (Exception e) {
log.warn("error fetchToGetFriends, exception:" + e.getMessage()
+ ". tried " + i + " times");
}
}
return null;
}
/**
*邀请好友 GET方式为(中文请先URLEncode):
* http://fetionlib.appspot.com/restlet/fetion/friend/13812345678/password/13912345678/Name/FriendName 返回数字-1或0或1,见下面说明
*
*@param friend
* 被邀请好友的手机号
*@param desc
* 您的姓名(不能超过5个字),对方收到邀请短信时,会显示这个名字,以便让对方知道您是谁
*@param nickname
* 对方的姓名(不能超过10个字),如果对方同意的话,这个名字会作为您的好友名称显示
*
*@return -1错误或者对方手机号不支持(如全球通用户), 0对方已经是您的好友 1成功发送邀请短信,等待对方回复是否同意
* 注意:相同手机号调用间隔要超过30秒,否则不成功(responseCode:406)
*/
public static int fetchToAddFriend(String mobile, String password,
String friend, String desc, String nickname) {
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/friend");
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=" + friend
+ "&desc=" + URLEncoder.encode(desc, "utf-8")
+ "&nickname=" + URLEncoder.encode(nickname, "utf-8");
out.writeBytes(content);
out.flush();
out.close();
responseCode = connection.getResponseCode();
if (responseCode == 202) {
BufferedReader reader = new BufferedReader(
new InputStreamReader(connection.getInputStream(), "UTF-8")); // 读取结果
StringBuffer sb = new StringBuffer();
String line;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
reader.close();
connection.disconnect();
JSONObject jo = new JSONObject(sb.toString());
return jo.getInt("action");
} else {
connection.disconnect();
return -1;
}
} catch (Exception e) {
log.warn("error fetchToAddFriend, exception:" + e.getMessage()
+ ". tried " + i + " times");
}
}
return -1;
}
/**
*发送定时短信 GET方式为(注意中文请先URLEncode,时间是太平洋时间和北京时间时差8小时,GET方式不支持群发,如要群发用下面POST方式):
* http://fetionlib.appspot.com/restlet/fetion/schedule/13812345678/password/13912345678/message/2009-08-08%2012:18 成功返回sid号码,否则返回空白(空格)
*
*POST方式如下
*
*@param message
* 短信内容,字数不能超过180字
*@param date
* 发送日期格式为yyyy-MM-dd HH:mm,注意日期为时区为0的标准时间,北京时间的时区是8,所以要减去8小时;
* 如计划2009-08-08 20:18分发送,应该填写2009-08-08 12:18;
* 中国移动还规定日期要超出现在时间20分钟但不能超过1年。
*@param friends
* 接受短信的好友们,其中的数组可以是好友的手机号,也可以是用程序取到的好友的uri,注意好友数不能超过30个,如果有需要,请用程序分开来多次调用
* 注意:相同手机号,相同好友的请求的调用间隔要超过30秒,否则不成功(responseCode:406),但接受好友中包含你自己的手机号的请求不受30秒的限制!
*
*@return 一个sid号码,记下来如果后续要撤销短信发送,需要用到这个号码
*/
public static String fetchToSendScheduleMsg(String mobile, String password,
String[] friends, String message, String date) {
String uuid = UUID.randomUUID().toString();
for (int i = 0; i < TRY_TIMES; i++) {
try {
URL postUrl = new URL(
"http://fetionlib.appspot.com/restlet/fetion/schedule");
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)
+ "&schedule=" + date.replace(" ", "%20") + "&message="
+ URLEncoder.encode(message, "utf-8");
out.writeBytes(content);
out.flush();
out.close();
int responseCode = connection.getResponseCode();
if (responseCode == 202) {
BufferedReader reader = new BufferedReader(
new InputStreamReader(connection.getInputStream(), "UTF-8")); // 读取结果
StringBuffer sb = new StringBuffer();
String line;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
reader.close();
connection.disconnect();
JSONObject jo = new JSONObject(sb.toString());
return jo.getString("sid");
} else {
connection.disconnect();
return null;
}
} catch (Exception e) {
log.warn("error fetchToSaveSchedule, exception:"
+ e.getMessage() + ". tried " + i + " times");
}
}
return null;
}
/**
*删除定时短信 GET方式为:
* http://fetionlib.appspot.com/restlet/fetion/scheduleDelete/13812345678/password/aglmZXRpb25saWJyGgsSB0FjY291bnQYAQwLEgdNZXNzYWdlGCQM
* aglmZXRpb25saWJyGgsSB0FjY291bnQYAQwLEgdNZXNzYWdlGCQM是你发送定时短信返回的sid号码,
* GET方式只支持一次删除一个定时短信,如果要删除多个,请用下面的POST方式,成功返回OK,否则返回Schedule Not Deleted
* 注意:相同手机号调用间隔要超过30秒,否则不成功(responseCode:406)
*
*@param sid
* 发送定时短信时返回的那些sid号码(不能超过10个sid),多个用数组的形式,程序会转换成JSON提交
*
*/
public static boolean fetchToDeleteScheduleMsg(String mobile,
String password, String[] sids) {
String uuid = UUID.randomUUID().toString();
for (int i = 0; i < TRY_TIMES; i++) {
try {
URL postUrl = new URL(
"http://fetionlib.appspot.com/restlet/fetion/scheduleDelete");
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 + "&sids="
+ convertArrayToJSONString(sids);
out.writeBytes(content);
out.flush();
out.close();
int responseCode = connection.getResponseCode();
connection.disconnect();
if (responseCode == 202)
return true;
else
return false;
} catch (Exception e) {
log.warn("error fetchToDeleteSchedule, exception:"
+ e.getMessage() + ". tried " + i + " times");
}
}
return false;
}
/**
*测试能否登录成功 GET方式为:
* http://fetionlib.appspot.com/restlet/fetion/loginTest/13812345678/password
* 成功返回OK,不成功返回Login Failed
*
* 注意:相同手机号调用间隔要超过30秒,否则不成功(responseCode:406)
*/
public static boolean fetchToLoginTest(String mobile, String password) {
String uuid = UUID.randomUUID().toString();
for (int i = 0; i < TRY_TIMES; i++) {
try {
URL postUrl = new URL(
"http://fetionlib.appspot.com/restlet/fetion/loginTest");
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;
out.writeBytes(content);
out.flush();
out.close();
int responseCode = connection.getResponseCode();
connection.disconnect();
if (responseCode == 202)
return true;
else
return false;
} catch (Exception e) {
log.warn("error fetchToLoginTest, 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");
}
}
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 email: yaoxinghuo at 126 dot com
*@version create: Aug 5, 2009 11:17:23 AM
*@version update: Oct 28, 2009 00:11:00 AM
*@description 飞信API(fetionlib) HTTP简单调用举例 另有Restlet的方式可供调用。网页版飞信首页:http://fetionlib.appspot.com/
* 小提示:免费开通飞信:如果您的手机号没有开通飞信,可以到中国移动飞信网站查看开通,或者直接编辑短信KTFX发送到10086开通
* 修改飞信密码:手机编辑新密码(6到16位,不能是中文或全角字符)内容发送到12520050
*
* 2009.11.23更新:已增加简易版飞信界面,可以使用iframe嵌套或者直接使用提供的HTML代码粘贴到您的网页,详情点击http://fetionlib.appspot.com/simple_fetion.html
*
* 直接在浏览器里输入以下地址(您的手机号码和密码请自行更改,密码不要包含/,朋友号码请填写自己的手机号码):
* 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例子,其他语言类似
* 注意,如果您使用Eclipse等IDE,最好文本源代码编码为UTF-8,否则可能得到中文信息产生乱码。
* 如有疑问或对API的接口调用方式有任何更好的建议,欢迎提出宝贵意见
*
* 本飞信API包括的所有功能为:1)获取好友列表 2)发送即时短信 3)发送定时短信 4)删除定时短信 5)邀请添加好友 6)测试能否登录
* 调用方式支持GET和POST,POST方式还支持群发(8个或8个以下好友)和定时群发(定时群发最多30个好友),请看下面例子
*
* 近期发现有人利用本程序给他人发送轰炸短信,给他人造成严重骚扰,同时也大量消耗本站资源,已作如下限制:
* 同一个手机号给同一个好友的发短信API以及其他的API(如:添加好友、获取好友列表等)请求间隔为30秒,30秒内的类似请求将无法完成。
* 注:考虑到实际需要,给自己发送短信(手机号和对方好友号码相同或者群发好友里面包含自己手机号)的API请求将不会有30秒时间间隔的限制!
*
* 重要提示:近期所有appspot的https都惨遭RESET,请先前使用API的用户,把调用地址中https改成http
*
* 本飞信API接口程序由Google强力驱动、免费托管,将长期保留,示例程序用到的json包,请到www.json.org下载jar包,也可到这里下载
*/
public class Test {
private static Log log = LogFactory.getLog(Test.class);
public static void main(String[] args) {
//测试发短信,注意:相同手机号,相同好友的请求的调用间隔要超过30秒(除非好友中包含你自己的手机号),否则不成功(responseCode:406)
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","自己姓名", "对方姓名");
// 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", new String[]{"aglmZXRpb25saWJyGgsSB0FjY291bnQYAQwLEgdNZXNzYWdlGCQM")};
// System.out.println("schedule message delete result:"+b2);
//测试能否登录(以测试密码是否正确)
// boolean b3 = fetchToLoginTest("13812345678", "12345678"};
// System.out.println("login test result:"+b3);
}
private static final int TRY_TIMES = 3;
private static final int TIME_OUT = 30000;
/**
*发送短消息 更简单的Get方式(中文请先URLEncode,不支持群发,如要群发用下面POST方式,已更新),直接在浏览器里输入以下地址,手机号码和密码请自行改掉:
* http://fetionlib.appspot.com/restlet/fetion/13812345678/password/13912345678/message 成功返回OK
* 否则返回Message Not Sent,如果要群发或者您的密码包含/或者需要提交中文消息避免可能的乱码最好请用以下的程序(POST方式)
*@param friends
* 短信接收方的好友们
* 注意参数String[] friends 中的数组可以是好友的手机号,也可以是后面用程序取到的好友的uri,详见后面取得好友列表的说明
* 如fetchToSendSMS("13812345678","password",new String[]{"sip:12345678@fetion.com.cn;p=5065","13912345678","tel:15912345678"},"Test");
* 好友数不能超过8个,如果有需要,请用程序分开来多次调用
* 注意:相同手机号,相同好友的请求的调用间隔要超过30秒,否则不成功(responseCode:406),但接受好友中包含你自己的手机号的请求不受30秒的限制!
*@param message
* 短信内容,字数不能超过180字
*/
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;
}
/**
*取得好友列表 GET方式为:
* http://fetionlib.appspot.com/restlet/fetion/friendsList/13812345678/password
* 成功将返回JSON格式的好友列表,如果您不了解JSON格式,请先网上查阅相关知识,
* 如:[{"nickname":"Jerry","localname":"小张","uri":"sip:123456@fetion.com.cn;p=6012","mobile":"13912345678"}]
* 其中nickname是对方给自己设置的昵称,localname是您给对方设置的名字,mobile是对方公开的手机号,uri是该用户的标识符,可用于发送短信时传递的参数
* 注意nickname、localname、mobile 这三个字段可能为空,如果为空,将不会再JSON中显示!
* 如果因得到好友的信息是乱码而报错,请在IDE中将源码编码改成UTF-8,或者手动修改读取Stream的编码方式为UTF-8
* 不成功返回空白
* 注意:相同手机号调用间隔要超过30秒,否则不成功(responseCode:406)
*
* 您从JSONArray中取得的uri,如sip:123456@fetion.com.cn;p=6012或可能为tel:13912345678,
* 可直接作为参数传入上面的例子中发送短信, 如果有mobile,也可以传入mobile如13916416465,
* 不过有些时候,对方不公开手机号,便无法获取手机号,只有通过uri来发送短信
*
*/
public static JSONArray fetchToGetFriends(String mobile, String password) {
String uuid = UUID.randomUUID().toString();
for (int i = 0; i < TRY_TIMES; i++) {
try {
URL postUrl = new URL(
"http://fetionlib.appspot.com/restlet/fetion/friendsList");
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;
out.writeBytes(content);
out.flush();
out.close();
int responseCode = connection.getResponseCode();
if (responseCode == 202) {
BufferedReader reader = new BufferedReader(
new InputStreamReader(connection.getInputStream(), "UTF-8")); // 读取结果
StringBuffer sb = new StringBuffer();
String line;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
reader.close();
connection.disconnect();
return new JSONArray(sb.toString());
} else {
connection.disconnect();
}
} catch (Exception e) {
log.warn("error fetchToGetFriends, exception:" + e.getMessage()
+ ". tried " + i + " times");
}
}
return null;
}
/**
*邀请好友 GET方式为(中文请先URLEncode):
* http://fetionlib.appspot.com/restlet/fetion/friend/13812345678/password/13912345678/Name/FriendName 返回数字-1或0或1,见下面说明
*
*@param friend
* 被邀请好友的手机号
*@param desc
* 您的姓名(不能超过5个字),对方收到邀请短信时,会显示这个名字,以便让对方知道您是谁
*@param nickname
* 对方的姓名(不能超过10个字),如果对方同意的话,这个名字会作为您的好友名称显示
*
*@return -1错误或者对方手机号不支持(如全球通用户), 0对方已经是您的好友 1成功发送邀请短信,等待对方回复是否同意
* 注意:相同手机号调用间隔要超过30秒,否则不成功(responseCode:406)
*/
public static int fetchToAddFriend(String mobile, String password,
String friend, String desc, String nickname) {
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/friend");
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=" + friend
+ "&desc=" + URLEncoder.encode(desc, "utf-8")
+ "&nickname=" + URLEncoder.encode(nickname, "utf-8");
out.writeBytes(content);
out.flush();
out.close();
responseCode = connection.getResponseCode();
if (responseCode == 202) {
BufferedReader reader = new BufferedReader(
new InputStreamReader(connection.getInputStream(), "UTF-8")); // 读取结果
StringBuffer sb = new StringBuffer();
String line;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
reader.close();
connection.disconnect();
JSONObject jo = new JSONObject(sb.toString());
return jo.getInt("action");
} else {
connection.disconnect();
return -1;
}
} catch (Exception e) {
log.warn("error fetchToAddFriend, exception:" + e.getMessage()
+ ". tried " + i + " times");
}
}
return -1;
}
/**
*发送定时短信 GET方式为(注意中文请先URLEncode,时间是太平洋时间和北京时间时差8小时,GET方式不支持群发,如要群发用下面POST方式):
* http://fetionlib.appspot.com/restlet/fetion/schedule/13812345678/password/13912345678/message/2009-08-08%2012:18 成功返回sid号码,否则返回空白(空格)
*
*POST方式如下
*
*@param message
* 短信内容,字数不能超过180字
*@param date
* 发送日期格式为yyyy-MM-dd HH:mm,注意日期为时区为0的标准时间,北京时间的时区是8,所以要减去8小时;
* 如计划2009-08-08 20:18分发送,应该填写2009-08-08 12:18;
* 中国移动还规定日期要超出现在时间20分钟但不能超过1年。
*@param friends
* 接受短信的好友们,其中的数组可以是好友的手机号,也可以是用程序取到的好友的uri,注意好友数不能超过30个,如果有需要,请用程序分开来多次调用
* 注意:相同手机号,相同好友的请求的调用间隔要超过30秒,否则不成功(responseCode:406),但接受好友中包含你自己的手机号的请求不受30秒的限制!
*
*@return 一个sid号码,记下来如果后续要撤销短信发送,需要用到这个号码
*/
public static String fetchToSendScheduleMsg(String mobile, String password,
String[] friends, String message, String date) {
String uuid = UUID.randomUUID().toString();
for (int i = 0; i < TRY_TIMES; i++) {
try {
URL postUrl = new URL(
"http://fetionlib.appspot.com/restlet/fetion/schedule");
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)
+ "&schedule=" + date.replace(" ", "%20") + "&message="
+ URLEncoder.encode(message, "utf-8");
out.writeBytes(content);
out.flush();
out.close();
int responseCode = connection.getResponseCode();
if (responseCode == 202) {
BufferedReader reader = new BufferedReader(
new InputStreamReader(connection.getInputStream(), "UTF-8")); // 读取结果
StringBuffer sb = new StringBuffer();
String line;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
reader.close();
connection.disconnect();
JSONObject jo = new JSONObject(sb.toString());
return jo.getString("sid");
} else {
connection.disconnect();
return null;
}
} catch (Exception e) {
log.warn("error fetchToSaveSchedule, exception:"
+ e.getMessage() + ". tried " + i + " times");
}
}
return null;
}
/**
*删除定时短信 GET方式为:
* http://fetionlib.appspot.com/restlet/fetion/scheduleDelete/13812345678/password/aglmZXRpb25saWJyGgsSB0FjY291bnQYAQwLEgdNZXNzYWdlGCQM
* aglmZXRpb25saWJyGgsSB0FjY291bnQYAQwLEgdNZXNzYWdlGCQM是你发送定时短信返回的sid号码,
* GET方式只支持一次删除一个定时短信,如果要删除多个,请用下面的POST方式,成功返回OK,否则返回Schedule Not Deleted
* 注意:相同手机号调用间隔要超过30秒,否则不成功(responseCode:406)
*
*@param sid
* 发送定时短信时返回的那些sid号码(不能超过10个sid),多个用数组的形式,程序会转换成JSON提交
*
*/
public static boolean fetchToDeleteScheduleMsg(String mobile,
String password, String[] sids) {
String uuid = UUID.randomUUID().toString();
for (int i = 0; i < TRY_TIMES; i++) {
try {
URL postUrl = new URL(
"http://fetionlib.appspot.com/restlet/fetion/scheduleDelete");
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 + "&sids="
+ convertArrayToJSONString(sids);
out.writeBytes(content);
out.flush();
out.close();
int responseCode = connection.getResponseCode();
connection.disconnect();
if (responseCode == 202)
return true;
else
return false;
} catch (Exception e) {
log.warn("error fetchToDeleteSchedule, exception:"
+ e.getMessage() + ". tried " + i + " times");
}
}
return false;
}
/**
*测试能否登录成功 GET方式为:
* http://fetionlib.appspot.com/restlet/fetion/loginTest/13812345678/password
* 成功返回OK,不成功返回Login Failed
*
* 注意:相同手机号调用间隔要超过30秒,否则不成功(responseCode:406)
*/
public static boolean fetchToLoginTest(String mobile, String password) {
String uuid = UUID.randomUUID().toString();
for (int i = 0; i < TRY_TIMES; i++) {
try {
URL postUrl = new URL(
"http://fetionlib.appspot.com/restlet/fetion/loginTest");
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;
out.writeBytes(content);
out.flush();
out.close();
int responseCode = connection.getResponseCode();
connection.disconnect();
if (responseCode == 202)
return true;
else
return false;
} catch (Exception e) {
log.warn("error fetchToLoginTest, 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");
}
}
发表评论
-
【工具】ANT的安装和配置(windows)
2011-08-16 13:07 9731、下载:到ANT官方网站http://ant.apache. ... -
使用Axis开发Web Service程序
2011-06-16 08:32 861今天差点又要在公司加 ... -
flowplayer的破解
2011-04-24 13:53 9281这些天作视频项目时用到了开源的flowplayer,再网上下了 ... -
网站开发流程-WEB开发的流程
2011-04-21 08:18 11321. web开发流程概括 1.) ... -
Java调用linux命令ffmpeg视频转码
2011-04-01 17:54 1943Java调用linux命令ffmpeg视频转码 java.i ... -
FFmpeg linux下標准安裝 及 web使用
2011-04-01 17:53 35981,下載LAME(Lame Aint an MP3 Encod ... -
安装和使用ffmpeg转换视频为flv文件(windows和linux)
2011-04-01 17:49 2084安装和使用ffmpeg转换视频为flv文件(windows和l ... -
java调用dll
2011-03-02 17:34 1753一.在程序用jnative调用window的dll 1. ... -
java处理日期时间 相加减
2011-02-28 16:33 950JAVA处理日期时间常用方法: 1.java.util.C ... -
java随机生成十六进制颜色
2010-12-17 09:02 7573/** * 获取十六进制的颜色代码.例如 &qu ... -
java保留小数位问题
2010-12-08 16:07 2131java保留两位小数问题: 补充 (double)(Ma ... -
要和.net进行一次交互HTTPt发过来的XML格式
2010-08-13 15:05 1077今天干活时有个需求,要和.net进行一次交互,想在Struts ... -
LightVOD P2P点播系统完全开源
2010-06-21 09:55 6368http://www.lightvod.com 源码下载及配 ... -
排序复习
2010-03-10 16:33 799package algorithms; /** * @a ... -
The content of element type "web-app" must match解决
2010-01-26 12:46 1861The content of element type &qu ... -
JAVA错误处理大集合
2009-12-23 15:29 17310、 需要标识符 a) 不在函数内 1、 非法表达式开始 b) ...
相关推荐
import java.io.IOException; ... ... ... ...public static void main(String[] args) throws Exception{ final Fetion fetion = new Fetion("phone","password");...System.out.println("excute[" + e.getBody().trim()....
Java利用飞信API发送短信是一项常见的任务,尤其是在自动化通知或者服务监控中。飞信API允许开发者通过编程方式向飞信用户发送短信,从而实现各种定制化的功能。在本文中,我们将详细探讨如何使用Java实现这一功能,...
- **发送短信**: 通过飞信API,开发者可以在服务器端编写代码,向指定的手机号码发送短信,实现远程通知或者验证码验证等功能。 - **接收短信**: 同样,飞信API也支持接收来自手机用户的短信,这在处理用户反馈、...
飞信(Fetion)短信发送接口API是一个用于在无需打开飞信客户端的情况下,通过编程方式向飞信联系人发送短信的技术。FetionLite是一个轻量级的飞信客户端软件,它的主要功能就是实现这一服务,使得开发者可以通过...
飞信的API允许开发者通过编程方式与飞信服务器进行通信,发送短信就是其中的一项功能。 在使用飞信API之前,你需要注册成为飞信开放平台的开发者,获取到API的接入密钥(如AppKey和AppSecret)。这些密钥用于认证你...
飞信webapi短信发送php开源版, 当然改成其它语言也没什么难度。
在本项目中,我们探讨的是如何使用易语言来编写一个利用中国移动飞信API的程序,实现免费发送短信的功能,这对于监控报警提示等应用场景非常实用。 首先,了解中国移动飞信API是关键。飞信是中国移动推出的一款即时...
飞信feition--免费给手机发短信的软件!
这里的飞信API指的是飞信提供的对外接口,开发者可以利用这个接口在自己的应用中实现发送短信的功能。 2. **API(Application Programming Interface)**:API是一系列预先定义的函数或方法,用于让不同的软件系统...
飞信API通常由一系列的函数、类和方法组成,这些组件共同构成了一个接口,使得开发者可以通过它们来实现发送消息、接收消息、管理好友列表、查看用户状态等功能。在“飞信Symbian客户端接口规范”文档中,可能详细列...
在Java开发环境中,通过飞信API,我们可以轻松地集成飞信的功能,实现程序自动发送短信的能力。 这篇内容将详细介绍如何使用飞信API以及相关的jar文件下载和集成过程。 首先,飞信API为Java开发者提供了一系列的...
在Java飞信API中,这些函数可能包括发送短信、接收短信、管理联系人等操作。 对于开发者来说,使用Java飞信API首先需要引入相关的jar包,即`fetion_java_api`中的文件。这个jar包包含了API的所有实现,尽管源代码被...
作为一款强大的短信工具,飞信的最大特点就是它允许用户向中国移动的手机用户发送短信完全免费,极大地降低了通信成本,尤其在当时网络通信尚未普及的年代,这一特性受到了广大用户的热烈欢迎。 飞信的主要功能包括...
飞信API接口在PHP中的实现是一项技术挑战,它涉及到网络通信、数据编码解码以及对飞信协议的理解...通过提供的示例代码、库文件和文档,开发者可以学习并实现自己的飞信API客户端,实现无验证码且稳定的飞信发送功能。
飞信API接口是用于与中国移动飞信系统进行交互的一种编程接口,主要由PHP语言实现,允许开发者通过编程方式发送短信、接收短信等操作。在Web应用中,这种接口常被用来实现自动化或定制化的短信通知功能,比如在用户...
在代码示例中,提到了使用C#和Java调用非官方飞信API发送短信的方法。通过引用特定的DLL文件,并实现登录、发送短信和登出的步骤,开发者可以在他们的应用中集成飞信功能。然而,由于非官方API的不稳定性和潜在风险...
飞信是中国移动推出的一款即时...总结来说,"利用飞信机器人发送短信"这个项目涵盖了飞信API的使用、VC++ GUI开发、网络编程、数据解析以及错误处理等多个IT知识点,对于提升编程技能和理解通信协议有很好的实践价值。
4. 功能使用:了解并熟悉飞信的各项功能,如如何发送短信、发起语音通话,以及如何加入和管理群组等。 5. 更新维护:由于这是较早的版本,可能需要定期关注是否有新的更新,以获取更好的性能和安全修复。 在即时...