GVKun编程网logo

聚合数据 Android SDK 12306 火车票查询订票演示示例(火车订票系统数据库)

9

本文将分享聚合数据AndroidSDK12306火车票查询订票演示示例的详细内容,并且还将对火车订票系统数据库进行详尽解释,此外,我们还将为大家带来关于12306火车票余票查询、价格查询最新api、1

本文将分享聚合数据 Android SDK 12306 火车票查询订票演示示例的详细内容,并且还将对火车订票系统数据库进行详尽解释,此外,我们还将为大家带来关于12306火车票余票查询、价格查询最新api、12306火车票余票查询、价格查询最新api(PHP)、12306火车票查询、php实现12306火车票余票查询和价格查询的相关知识,希望对你有所帮助。

本文目录一览:

聚合数据 Android SDK 12306 火车票查询订票演示示例(火车订票系统数据库)

聚合数据 Android SDK 12306 火车票查询订票演示示例(火车订票系统数据库)

1. 聚合 SDK 是聚合数据平台,为移动开发者提供的免费数据接口。使用前请先到聚合平台 (http://www.juhe.cn/) 注册,申请相关数据.

2. 下载 聚合数据 SDK, 将开发包里的 juhe_sdk_v_1_1.jar 拷贝到 libs 根目录下,将 libJuheSDK_v_1_0.so 拷贝到 libs\armeabi 目录下,如图:


3. 根据接口说明文档找到以下方法:

/**
	 * 获取车次
	 * 
	 * @param name
	 *            车次
	 * @param jsonCallBack
	 */
	public void getTrainNum(String name, JsonCallBack jsonCallBack)

/**
	 * 站到站查询
	 * 
	 * @param start
	 *            出发站
	 * @param end
	 *            终点站
	 * @param traintype
	 *            列车类型
	 * @param jsonCallBack
	 */
	public void getS2S(String start, String end, String traintype, JsonCallBack jsonCallBack) 

/**
	 * 12306实时余票查询
	 * 
	 * @param from
	 *            出发站
	 * @param to
	 *            到达站
	 * @param date
	 *            出发日期 默认今天
	 * @param traintype
	 *            车次类型
	 * @param jsonCallBack
	 */
	public void getTicketleft(String from, String to, String date, String traintype, JsonCallBack jsonCallBack) 

/**
	 * 12306订票①:查询车次
	 * 
	 * @param from
	 *            出发站
	 * @param to
	 *            到达站
	 * @param date
	 *            出发日期
	 * @param traintype
	 *            车次类型
	 * @param jsonCallBack
	 */
	public void bookTrainNum(String from, String to, String date, String traintype, JsonCallBack jsonCallBack) 

/**
	 * 
	 * @param name
	 *            乘客姓名
	 * @param seat
	 *            座位类型:商务座:9,一等座:M,二等座:O,特等座:P,高级软卧:6,软卧:4,硬卧:3,软座:2,硬座:1,无座:0
	 * @param mobile
	 *            乘客手机号码
	 * @param idcard
	 *            乘客身份证号码
	 * @param username
	 *            12306官网账号
	 * @param password
	 *            12306官网密码
	 * @param train_no
	 *            步骤①对应车次返回值
	 * @param station_train_code
	 *            步骤①对应车次返回值
	 * @param from_station_telecode
	 *            步骤①对应车次返回值
	 * @param to_station_telecode
	 *            步骤①对应车次返回值
	 * @param from_station_name
	 *            步骤①对应车次返回值
	 * @param to_station_name
	 *            步骤①对应车次返回值
	 * @param secretStr
	 *            步骤①对应车次返回值
	 * @param jsonCallBack
	 */
	public void bookTicket(String name, String seat, String mobile, String idcard, String username, String password, String train_no, String station_train_code, String from_station_telecode, String to_station_telecode, String from_station_name, String to_station_name, String secretStr, JsonCallBack jsonCallBack)


4. 程序中调用方法

首先,在 AnroidManifest.xml 中添加权限

<uses-permission android:name="android.permission.READ_PHONE_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    

 在 application 标签内部加入你申请的 openid

<meta-data
            android:name="com.thinkland.juheapi.openid"
            android:value="申请的openid" />
    

 在使用前需要调用一次初始化方法

CommonFun.initialize(getApplicationContext());


导入相关包

import com.thinkland.juheapi.common.CommonFun;
import com.thinkland.juheapi.common.JsonCallBack;
import com.thinkland.juheapi.data.train.TrainData;

调用方法
//站站查询
		TrainData trainData = TrainData.getInstance();
		trainData.getS2S("上海虹桥", "苏州园区", "G", new JsonCallBack() {

			@Override
			public void jsonLoaded(JSONObject arg0) {
				// TODO Auto-generated method stub
				try {
					int resultcode = arg0.getInt("resultcode");
					if (resultcode == 200) {
						JSONArray resultJson = arg0.getJSONArray("result");
					}
				} catch (JSONException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			}
		});



5. 返回字段及相关错误码

public voidgetTrainNum(String name, JsonCallBack jsonCallBack)

返回字段:

名称

 

 

类型

说明

resultcode

 

 

int

返回码

reason

 

 

string

返回说明

result

 

 

dictionary

返回结果集

 

train_info

 

dictionary

返回结果集

 

name

 

string

列次名称

 

start

 

string

起点站

 

end

 

string

终点站

 

starttime

 

string

发车时间

 

endtime

 

string

到达时间

 

mileage

 

string

里程

station_list

 

 

array

站点列表

 

train_id

 

int

站点序号

 

station_name

 

string

站点名称

 

arrived_time

 

string

到达时间

 

leave_time

 

string

发车时间

 

stay

 

string

停留

 

mileage

 

string

里程

 

ssoftSeat

 

string

二等座

 

hardSead

 

string

一等座

 

softSeat

 

string

硬座

 

hardSleep

 

string

软座

 

softSleep

 

string

硬卧

error_code

 

 

int

错误码

 

public void getS2S(String start,String end, String traintype,JsonCallBack jsonCallBack)

返回字段:

名称

 

 

类型

说明

resultcode

 

 

int

返回码

reason

 

 

string

返回说明

result

 

 

dictionary

 

 

data

 

array

返回结果集

 

 

trainOpp

string

列次名称

 

 

train_typename

string

列车类型

 

 

start_staion

string

出发站

 

 

end_station

string

终点站

 

 

leave_time

string

发车时间

 

 

arrived_time

string

到达时间

 

 

mileage

string

里程

 

totalcount

 

int

总条数

error_code

 

 

int

错误码


public void getTicketleft(String from, String to,String date, String traintype,JsonCallBack jsonCallBack)      

返回字段:

名称

 

类型

说明

error_code

 

int

返回码

reason

 

string

返回说明

result

 

array

返回结果集

 

train_no

string

车次

 

start_station_name

string

车次始发站

 

 

end_station_name

string

车次终点站

 

from_station_name

string

出发站

 

to_station_name

string

到达站

 

start_time

string

出发时间

 

arrive_time

string

到达时间

 

train_class_name

string

车次类型

 

day_difference

string

历时天数

 

lishi

string

总历时时间

 

gr_num

string

高级软卧:-- 说明无该席位

 

qt_num

string

其他

 

rw_num

string

软卧

 

rz_num

string

软座

 

tz_num

string

特等座

 

wz_num

string

无座

 

yw_num

string

硬卧

 

yz_num

string

硬座

 

ze_num

string

二等座

 

zy_num

string

一等座

 

swz_num

string

商务座

publicvoid bookTrainNum(String from, String to,String date,String traintype, JsonCallBack jsonCallBack)

返回值:

名称

 

 

类型

说明

reason

 

 

string

返回说明

result

 

 

array

返回结果集

 

queryLeftNewDTO

 

dictionary

 

 

 
train_no

string

车次

 

 
station_train_code

 

 

 

 
start_station_telecode

 

 

 

 
start_station_name

string

车次始发站

 

 
nd_station_telecode

 

 

 

 
end_station_name

string

车次终点站

 

 
from_station_telecode

 

 

 

 
from_station_name

string

出发站

 

 
to_station_telecode

 

 

 

 
to_station_name

string

到达站

 

 
start_time

string

出发时间

 

 
arrive_time

string

到达时间

 

 
day_difference

 

历时天数

 

 
train_class_name

string

车次类型

 

 
lishi

string

总历时时间

 

 
canWebBuy

 

 

 

 
lishiValue

 

 

 

 
yp_info

 

 

 

 
control_train_day

 

 

 

 
start_train_date

 

 

 

 
seat_feature

 

 

 

 
yp_ex

 

 

 

 
train_seat_feature

 

 

 

 
seat_types

 

 

 

 
location_code

 

 

 

 
from_station_no

 

 

 

 
to_station_no

 

 

 

 
control_day

 

 

 

 
sale_time

 

 

 

 
is_support_card

 

 

 

 
gr_num

string

高级软卧:-- 说明无该席位

 

 
qt_num

string

其他

 

 
rw_num

string

软卧

 

 
rz_num

string

软座

 

 
tz_num

string

特等座

 

 
wz_num

string

无座

 

 
yw_num

string

硬卧

 

 
yz_num

string

硬座

 

 
ze_num

string

二等座

 

 
zy_num

string

一等座

 

 
swz_num

string

商务座

 

secretStr
 

 

 

 

buttonTextInfo
 

 

预订

error_code

 

 

int

错误码


public voidbookTicket(String name, String seat, String mobile,

                     String idcard, String username, String password, String train_no,

                     String station_train_code, String from_station_telecode,

                     String to_station_telecode, String from_station_name,

               Stringto_station_name, String secretStr, JsonCallBack jsonCallBack)

       返回码:

名称

类型

说明

reason

int

返回说明

result

dictionary

返回结果

error_code

int

错误码

       

错误码

说明

202201

车次不能为空

202202

查询不到车次的相关信息

202203

出发站或终点站不能为空

202204

查询不到结果

202205

错误的出发站名称

202206

错误的到达站名称

202207

查询不到余票相关数据哦

202208

错误的请求,请确认传递的参数正确

202209

请求 12306 网络错误,请重试

202210

12306 账号密码错误

202211

邮箱不存在

202212

查询出错

202213

提交订单超时,请重试

202214

出票失败

202215

排队失败

202216

该车次无法预定

202217

不合法的座位类型



12306火车票余票查询、价格查询最新api

12306火车票余票查询、价格查询最新api

昨天有个朋友联系我QQ说API不能用了,想起来12306改版了,所以就重新写了这个API,由于时间紧需要优化,所以优化的任务交给大家了,然后新增加了价格查询-出发时间和到站时间!上个效果图,然后我再上代码!
请输入图片描述

<?php
/*
 *@Description 火车票余票查询和价格查询
 *@author      widuu
 *@mktime      2014/1/13
 *@license     http://www.widuu.com
 */
header("content-type:text/html;charset=''utf-8''");
function gettrain($start,$end,$data){
    $station = include(''./name.php'');
    $startstaion = $station[$start];
    $endstation = $station[$end];
    if(empty($data)){
        $date = date("Y-m-d",time());
    }else{
        $num = explode("-", $data);
         if(count($num)==2){
             $date = date("Y",time())."-".$data;
        }else if(count($num)==3){
            $date = $data;
        }else{
            exit("time error");
        }
    }
    if(empty($startstaion)||empty($endstation)){
        exit("stdin error");
    }
    $url ="http://kyfw.12306.cn/otn/lcxxcx/query?purpose_codes=ADULT&queryDate=$date&from_station=$startstaion&to_station=$endstation";
    $data = doget($url);
    if(!$data[''status'']){
        exit(''check error'');
    }else{
        $data = $data[''data''][''datas''];
        foreach ($data as $key => $value) {
            $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");
            $data[$key]["gr_num"] =  $data[$key]["gr_num"]."(".$price["data"]["A6"].")";
            $data[$key]["qt_num"] =  $data[$key]["qt_num"]."(".$price["data"]["OT"][0].")";
            $data[$key]["rw_num"] =  $data[$key]["rw_num"]."(".$price["data"]["A4"].")";
            $data[$key]["rz_num"] =  $data[$key]["rz_num"]."(".$price["data"]["A2"].")";
            $data[$key]["tz_num"] =  $data[$key]["tz_num"]."(".$price["data"]["P"].")";
            $data[$key]["wz_num"] =  $data[$key]["wz_num"]."(".$price["data"]["WZ"].")";
            $data[$key]["yw_num"] =  $data[$key]["yw_num"]."(".$price["data"]["A3"].")";
            $data[$key]["yz_num"] =  $data[$key]["yz_num"]."(".$price["data"]["A1"].")";
            $data[$key]["ze_num"] =  $data[$key]["ze_num"]."(".$price["data"]["O"].")";
            $data[$key]["zy_num"] =  $data[$key]["zy_num"]."(".$price["data"]["M"].")";
            $data[$key]["swz_num"]=  $data[$key]["swz_num"]."(".$price["data"]["A9"].")";
        }
    }
    return $data;
}

function doget($url){
    if(!function_exists(''file_get_contents'')) {
        $optionget = array(''http'' => array(''method'' => "GET", ''header'' => "User-Agent:Mozilla/4.0 (compatible; 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)\r\nAccept:*/*\r\nReferer:https://kyfw.12306.cn/otn/lcxxcx/init"));
        $file_contents = file_get_contents($url, false , stream_context_create($optionget));
    } else {
            $ch = curl_init();
            $timeout = 5;
            $header = array(
                ''Accept:*/*'',
                ''Accept-Charset:GBK,utf-8;q=0.7,*;q=0.3'',
                ''Accept-Encoding:gzip,deflate,sdch'',
                ''Accept-Language:zh-CN,zh;q=0.8,ja;q=0.6,en;q=0.4'',
                ''Connection:keep-alive'',
                ''Host:kyfw.12306.cn'',
                ''Referer:https://kyfw.12306.cn/otn/lcxxcx/init'',
            );
            curl_setopt ($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_HTTPHEADER,$header);
            curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,1);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
            curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
            $file_contents = curl_exec($ch);
            curl_close($ch);
    }
    $file_contents = json_decode($file_contents,true);
    return $file_contents;
}
/*
 *这个由于时间紧写的,所以很多地方还需要优化,希望大家改善一下,可以分部和文件缓存的形式提高执行速度--缺点执行速度慢--有待优化
 */
$data = gettrain("北京","天津","01-03");
/*
 *   ["gr_num"]=>高级软卧
 *   ["qt_num"]=>其他
 *   ["rw_num"]=> 软卧
 *   ["rz_num"]=>软座
 *   ["tz_num"]=>特等座
 *   ["wz_num"]=>无座
 *   ["yw_num"]=>硬卧
 *   ["yz_num"]=>硬座
 *   ["ze_num"]=>二等座
 *   ["zy_num"]=> 一等座
 *   ["swz_num"]=> 商务座
 */
$str="";
foreach($data as $key =>$value){
    $str.="火车列次:{$data[$key][''station_train_code'']}";
    $str.="始发站:{$data[$key][''start_station_name'']},终点站{$data[$key][''end_station_name'']}<br>";
    $str.="出发时间:{$data[$key][''start_time'']},到站时间:{$data[$key][''arrive_time'']}<br>";
    $str.="";
    $str.= strpos($data[$key]["gr_num"],"()") ? "" :"高级软卧余票和价格:".$data[$key]["gr_num"]."<br>";
    $str.= strpos($data[$key]["qt_num"],"()") ? "" :"其他余票和价格:".$data[$key]["qt_num"]."<br>";
    $str.= strpos($data[$key]["rw_num"],"()") ? "" :"软卧余票和价格:".$data[$key]["rw_num"]."<br>";
    $str.= strpos($data[$key]["rz_num"],"()") ? "" :"软座余票和价格:".$data[$key]["rz_num"]."<br>";
    $str.= strpos($data[$key]["tz_num"],"()") ? "" :"特等座余票和价格:".$data[$key]["tz_num"]."<br>";
    $str.= strpos($data[$key]["wz_num"],"()") ? "" :"无座余票和价格:".$data[$key]["wz_num"]."<br>";
    $str.= strpos($data[$key]["yw_num"],"()") ? "" :"硬卧余票和价格:".$data[$key]["yw_num"]."<br>";
    $str.= strpos($data[$key]["yz_num"],"()") ? "" :"硬座余票和价格:".$data[$key]["yz_num"]."<br>";
    $str.= strpos($data[$key]["ze_num"],"()") ? "" :"二等座余票和价格:".$data[$key]["ze_num"]."<br>";
    $str.= strpos($data[$key]["zy_num"],"()") ? "" :"一等座余票和价格:".$data[$key]["zy_num"]."<br>";
    $str.= strpos($data[$key]["swz_num"],"()") ? "" :"商务座余票和价格:".$data[$key]["swz_num"]."<br>";
    $str.= "======================下一列火车上===============================<br>";
}
echo $str;

文章首发在我的个人博客站地址:http://www.widuu.com/archives/01/919.html 希望大家一块去完善一下

12306火车票余票查询、价格查询最新api(PHP)

12306火车票余票查询、价格查询最新api(PHP)

其实我这个代码很早以前就出来了,只是一直没有放在开源中国上一直放在我的博客上了,当然程序没有优化,大家可以优化一下,那天看见出了个python的我就笑了!不过没关系了,发出来给大家看看~~以前也发了一个 去年的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 = explode("-", $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("time error");
  22. }
  23. }
  24. if(empty($startstaion)||empty($endstation)){
  25. exit("stdin error");
  26. }
  27. $url ="http://kyfw.12306.cn/otn/lcxxcx/query?purpose_codes=ADULT&queryDate=$date&from_station=$startstaion&to_station=$endstation";
  28. $data = doget($url);
  29. if(!$data[''status'']){
  30. exit(''check error'');
  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[$key]["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", ''header'' => "User-Agent:Mozilla/4.0 (compatible; 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)\r\nAccept:*/*\r\nReferer:https://kyfw.12306.cn/otn/lcxxcx/init"));
  53. $file_contents = file_get_contents($url, false , stream_context_create($optionget));
  54. } else {
  55. $ch = curl_init();
  56. $timeout = 5;
  57. $header = array(
  58. ''Accept:*/*'',
  59. ''Accept-Charset:GBK,utf-8;q=0.7,*;q=0.3'',
  60. ''Accept-Encoding:gzip,deflate,sdch'',
  61. ''Accept-Language:zh-CN,zh;q=0.8,ja;q=0.6,en;q=0.4'',
  62. ''Connection:keep-alive'',
  63. ''Host:kyfw.12306.cn'',
  64. ''Referer:https://kyfw.12306.cn/otn/lcxxcx/init'',
  65. );
  66. curl_setopt ($ch, CURLOPT_URL, $url);
  67. curl_setopt($ch, CURLOPT_HTTPHEADER,$header);
  68. curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
  69. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,1);
  70. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
  71. curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
  72. $file_contents = curl_exec($ch);
  73. curl_close($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"]=>二等座
  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'']}
    ";
  100. $str.="";
  101. $str.= strpos($data[$key]["gr_num"],"()") ? "" :"高级软卧余票和价格:".$data[$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;
复制代码


12306火车票查询

12306火车票查询

因为我已经足够懒了,只显示了硬卧和硬座的余票信息(毕竟其他票我也没什么购买欲望)。

===========================以上全是扯淡题外话===========================

代码(GitHub地址)中所用到的接口,可以在12306官方新版查询网页中获取到。本文笔者使用了prettytable让显示结果更加美观,使用了json将纯文本的json格式转换成python中的字典数组,在获取数据的时候,使用了User-Agent来模拟浏览器。

代码使用操作方式:

python main.py 2016-06-22 赣州 上海

第一个地址是出发城市,第二个地址是去往的城市。

# encoding:utf-8

import urllib2,os,sys,json,time

from prettytable import PrettyTable

def get_station_list():
    f = open(''stations.dat'')
    lines = f.readlines()
    dic = {}
    for line in lines:
        line = line.strip(''\n'')
        dic[line.split('' '')[0]] = line.split('' '')[1]
    return dic

def get_content(url):
    req_header = {''User-Agent'':''Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36''}
    req = urllib2.Request(url, None, req_header)
    resp = urllib2.urlopen(req,None,30)
    content = resp.read()
    return content

if __name__==''__main__'':
    try:
        train_date   = sys.argv[1]
        from_station = get_station_list()[sys.argv[2]]
        to_station   = get_station_list()[sys.argv[3]]
    except:
        print ''usage: python main.py 2016-06-22 赣州 南昌''
        sys.exit(0)
        pass
    while 1==1:
        os.system(''clear'')
        print ''日期:\033[1;32;40m%s\033[0m    从 \033[1;31;40m%s\033[0m 到 \033[1;31;40m%s\033[0m''%(train_date, sys.argv[2], sys.argv[3])
        url = ''https://kyfw.12306.cn/otn/leftTicket/query?leftTicketDTO.train_date=''+train_date+''&leftTicketDTO.from_station=''+from_station+''&leftTicketDTO.to_station=''+to_station+''&purpose_codes=ADULT''
        # print url
        content = get_content(url)
        j = json.loads(content)
        t = PrettyTable(["车次", "出发站", "到达站", "出发时间", "到达时间", "历时", "硬卧", "硬座"])
        t.align[u"出发站"] = "l" # Left align city names
        t.align[u''到达站''] = ''l''
        t.padding_width = 1 # One space between column edges and contents (default)
        for item in j[''data'']:
            # item[''secretStr''] = ''''
            if u''无'' == item[''queryLeftNewDTO''][''yz_num'']:
                item[''queryLeftNewDTO''][''yz_num''] = ''''
            if u''无'' == item[''queryLeftNewDTO''][''yw_num'']:
                item[''queryLeftNewDTO''][''yw_num''] = ''''
            t.add_row([
                item[''queryLeftNewDTO''][''station_train_code''],
                item[''queryLeftNewDTO''][''from_station_name''],
                item[''queryLeftNewDTO''][''to_station_name''],
                item[''queryLeftNewDTO''][''start_time''],
                item[''queryLeftNewDTO''][''arrive_time''],
                item[''queryLeftNewDTO''][''lishi''],
                item[''queryLeftNewDTO''][''yw_num''],
                item[''queryLeftNewDTO''][''yz_num'']
                ])
        print t
        operation = raw_input('''')
        if ''exit'' == operation or ''q'' == operation:
            sys.exit(0)

php实现12306火车票余票查询和价格查询

php实现12306火车票余票查询和价格查询

今天关于聚合数据 Android SDK 12306 火车票查询订票演示示例火车订票系统数据库的介绍到此结束,谢谢您的阅读,有关12306火车票余票查询、价格查询最新api、12306火车票余票查询、价格查询最新api(PHP)、12306火车票查询、php实现12306火车票余票查询和价格查询等更多相关知识的信息可以在本站进行查询。

本文标签: