站长资源脚本专栏
Erlang实现的百度云推送Android服务端实例
百度云推送官方地址http://developer.baidu.com/wiki/index.php"http://developer.baidu.com/wiki/index.php">http://developer.baidu.com/wiki/index.php"codetitle">复制代码 代码如下:
start() ->
inets:start(),
{Mega,Sec,_} = now(),
ApiKey = "apikey=aghjklpoikmnbhjklpoijnbfd",%%用户的APIkey
%% 我的设备
% Channel_Id = "channel_id=1234567890098765432",%% 用户的某一设备channelid,也就是客户端demo安装在的手机的channelid
%% 模拟器
Channel_Id = "channel_id=3959774938927755088",%%客户端模拟器的channelid
Device_Type = "device_type=3",%%类型,细节在官方文档中查看,1:浏览器设备;2:PC设备;3:Android设备;4:IOS设备;5:Windows phone设备
Message_Type = "message_type=1",%% 0:消息;1:通知;默认为0
TitleStr = " :kkkk,嘎嘎嘎阿 达航空 件阿 斯顿,,,,哈哈哈,erlang",
DescriptionStr = "行不:行啊!",
Messages0 = "messages={\"title\":\"",
Messages1 = TitleStr,
Messages2 = "\",\"description\":\"",
Messages3 = DescriptionStr,
Messages4 = "\",\"notification_builder_id\":0,"
++ "\"notification_basic_style\":2,\"open_type\":2,\"url\":\"\",\"user_confirm\":0,\"pkg_content\":\"\",\"custom_content\":\"\"}",
Messages = Messages0 ++ Messages1 ++ Messages2 ++ Messages3 ++ Messages4,
Method = "method=push_msg",
Msg_keys= "msg_keys=erlang_keys",
Push_Type = "push_type=1",
Time = "timestamp="++ integer_to_list((Mega * 1000000 + Sec)),
User_Id = "user_id=213123123",%%用户的userid
Url = "http://channel.api.duapp.com/rest/2.0/channel/channel",
Http_Method = "POST",
SecretKey = "123weqwe12wq12eqweqweqwe",%%用户的secretekey
Str0 = Http_Method ++ Url ++ ApiKey ++ Channel_Id ++ Device_Type ++ Message_Type ++ Messages0,
Str1 = Messages2,
Str2 = Messages4 ++ Method ++ Msg_keys ++ Push_Type ++ Time ++ User_Id ++ SecretKey,
TitleBin = list_to_binary(TitleStr),
TIntegerU = unicode:characters_to_list(TitleBin,utf8),
TChanges = utf8(TIntegerU,[]),
Title_Utf8 =
lists:foldl(fun(Change,Acc) ->
case Change of
[Term] when Term >= $a, Term =< $z ->
Acc ++ Change;
[Term] when Term >= $A, Term =< $Z ->
Acc ++ Change;
[Term] when Term >= $0, Term =< $9 ->
Acc ++ Change;
[Term] when Term =:= $. ->
Acc ++ Change;
[Term] when Term =:= $_ ->
Acc ++ Change;
[Term] when Term =:= $- ->
Acc ++ Change;
[Term] when Term =:= 32 ->
Acc ++ [43];
_ ->
Acc ++ list_to_hex_s(Change)
end
end,[],TChanges),
DesBin = list_to_binary(DescriptionStr),
DIntegerU = unicode:characters_to_list(DesBin,utf8),
DChanges = utf8(DIntegerU,[]),
Des_Utf8 =
lists:foldl(fun(Change,Acc) ->
case Change of
[Term] when Term >= $a, Term =< $z ->
Acc ++ Change;
[Term] when Term >= $A, Term =< $Z ->
Acc ++ Change;
[Term] when Term >= $0, Term =< $9 ->
Acc ++ Change;
[Term] when Term =:= $. ->
Acc ++ Change;
[Term] when Term =:= $_ ->
Acc ++ Change;
[Term] when Term =:= $- ->
Acc ++ Change;
_ ->
Acc ++ list_to_hex_s(Change)
end
end,[],DChanges),
StrValue = escape_uri(Str0) ++ Title_Utf8 ++ escape_uri(Str1) ++ Des_Utf8 ++ escape_uri(Str2),
Md5Str = md5_hex(StrValue),
Sign = "sign=" ++ Md5Str,
PostInfo = ApiKey ++ "&" ++ Sign ++ "&" ++ User_Id ++ "&"
++ Channel_Id ++ "&" ++ Device_Type ++ "&" ++ Message_Type ++ "&" ++ Messages
++ "&" ++ Method ++ "&" ++ Msg_keys ++ "&" ++ Push_Type ++ "&" ++ Time,
timer:sleep(30*1000),
Result = httpc:request(post,{Url,[],"application/x-www-form-urlencoded",PostInfo},[],[]),
case Result of
{ok,{{"HTTP/1.1",200,"OK"},_,_}} ->
nothing;
_ ->
io:format("Result:~p~n",[Result])
end.