本文将分享聚合数据AndroidSDK12306火车票查询订票演示示例的详细内容,并且还将对火车订票系统数据库进行详尽解释,此外,我们还将为大家带来关于12306火车票余票查询、价格查询最新api、1
本文将分享聚合数据 Android SDK 12306 火车票查询订票演示示例的详细内容,并且还将对火车订票系统数据库进行详尽解释,此外,我们还将为大家带来关于12306火车票余票查询、价格查询最新api、12306火车票余票查询、价格查询最新api(PHP)、12306火车票查询、php实现12306火车票余票查询和价格查询的相关知识,希望对你有所帮助。
本文目录一览:- 聚合数据 Android SDK 12306 火车票查询订票演示示例(火车订票系统数据库)
- 12306火车票余票查询、价格查询最新api
- 12306火车票余票查询、价格查询最新api(PHP)
- 12306火车票查询
- php实现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)
首先,在 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 |
|
|
|
|
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)
返回字段:
名称 |
|
类型 |
说明 |
|
|
int |
返回码 |
reason |
|
string |
返回说明 |
result |
|
array |
返回结果集 |
|
|
string |
|
|
|
string |
|
|
|
string |
|
|
|
string |
|
|
|
string |
|
|
|
string |
|
|
|
string |
|
|
|
string |
|
|
|
string |
|
|
|
string |
|
|
|
string |
|
|
|
string |
|
|
|
string |
|
|
|
string |
|
|
|
string |
|
|
|
string |
|
|
|
string |
|
|
|
string |
|
|
|
string |
|
|
|
string |
|
|
|
string |
|
publicvoid bookTrainNum(String from, String to,String date,String traintype, JsonCallBack jsonCallBack)
返回值:
名称 |
|
|
类型 |
说明 |
reason |
|
|
string |
返回说明 |
result |
|
|
array |
返回结果集 |
|
queryLeftNewDTO |
|
dictionary |
|
|
|
|
string |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
string |
|
|
|
|
|
|
|
|
|
string |
|
|
|
|
|
|
|
|
|
string |
|
|
|
|
|
|
|
|
|
string |
|
|
|
|
string |
|
|
|
|
string |
|
|
|
|
|
|
|
|
|
string |
|
|
|
|
string |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
string |
|
|
|
|
string |
|
|
|
|
string |
|
|
|
|
string |
|
|
|
|
string |
|
|
|
|
string |
|
|
|
|
string |
|
|
|
|
string |
|
|
|
|
string |
|
|
|
|
string |
|
|
|
|
string |
|
|
|
|
|
|
|
|
|
|
|
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)
返回码:
名称 |
类型 |
说明 |
|
int |
返回说明 |
|
dictionary |
返回结果 |
|
int |
错误码 |
错误码 |
说明 |
202201 |
车次不能为空 |
202202 |
查询不到车次的相关信息 |
202203 |
出发站或终点站不能为空 |
202204 |
查询不到结果 |
202205 |
错误的出发站名称 |
202206 |
错误的到达站名称 |
202207 |
查询不到余票相关数据哦 |
202208 |
错误的请求,请确认传递的参数正确 |
202209 |
请求 12306 网络错误,请重试 |
202210 |
12306 账号密码错误 |
202211 |
邮箱不存在 |
202212 |
查询出错 |
202213 |
提交订单超时,请重试 |
202214 |
出票失败 |
202215 |
排队失败 |
202216 |
该车次无法预定 |
202217 |
不合法的座位类型 |
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火车票查询
因为我已经足够懒了,只显示了硬卧和硬座的余票信息(毕竟其他票我也没什么购买欲望)。
===========================以上全是扯淡题外话===========================
代码(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火车票余票查询和价格查询
今天关于聚合数据 Android SDK 12306 火车票查询订票演示示例和火车订票系统数据库的介绍到此结束,谢谢您的阅读,有关12306火车票余票查询、价格查询最新api、12306火车票余票查询、价格查询最新api(PHP)、12306火车票查询、php实现12306火车票余票查询和价格查询等更多相关知识的信息可以在本站进行查询。
本文标签: