>  기사  >  백엔드 개발  >  12306 기차표 잔량조회 및 가격조회 최신 api (PHP)

12306 기차표 잔량조회 및 가격조회 최신 api (PHP)

WBOY
WBOY원래의
2016-07-25 08:48:541615검색
사실 제 코드는 나온지 오래됐지만 오픈소스 차이나에는 올린 적도 없고, 당연히 프로그램이 최적화되지 않은 걸 보니 웃겼습니다. 그날은 파이썬 하나!그래도 상관없어 모두가 볼 수 있도록 올릴게요~~ 작년에 12306도 보냈는데 그거 너무 단순하고 가격 문의 같은 것도 없었어요 이 기능은 비교적 완벽해요.
  1. /*
  2. *@Description 열차표 잔여권 조회 및 가격 조회
  3. *@author widuu
  4. *@mktime 2014/ 1/03
  5. *@license http://www.widuu.com
  6. */
  7. header("content-type:text/html;charset='utf-8'");
  8. function gettrain($start,$end,$data){
  9. $station = include('./name.php');
  10. $startstaion = $station[$start];
  11. $endstation = $ station[$end];
  12. if(empty($data)){
  13. $date = date("Y-m-d",time());
  14. }else{
  15. $num = 폭발(" -", $data);
  16. if(count($num)==2){
  17. $date = date("Y",time())."-".$data;
  18. } else if(count($num)==3){
  19. $date = $data;
  20. }else{
  21. exit("시간 오류");
  22. }
  23. }
  24. if(empty($startstaion)||empty($endstation)){
  25. exit("stdin error");
  26. }
  27. $url ="http://kyfw.12306.cn/otn/ lcxxcx/query?목적_코드=ADULT&queryDate=$date&from_station=$startstaion&to_station=$endstation";
  28. $data = doget($url);
  29. if(!$data['status']){
  30. 종료( '검사 오류');
  31. }else{
  32. $data = $data['data']['datas'];
  33. foreach ($data as $key => $value) {
  34. $price = doget("http://kyfw.12306.cn/otn/leftTicket/queryTicketPrice?train_no=".$data[$key]["train_no"]."&from_station_no=".$data[$key] ["from_station_no"]."&to_station_no=".$data[$key]["to_station_no"]."&seat_types=".$data[$key]["seat_types"]."&train_date=$date");
  35. $data[$key]["gr_num"] = $data[$key]["gr_num"]."(".$price["data"]["A6"].")";
  36. $ data[$key]["qt_num"] = $data[$key]["qt_num"]."(".$price["data"]["OT"][0].")";
  37. $data[$key]["rw_num"] = $data[$key]["rw_num"]."(".$price["data"]["A4"].")";
  38. $data [$key]["rz_num"] = $data[$key]["rz_num"]."(".$price["data"]["A2"].")";
  39. $data[$ 키]["tz_num"] = $data[$key]["tz_num"]."(".$price["data"]["P"].")";
  40. $data[$key] ["wz_num"] = $data[$key]["wz_num"]."(".$price["data"]["WZ"].")";
  41. $data[$key][" yw_num"] = $data[$key]["yw_num"]."(".$price["data"]["A3"].")";
  42. $data[$key]["yz_num" ] = $data[$key]["yz_num"]."(".$price["data"]["A1"].")";
  43. $data[$key]["ze_num"] = $data[$key]["ze_num"]."(".$price["data"]["O"].")";
  44. $data[$key]["zy_num"] = $data [$key]["zy_num"]."(".$price["data"]["M"].")";
  45. $data[$key]["swz_num"]= $data[$ key]["swz_num"]."(".$price["data"]["A9"].")";
  46. }
  47. }
  48. return $data;
  49. }
  50. function doget($url){
  51. if(!function_exists('file_get_contents')) {
  52. $optionget = array('http' => array('method' => "GET" , '헤더' => "사용자 에이전트: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)rn수락:*/*rnReferer:https://kyfw.12306.cn/otn/lcxxcx/init"));
  53. $file_contents = file_get_contents($url, false , stream_context_create($optionget)) ;
  54. }else {
  55. $ch = 컬_init();
  56. $timeout = 5;
  57. $header = array(
  58. 'Accept:*/*',
  59. 'Accept-Charset:GBK,utf -8;q=0.7,*;q=0.3',
  60. '수용-인코딩:gzip,deflate,sdch',
  61. '수용 언어:zh-CN,zh;q=0.8,ja;q =0.6,en;q=0.4',
  62. '연결:keep-alive',
  63. '호스트:kyfw.12306.cn',
  64. '참조자:https://kyfw.12306.cn/ otn/lcxxcx/init',
  65. );
  66. 컬_setopt($ch, CURLOPT_URL, $url);
  67. 컬_setopt($ch, CURLOPT_HTTPHEADER,$header);
  68. 컬_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  69. 컬_setopt($ch, CURLOPT_SSL_VERIFYHOST,1);
  70. 컬_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
  71. 컬_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
  72. $file_contents = 컬_exec ($ch);
  73. 컬_닫기($ch);
  74. }
  75. $file_contents = json_decode($file_contents,true);
  76. return $file_contents;
  77. }
  78. /*
  79. *这个由于时间紧写的, 所以很多地方还需要优化, 希望大家改善一下, 可以分身와文件缓存적형의형式提高执行速島--缺点执行速島慢--유효화
  80. */
  81. $data = gettrain("北京","天津","01-03");
  82. /*
  83. * ["gr_num"]=>高级软卧
  84. * ["qt_num"]=> ;其他
  85. * ["rw_num"]=> 软卧
  86. * ["rz_num"]=>软座
  87. * ["tz_num"]=>特等座
  88. * ["wz_num"]=>无座
  89. * ["yw_num "]=>硬卧
  90. * ["yz_num"]=>硬座
  91. * ["ze_num"]=>2等座
  92. * ["zy_num"]=> 一等座
  93. * ["swz_num"]=> 商务座
  94. */
  95. $str="";
  96. foreach($data as $key =>$value){
  97. $str.="화차车列次:{$data[$ key]['station_train_code']}";
  98. $str.="始发站:{$data[$key]['start_station_name']},终点站{$data[$key]['end_station_name'] }
    ";
  99. $str.="출发时间:{$data[$key]['start_time']},到站时间:{$data[$key]['arrive_time']}< ;br>";
  100. $str.="";
  101. $str.= strpos($data[$key]["gr_num"],"()") ? "" :"높은 수준의 데이터[$key]["gr_num"]."
    ";
  102. $str.= strpos($data[$key]["qt_num" "],"()") ? "" :"其他余票화价格:".$data[$key]["qt_num"]."
    ";
  103. $str.= strpos($data[$key]["rw_num" ],"()") ? "" :"软卧余票화价格:".$data[$key]["rw_num"]."
    ";
  104. $str.= strpos($data[$key]["rz_num" ],"()") ? "" :"软座余票화价格:".$data[$key]["rz_num"]."
    ";
  105. $str.= strpos($data[$key]["tz_num "],"()") ? "" :"特等座余票화价格:".$data[$key]["tz_num"]."
    ";
  106. $str.= strpos($data[$key]["wz_num "],"()") ? "" :"无座余票화价格:".$data[$key]["wz_num"]."
    ";
  107. $str.= strpos($data[$key]["yw_num" "],"()") ? "" :"硬卧余票화价格:".$data[$key]["yw_num"]."
    ";
  108. $str.= strpos($data[$key]["yz_num" ],"()") ? "" :"硬座余票화价格:".$data[$key]["yz_num"]."
    ";
  109. $str.= strpos($data[$key]["ze_num" ],"()") ? "" :"이중 저장 데이터:".$data[$key]["ze_num"]."
    ";
  110. $str.= strpos($data[$key][" zy_num"],"()") ? "" :"一等座余票和价格:".$data[$key]["zy_num"]."
    ";
  111. $str.= strpos($data[$key][" swz_num"],"()") ? "" :"商务座余票화价格:".$data[$key]["swz_num"]."
    ";
  112. $str.= "========== ============下一列火车上===============================
  113. }
  114. echo $str;
复제대码


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.