ホームページ >バックエンド開発 >PHPチュートリアル >WeChat パブリック プラットフォームの天気クエリ、鉄道チケットのクエリ、エクスプレス クエリ、リトル イエロー チキン、翻訳、バス クエリの実装

WeChat パブリック プラットフォームの天気クエリ、鉄道チケットのクエリ、エクスプレス クエリ、リトル イエロー チキン、翻訳、バス クエリの実装

WBOY
WBOYオリジナル
2016-07-25 08:50:351308ブラウズ
ソースの QR コードをスキャンして試すことができます。
  1. /**
  2. * wechat phpテスト
  3. */
  4. include("ABClient.php"); //Aibang.comからSDKを適用してダウンロード
  5. define("FNAPK", "API key") ; //この Baidu アプリケーション duapp.com は、アプリケーションによって取得された API キーを作成します
  6. define("WAPK","key") //このキーのアドレスは http://lbsyun.baidu.com/apiconsole/key?application です。 =key Get
  7. //トークンを定義します
  8. define("TOKEN", "ここに独自のトークンを書き込みます");
  9. $wechatObj = new wechatCallbackapiTest();
  10. $wechatObj->responseMsg();
  11. class wechatCallbackapiTest
  12. {
  13. private $model;
  14. private $name;
  15. public function __construct(){
  16. $this->model = new ABClient();
  17. $a = $this->model->test_transfer();
  18. $this - >name = include("name.php");
  19. }
  20. public function valid()
  21. {
  22. $echoStr = $_GET["echostr"];
  23. //有効な署名、オプション
  24. if($this- > ;checkSignature()){
  25. echo $echoStr;
  26. exit;
  27. }
  28. }
  29. public function responseMsg()
  30. {
  31. //投稿データを取得します。環境が異なる可能性があります
  32. $postStr = $GLOBALS[ " HTTP_RAW_POST_DATA"];
  33. // 投稿データを抽出します
  34. if (!empty($postStr)){
  35. $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
  36. $fromUsername = $postObj->FromUserName ;
  37. $toUsername = $postObj->ToUserName;
  38. $type = $postObj->MsgType;
  39. $event = $postObj->Event;
  40. $c = $postObj->Location_X;
  41. $d = $ postObj ->Location_Y;
  42. $keyword = trim($postObj->Content);
  43. $time = time();
  44. $msgid = $postObj->MsgId;
  45. $textTpl = "
  46. < ; ToUserName>
  47. %s< / CreateTime>
  48. < FuncFlag> ;0
  49. ";
  50. if($type == "event" && $event == "subscribe")
  51. {
  52. $msgType = "text";
  53. $contentStr.= "ようこそ Weidu Network をフォローしてください。このパブリック プラットフォームには次の機能があります: nn";
  54. $contentStr.= "1. 中国語または英語の翻訳用の文字を直接入力します ("Hello"n";
  55. $contentStr.=)。 "2 .天気クエリの場合は「天気 + 地域」を入力します (例: "天気 + 石家荘"n";
  56. $contentStr.= "3. 公共交通機関のクエリの場合は「都市 + 出発地 + 目的地」を入力します。例: "石家荘 +鉄道駅 + 公家荘 "n";
  57. $contentStr.= "4. 小さな雌犬とチャットするには、「@anycontent」と入力します (例: "@little bitch"n";
  58. $contentStr.= "5. 地理的位置を送信します) WeChat に天気情報のクエリを送信して、n";
  59. $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
  60. echo $resultStr;
  61. }else if($ type == "テキスト"){
  62. $keywords =explode("+",$keyword);
  63. $b =explode("@",$keyword);
  64. if(isset($b[1])){
  65. $contentStr = $this->simsim($b[1]);
  66. $msgType = "text";
  67. $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
  68. echo $ resultStr;
  69. exit();
  70. }
  71. if($keywords[0]=="train"){
  72. $city = $keywords[1];
  73. $end = $keywords[2];
  74. $time = $keywords[3];
  75. $result = $ this->doget($city,$end,$time);
  76. if(!empty($result)){
  77. $result =trip_tags($result['datas']);
  78. $return_str = str_replace("  ;","",$result);
  79. $return_str = str_replace("\n","",$return_str);
  80. $a =explode(",",$return_str);
  81. $name =array();
  82. $c = array_chunk($a,16);
  83. array_pop($c);
  84. foreach($c as $k =>$v){
  85. $str="残りの投票数:n ビジネス席:".$v [5].」、特等席:「.$v[6].」、一等席:「.$v[7].」、二等席:「.$v[8].」、プレミアムソフトスリーパー: ".$v[9]."、ソフトスリーパー: ".$v[10]."、ハードスリーパー: ".$v[11]."、ソフトシート: ".$v[12]." 、ハードシート: " .$v[13]."、シートなし: ".$v[14]."、その他: ".$v[15];
  86. $str = preg_replace("/ハードシート:-- ,/","" ,$str);
  87. $str = preg_replace("/ビジネス席:--,/","",$str);
  88. $str = preg_replace("/プレミアムクラス席:--, /","",$ str);
  89. $str = preg_replace("/ファーストクラスシート:--,/","",$str);
  90. $str = preg_replace("/セカンドクラスシート:--, /","",$ str);
  91. $str = preg_replace("/アドバンスト ソフト スリーパー:--,/","",$str);
  92. $str = preg_replace("/ソフト スリーパー:--,/ ","",$str);
  93. $str = preg_replace("/ハードスリーパー:--,/","",$str);
  94. $str = preg_replace("/ソフトシート:--,/", "",$str);
  95. $str = preg_replace("/ハードシート:--,/","",$str);
  96. $str = preg_replace("/その他:--/","",$ str);
  97. $contentStr.="列車番号: {$v[1]}、出発駅: {$v[2]}、到着駅: {$v[3]}、所要時間: {$v[4] }。 n{$str}nn";
  98. if($k == 12){
  99. Break;
  100. }
  101. }
  102. }else{
  103. $contentStr.="見つかりませんでした";
  104. }
  105. $msgType = "text " ;
  106. $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
  107. echo $resultStr;
  108. exit();
  109. }
  110. if(isset($keywords[1]) && !isset($keywords[2])){
  111. if($this->pexpress(trim($keywords[0]))){
  112. $a = $this->express(trim($keywords[0 ] ),trim($keywords[1]));
  113. if($a["message"]=="ok"){
  114. if($a['ischeck']==1){
  115. $contentStr.= "あなたのパッケージは nn に対して署名されていません";
  116. }else{
  117. $contentStr.="あなたのパッケージは nn に対して署名されていません";
  118. }
  119. $data = $a['data'];
  120. foreach($data as $k =>$v){
  121. $contentStr.="更新時刻: {$v["time"]}n物流ステータス: {$v["context"]}nn";
  122. }
  123. }else{
  124. $ contentStr = "クエリが失敗しました。正しいクエリを入力してください。";
  125. }
  126. $msgType = "text";
  127. $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
  128. echo $ resultStr;
  129. }else{
  130. $weather = $this->weather($keywords[1]);
  131. if(!empty($weather))
  132. {
  133. $data = $this->json2array($w​​eather) ;
  134. foreach($data as $k =>$v)
  135. {
  136. $str.=$v['date'].'。天気: '.$v['天気'].'。風速: '.$v['wind'].'。気温: '.$v['温度']."nn";
  137. }
  138. }else{
  139. $str="天気 + 北京など、正しい住所を入力してください";
  140. }
  141. $msgType = " text" ;
  142. $contentStr = $str;
  143. $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
  144. echo $resultStr;
  145. }
  146. }else if(isset( $keywords [2])&&($keywords[0]!=="train")){
  147. $city = $keywords[0];
  148. $start = $keywords[1];
  149. $end =$keywords[2 ];
  150. $a = $this->model->test_transfer($city,$start,$end);
  151. if(!empty($a)){
  152. foreach($a as $k=>$ v) {
  153. $contentStr.= "Route{$c}:".$v['dist']." メートル。推定時間: {$v['time']} 分。nBus ルート: {$ v['segments' ]["segment"][0]["line_name"]}。n 乗車場所: {$v['segments']["segment"][0]["start_stat"]}。 ['セグメント']["セグメント"][0]["end_stat"]}。n经过路線:{$v['segments']["segment"][0]["stats"]}nn";
  154. if($k == 4){
  155. Break;
  156. }
  157. }
  158. }else {
  159. $contentStr="抱歉没有查询到";
  160. }
  161. $msgType = "text";
  162. $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
  163. echo $resultStr;
  164. }else{
  165. $fanyi = $this->fanyi($keyword);
  166. $msgType = "text";
  167. $contentStr = $fanyi;
  168. $resultStr = sprintf($textTpl, $fromUsername, $ toUsername, $time, $msgType, $contentStr);
  169. echo $resultStr;
  170. }
  171. }else if($type == 'location'){
  172. $result = $this->address($c,$d) );
  173. if(isset($result['district'])){
  174. $weather = $this->weather($result['district']);
  175. if(!$weather){
  176. $weather = $ this->weather($result['city']);
  177. }
  178. }else{
  179. $weather = $this->weather($result['city']);
  180. }
  181. $data = $this ->json2array($w​​eather);
  182. foreach($data as $k =>$v){
  183. $str.=$v['date'].'。天気:'.$v['weather'] .'。风速:'.$v['wind'].'。温度:'.$v['温度']."nn";
  184. }
  185. $msgType = "text";
  186. $contentStr = $str;
  187. $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time , $msgType, $contentStr);
  188. echo $resultStr;
  189. }else{
  190. echo "您可输入点什么";
  191. }
  192. }else {
  193. echo "";
  194. exit;
  195. }
  196. }
  197. //获取地理的位置の
  198. プライベート関数 address($addx,$addy)
  199. {
  200. $arr = array();
  201. $result = $this->map_text("http://api.map.baidu.com/geocoder/ v2/?ak=".WAPK."&callback=renderReverse&location={$addx},{$addy}&output=xml&pois=0");
  202. $data = simplexml_load_string($result, 'SimpleXMLElement', LIBXML_NOCDATA);
  203. $result = $this->json2array($data);
  204. $arr = $result["result"]["addressComponent"];
  205. $address = $result['result']['formatted_address'];
  206. array_push($ arr,$address);
  207. return $arr;
  208. }
  209. //解析jsonは数组
  210. private function json2array($json) {
  211. if ($json) {
  212. foreach ((array)$json as $k=> $v) {
  213. $data[$k] = !is_string($v) ? $this->json2array($v) : $v;
  214. }
  215. return $data;
  216. }
  217. }
  218. //获取天气情報
  219. プライベート関数weather($data)
  220. {
  221. //根元API调用出出データ台
  222. $url="http://api.map.baidu.com/telematics/v2/weather?location={$data}&output=json&ak=".WAPK;
  223. $weather=$this->map_text($url) ;
  224. $data = json_decode($weather);
  225. return $data->results;
  226. }
  227. //调用翻译的api
  228. private function fanyi($data)
  229. {
  230. //根元API调用出力データ台
  231. $url ="http://openapi.baidu.com/public/2.0/bmt/translate?client_id=".FANAPK."&q={$data}&from=auto&to=auto";
  232. $fanyi=$this->map_text ($url);
  233. $shuju=json_decode($fanyi);
  234. $result=$shuju->trans_result;
  235. return $result[0]->dst;
  236. }
  237. // 解析地址のapi
  238. private function map_text($url)
  239. {
  240. if(!function_exists('file_get_contents')) {
  241. $file_contents = file_get_contents($url);
  242. } else {
  243. $ch =curl_init();
  244. $timeout = 5;
  245. curl_setopt ( $ch, CURLOPT_URL, $url);
  246. curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
  247. curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
  248. $file_contents =curl_exec($ch);
  249. curl_close($ch);
  250. }
  251. return $file_contents;
  252. }
  253. プライベート関数 checkSignature()
  254. {
  255. $signature = $_GET["signature"];
  256. $timestamp = $_GET["timestamp"];
  257. $nonce = $_GET["nonce" ];
  258. $token = TOKEN;
  259. $tmpArr = array($token, $timestamp, $nonce);
  260. sort($tmpArr);
  261. $tmpStr = implode( $tmpArr );
  262. $tmpStr = sha1( $tmpStr );
  263. if( $tmpStr == $signature ){
  264. return true;
  265. }else{
  266. return false;
  267. }
  268. }
  269. プライベート関数 simsim($keywords){
  270. $curlPost=array("txt"=>$キーワード);
  271. $ch =curl_init();//初化curl
  272. curl_setopt($ch,CURLOPT_URL,'http://xiaohuangji.com/ajax.aspx');//抓取指定网页
  273. curl_setopt($ch, CURLOPT_HEADER, 0);//設置ヘッダー
  274. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//要求結果は文字列で画面上に出力
  275. curl_setopt($ch, CURLOPT_POST, 1);//ポスト提交方式
  276. curl_setopt ($ch, CURLOPT_POSTFIELDS, $curlPost);
  277. $data =curl_exec($ch);//実行curl
  278. curl_close($ch);
  279. return $data;
  280. }
  281. private function pexpress($exname){
  282. $a = $this->map_text("http://www.kuaidi100.com/");
  283. preg_match_all("/data-code="(?Pw+)">(?P< ;title>.*)/iU",$a,$b);
  284. $name = array();
  285. foreach($b['title'] as $k=>$v){
  286. $name[$v] = $b['name'][$k];
  287. }
  288. if(!empty($name[$exname])){
  289. return true;
  290. }else{
  291. return false;
  292. }
  293. }
  294. プライベート関数express($keywords,$number){
  295. $a = $this->map_text("http://www.kuaidi100.com/");
  296. preg_match_all("/data-code=" (?Pw+)">(?P.*)/iU",$a,$b);
  297. $name = array();
  298. foreach ($b['title'] as $k=>$v){
  299. $name[$v] = $b['name'][$k];
  300. }
  301. $this->name = $name ;
  302. $keywords = $name[$keywords];
  303. $url = "http://www.kuaidi100.com/query?type={$keywords}&postid={$number}";
  304. $result = $this- >map_text($url);
  305. $result = $this->json2array(json_decode($result));
  306. return $result;
  307. }
  308. プライベート関数 doget ($start,$end,$time) // get获取データベース使用
  309. {
  310. if(empty($time)){
  311. $time = date('Y-m-d',time());
  312. }else{
  313. if(substr($time,0,1)!=0){
  314. $time = date('Y-0',time()).$time;
  315. }else{
  316. $time = date(' Y-',time()).$time;
  317. }
  318. }
  319. $star = $this->name[$start];
  320. $end = $this->name[$end];
  321. $url = "http://dynamic.12306.cn/otsquery/query/queryRemanentTicketAction.do?method=queryLeftTicket&orderRequest.train_date={$time}&orderRequest.from_station_telecode={$star}&orderRequest.to_station_telecode={$end}&orderRequest.train_no=&trainPassType =QB&trainClass=QB%23D%23Z%23T%23K%23QT%23&includeStudent=00&seatTypeAndNum=&orderRequest.start_time_str=00%3A00--24%3A00";
  322. $optionget = array('http' => array('method' => "GET", 'header' => "ユーザー エージェント:Mozilla/4.0 (互換性; MSIE 7.0; Windows NT 6.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5. 21022; .NET CLR 3.0.04506; CIBA)rnAccept:*/*rnReferer:http://dynamic.12306.cn/otsquery/query/queryRemanentTicketAction.do?method=init"));
  323. $file = file_get_contents($url, false , stream_context_create($optionget));
  324. return $this->json2array(json_decode($file));
  325. }
  326. }
  327. ?>
复制帽


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。