基于php的火车时刻表接口调用代码实例

合集下载

php接口开发示例代码

php接口开发示例代码

php接口开发示例代码PHP接口开发示例代码随着互联网的发展,越来越多的应用程序需要与其他应用程序进行交互,这就需要使用接口来实现不同应用程序之间的数据交换。

PHP是一种流行的服务器端编程语言,它提供了丰富的接口开发工具,可以轻松地实现接口开发。

本文将介绍如何使用PHP开发接口,并提供一个示例代码。

1. 接口的概念接口是一种定义了一组方法和属性的抽象类,它没有实现任何方法,只是定义了方法的名称和参数。

接口可以被其他类实现,实现类必须实现接口中定义的所有方法和属性。

接口的作用是定义一组标准的方法和属性,使得不同的类可以实现相同的接口,从而实现代码的复用和扩展。

2. PHP接口的定义在PHP中,可以使用interface关键字来定义接口,如下所示:```interface MyInterface {public function method1();public function method2($param);}```上面的代码定义了一个名为MyInterface的接口,它包含了两个方法:method1和method2。

这两个方法分别没有参数和一个参数$param。

接口中的方法必须是公共的,不能有任何实现代码。

3. PHP接口的实现在PHP中,可以使用implements关键字来实现接口,如下所示:```class MyClass implements MyInterface {public function method1() {// 实现method1方法的代码}public function method2($param) {// 实现method2方法的代码}}```上面的代码定义了一个名为MyClass的类,它实现了MyInterface 接口。

MyClass类必须实现MyInterface接口中定义的所有方法,否则会出现编译错误。

4. PHP接口的使用在PHP中,可以使用接口来实现不同类之间的数据交换。

火车车次查询接口代码文档及返回示例

火车车次查询接口代码文档及返回示例

火车车次查询接口代码文档及返回示例分享火车车次查询接口代码文档及返回示例分享,支持出发站名称、到达站名称、车次类型等查询,将其集中到APP中,使用更加方便。

接口名称:火车车次查询接口接口平台:聚合数据接口地址:/train/.php支持格式:JSON请求方式:HTTP POST/GET请求示例:/train/.php?key=&from=%E4%B8%8A%E6%B5%B7%E8%99%B9% E6%A1%A5&to=%E6%B8%A9%E5%B7%9E%E5%8D%97&date=2014-07-20接口备注:查询需要订票的车次火车车次查询接口调用代码JSON返回示例:{"reason": "成功的返回","result": [{"queryLeftNewDTO": {"train_no": "5l000D228700","station_train_code": "D2287","start_station_telecode": "AOH","start_station_name": "上海虹桥","end_station_telecode": "IOQ","end_station_name": "深圳北","from_station_telecode": "AOH","from_station_name": "上海虹桥","to_station_telecode": "VRH","to_station_name": "温州南","start_time": "06:25","arrive_time": "10:53","day_difference": "0","train_class_name": "动车","lishi": "04:28","canWebBuy": "Y","lishiValue": "268","yp_info": "O017550049M023000022O017553000","control_train_day": "20140730","start_train_date": "20140720","seat_feature": "O3M3W3","yp_ex": "O0M0O0","train_seat_feature": "3","seat_types": "OMO","location_code": "H2","from_station_no": "01","to_station_no": "12","control_day": 19,"sale_time": "1400","is_support_card": "0","gr_num": "--", /*高级软卧:-- 说明无该席位*/"qt_num": "--", /*其他*/"rw_num": "--", /*软卧*/"rz_num": "--", /*软座*/"tz_num": "--", /*特等座*/"wz_num": "无", /*无座*/"yw_num": "--", /*硬卧*/"yz_num": "--", /*硬座*/"ze_num": "无", /*二等座*/"zy_num": "无", /*一等座*/"swz_num": "--" /*商务座*/},"secretStr":"MjAxNC0wNy0yMCMwMCNEMjI4NyMwNDoyOCMwNjoyNSM1bDAwMEQyMjg3MDAjQ U9II1ZSSCMxMDo1MyPkuIrmtbfombnmoaUj5rip5bee5Y2XIzAxIzEyI08wMTc1NTAwNDlNM DIzMDAwMDIyTzAxNzU1MzAwMCNIMiMxNDA1MDY0NTI2MjcwIzQ4M0I1NTI5M0Y2R TQ0OEQ4RUEzMjVDNThBMzgyRTI5MUM3RUU4REQ1NjFGMjU0OEVBNkM3MTBC", /**车票预定标识,很重要**/"buttonTextInfo": "预订"}]}。

基于Python的火车票价信息api调用代码实例

基于Python的火车票价信息api调用代码实例

基于Python的火车票价信息api调用代码实例代码描述:基于php的火车票价信息api调用代码实例代码平台:聚合数据#!/usr/bin/python# -*- coding: utf-8 -*-import json, urllibfrom urllib import urlencode#----------------------------------# 火车时刻表调用示例代码-聚合数据# 在线接口文档:/docs/79#----------------------------------def main():#配置您申请的APPKeyappkey ="*********************"#1.列次查询request1(appkey,"GET")#2.站到站检索request2(appkey,"GET")#列次查询def request1(appkey, m="GET"):url ="/onebox/train/query"params ={"train": "", #车次号,如:D3010"key": appkey, #应用APPKEY(应用详细页查询)}params =urlencode(params)if m =="GET":f =urllib.urlopen("%s?%s"%(url, params))else:f =urllib.urlopen(url, params)content =f.read()res =json.loads(content)if res:error_code =res["error_code"]if error_code ==0:#成功请求print res["result"]else:print"%s:%s"%(res["error_code"],res["reason"]) else:print"request api error"#站到站检索def request2(appkey, m="GET"):url ="/onebox/train/query_ab"params ={"from": "", #出发站名称,如:北京"to": "", #到达站名称,如:上海"key": appkey, #应用APPKEY(应用详细页查询)}params =urlencode(params)if m =="GET":f =urllib.urlopen("%s?%s"%(url, params))else:f =urllib.urlopen(url, params)content =f.read()res =json.loads(content)if res:error_code =res["error_code"]if error_code ==0:#成功请求print res["result"]else:print"%s:%s"%(res["error_code"],res["reason"]) else:print"request api error"if__name__ =='__main__':main()。

基于C#的火车车次查询api调用代码实例

基于C#的火车车次查询api调用代码实例

基于C#的火车车次查询api调用代码实例代码描述:基于php的火车时刻表接口调用代码实例代码平台:聚合数据using System;using System.Collections.Generic;using System.Linq;using System.Text;using ;using System.IO;using ;using System.Diagnostics;using System.Web;//----------------------------------// 火车时刻表调用示例代码-聚合数据// 在线接口文档:/docs/79// 代码中JsonObject类下载地址:/download/gcm32060 21155665/7458439//----------------------------------namespace ConsoleAPI{class Program{static void Main(string[] args){string appkey = "*******************"; //配置您申请的appkey//1.列次查询string url1 = "/onebox/train/query";var parameters1 = new Dictionary<string, string>();parameters1.Add("train", ""); //车次号,如:D3010parameters1.Add("key", appkey);//你申请的keystring result1 = sendPost(url1, parameters1, "get");JsonObject newObj1 = new JsonObject(result1);String errorCode1 = newObj1["error_code"].Value;if(errorCode1 == "0"){Debug.WriteLine("成功");Debug.WriteLine(newObj1);}else{//Debug.WriteLine("失败");Debug.WriteLine(newObj1["error_code"].Value+":"+newObj1 ["reason"].Value);}//2.站到站检索string url2 = "/onebox/train/query_ab";var parameters2 = new Dictionary<string, string>();parameters2.Add("from", ""); //出发站名称,如:北京parameters2.Add("to", ""); //到达站名称,如:上海parameters2.Add("key", appkey);//你申请的keystring result2 = sendPost(url2, parameters2, "get");JsonObject newObj2 = new JsonObject(result2);String errorCode2 = newObj2["error_code"].Value;if(errorCode2 == "0"){Debug.WriteLine("成功");Debug.WriteLine(newObj2);}else{//Debug.WriteLine("失败");Debug.WriteLine(newObj2["error_code"].Value+":"+newObj2 ["reason"].Value);}}/// <summary>/// Http (GET/POST)/// </summary>/// <param name="url">请求URL</param>/// <param name="parameters">请求参数</param>/// <param name="method">请求方法</param>/// <returns>响应内容</returns>static string sendPost(string url, IDictionary<string, string> p arameters, string method){if(method.ToLower() == "post"){HttpWebRequest req = null;HttpWebResponse rsp = null;System.IO.Stream reqStream = null;try{req = (HttpWebRequest)WebRequest.Create(url);req.Method = method;req.KeepAlive = false;req.ProtocolVersion = HttpVersion.Version10;req.Timeout = 5000;req.ContentType = "application/x-www-form-urlencode d;charset=utf-8";byte[] postData = Encoding.UTF8.GetBytes(BuildQuery (parameters, "utf8"));reqStream = req.GetRequestStream();reqStream.Write(postData, 0, postData.Length);rsp = (HttpWebResponse)req.GetResponse();Encoding encoding = Encoding.GetEncoding(rsp.Charac terSet);return GetResponseAsString(rsp, encoding);}catch(Exception ex){return ex.Message;}finally{if(reqStream != null) reqStream.Close();if(rsp != null) rsp.Close();}}else{//创建请求HttpWebRequest request = (HttpWebRequest)WebRequest.Cre ate(url + "?"+ BuildQuery(parameters, "utf8"));//GET请求request.Method = "GET";request.ReadWriteTimeout = 5000;request.ContentType = "text/html;charset=UTF-8";HttpWebResponse response = (HttpWebResponse)request.Get Response();Stream myResponseStream = response.GetResponseStream();StreamReader myStreamReader = new StreamReader(myRespons eStream, Encoding.GetEncoding("utf-8"));//返回内容string retString = myStreamReader.ReadToEnd();return retString;}}/// <summary>/// 组装普通文本请求参数。

12306火车票查询接口代码文档及返回示例

12306火车票查询接口代码文档及返回示例

12306实时余票查询接口代码文档及返回示例在即将到来的双十二,在聚合数据平台上的12306实时余票查询接口将参与“暖冬不如低价活动”,主打汽车和金融两类数据接口。

此次我们将分享下12306实时余票查询接口代码文档及返回示例,可查询实时火车票余票,包括车次、车次始发站、车次终点站、出发时间、到达时间、车次类型、总历时时间等等。

接口名称:12306实时余票查询接口接口平台:聚合数据接口地址:/train/yp支持格式:JSON/XML请求方式:HTTP GET/POST请求示例:/train/yp?key=申请的KEY&dtype=json&from=%E4%B8%8A%E6%B5%B7%E8%99%B9%E6%A1%A5&to=%E6% B8%A9%E5%B7%9E&date=2014-06-28&tt=接口备注:火车余票查询12306实时余票查询接口调用代码JSON返回示例:{"reason": "查询成功","result": [{"train_no": "D2287", /*车次*/"start_station_name": "上海虹桥", /*车次始发站*/"end_station_name": "深圳北", /*车次终点站*/"from_station_name": "上海虹桥", /*出发站*/"to_station_name": "温州南", /*到达站*/"start_time": "06:25", /*出发时间*/"arrive_time": "10:53", /*到达时间*/"train_class_name": "动车", /*车次类型*/"day_difference": "0", /*历时天数*/"lishi": "04:28", /*总历时时间*/"gr_num": "--", /*高级软卧:-- 说明无该席位*/"qt_num": "--", /*其他*/"rw_num": "--", /*软卧*/"rz_num": "--", /*软座*/"tz_num": "--", /*特等座*/"wz_num": "无", /*无座*/"yw_num": "--", /*硬卧*/"yz_num": "--", /*硬座*/"ze_num": "无", /*二等座*/"zy_num": "无", /*一等座*/"swz_num": "--" /*商务座*/ },{"train_no": "D3203","start_station_name": "上海虹桥","end_station_name": "厦门北","from_station_name": "上海虹桥","to_station_name": "温州南","start_time": "06:30","arrive_time": "11:09","train_class_name": "动车","day_difference": "0","lishi": "04:39","gr_num": "--","qt_num": "--","rw_num": "--","rz_num": "--","tz_num": "--","wz_num": "无","yw_num": "--","yz_num": "--","ze_num": "无","zy_num": "无","swz_num": "--"},{"train_no": "G7501","start_station_name": "上海虹桥","end_station_name": "苍南","from_station_name": "上海虹桥","to_station_name": "温州南","start_time": "07:00","arrive_time": "11:00","train_class_name": "","day_difference": "0","lishi": "04:00","gr_num": "--","qt_num": "--","rw_num": "--","rz_num": "--","tz_num": "--","wz_num": "165","yw_num": "--","yz_num": "--","ze_num": "无","zy_num": "无","swz_num": "15"}],"error_code": 0}。

python自动12306抢票软件实现代码

python自动12306抢票软件实现代码

python⾃动12306抢票软件实现代码昨天我发的是抓取的12306数据包,然后分析了⼀下,今天按照昨天的分析⽤代码实现了,如果有需要的同学们可以看⼀下,实现的功能有,登录,验证码识别,⾃动查票,有余票点击预定,差了最后⼀步提交订单。

同学们可以⾃⼰研究⼀下。

import requestsimport timeimport dmptimport reimport randomfrom copyheaders import headers_raw_to_dictDEFAULT_HEADERS={'Host':'','Connection':'keep-alive','Upgrade-Insecure-Requests':'1','User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36','Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8','Referer':'https:///otn/index/init','Accept-Language':'zh-CN,zh;q=0.9',}def get_random():return str(random.random()) #⽣产⼀个18位的随机数def get_13_time(): #⼀个⼗三位的时间戳return str(int(time.time()*1000))class CN12306(object):def __init__(self):self.chufa='2018-02-03'self.s=requests.session()self.s.verify = False # 忽略https 证书验证def get_init(self): #请求了⼀个⾸页url='https:///otn/login/init'r=self.s.get(url)print('⾸页获取成功,状态码:',r)def get_newpasscode(self): #这个页⾯不知道是⼲啥的,但是12306 请求了,咱们为了模仿的像⼀点也去请求url='https:///otn/resources/js/newpasscode/captcha_js.js?_={}'.format(get_13_time())r=self.s.get(url)print('newpasscode获取成功,状态码:',r)def get_auth_code(self): #获取验证码url='https:///passport/captcha/captcha-image?login_site=E&module=login&rand=sjrand&{}'.format(get_random())r=self.s.get(url)with open('auth_code.png', 'wb') as auth:auth.write(r.content)auth.flush()auth.close()return str(r) == '<Response [200]>'def analysis_auth_code(self): # 调⽤打码平台,返回验证码坐标dmt = dmpt.DamatuApi("打码平台帐号", "打码平台密码")analysis_auth = dmt.decode('auth_code.png', 287) # 上传打码analysis_auth = re.sub('\|', ',', analysis_auth)li = analysis_auth.split(',')for i in range(len(li)):if i % 2 == 0:passelse:li[i] = str(int(li[i]) - 30)analysis_auth = str(li)analysis_auth = re.sub("'", '', analysis_auth)analysis_auth = re.sub("\]", '', analysis_auth)analysis_auth = re.sub("\[", '', analysis_auth)analysis_auth = re.sub(" ", '', analysis_auth)print('验证码坐标', analysis_auth)self.analysis_auth= analysis_auth # 验证码坐标def auth_auth_code(self): #验证验证码是否正确提交⽅式posturl='https:///passport/captcha/captcha-check'data={'answer':self.analysis_auth ,'login_site':'E','rand':'sjrand',}r=self.s.post(url=url,data=data)print(r.text)if r.text == '''{"result_message":"验证码校验成功","result_code":"4"}''': #验证码校验成功return Trueelse: #如果验证码校验失败print('验证码错误,刷新验证码,重新提交')if self.get_auth_code(): #获取验证码self.analysis_auth_code() #调⽤打码平台self.auth_auth_code() #重新校验验证码def login(self):url='https:///passport/web/login'data={'username' : '12306帐号','password' : '12306密码','appid' : 'otn',}r=self.s.post(url=url,data=data)self.uamtk=r.json()["uamtk"]print(r.text)url='https:///otn/login/userLogin'r=self.s.post(url=url)# print(r.text)def getjs(self): #不知道是⼲啥的,但是也提交吧url='https:///otn/HttpZF/GetJS'r=self.s.get(url)def post_uamtk(self):url='https:///passport/web/auth/uamtk'data={ 'appid':'otn'}r=self.s.post(url=url,data=data,allow_redirects=False)self.newapptk=r.json()["newapptk"]r.encoding='utf-8'print(r.text)def post_uamauthclient(self):url='https:///otn/uamauthclient'data={'tk':self.newapptk}r=self.s.post(url=url,data=data)self.apptk = r.json()["apptk"]r.encoding='utf-8'print(r.text)def get_userLogin(self):url='https:///otn/login/userLogin'r=self.s.get(url)r.encoding='utf-8'# print(r.text)def get_leftTicket(self):url='https:///otn/leftTicket/init'r=self.s.get(url)r.encoding='utf-8'# print(r.text)def get_GetJS(self):url='https:///otn/HttpZF/GetJS'self.s.get(url)def get_qufzjql(self):url = 'https:///otn/dynamicJs/qufzjql'self.s.get(url)def get_queryZ(self):url='https:///otn/leftTicket/queryZ?leftTicketDTO.train_date={}&leftTicketDTO.from_station={}&leftTicketDTO.to_station={}&purpose_codes={}'.format(self.chufa,'BJP','TBP','ADULT') r=self.s.get(url)r.encoding='utf-8'# print(r.text)cheliang=r.json()["data"]["result"]for i in cheliang:dandulist=str(i).split('|')if len(str(dandulist[0]))>=100:self.secretStr=dandulist[0]# secretStr = str(x[0])车次=str(dandulist[3])出发时间=str(dandulist[8])到达时间 = str(dandulist[9])历时=str(dandulist[10])软卧 = str(dandulist[23])硬卧=str(dandulist[28])print(i)print('可预订车次列表,','车次:',车次,'出发时间:', 出发时间,'到达时间:', 到达时间,'历时:', 历时,'软卧剩余: ',软卧,' 硬卧剩余: ',硬卧)if (软卧 != '' and 软卧 != '0' and 软卧 != '⽆' and 软卧 != '空') or (硬卧 != '' and 硬卧 != '0' and 硬卧 != '⽆' and 硬卧 != '空'):#执⾏下单操作self.post_submitOrderRequest()self.post_initDc()self.post_getPassengerDTOs()return Falseprint('*****************************************************')return True# 点击预定下单def post_submitOrderRequest(self):url='https:///otn/leftTicket/submitOrderRequest'data={'secretStr':self.secretStr,'train_date':self.chufa, #出发时间'back_train_date':self.chufa ,#返回时间'tour_flag':'dc','purpose_codes':'ADULT','query_from_station_name':'北京','query_to_station_name':'天津北','undefined':''}r=self.s.post(url=url,data=data)print(r.text)def post_initDc(self):url='https:///otn/confirmPassenger/initDc'r=self.s.post(url)# r.textself.REPEAT_SUBMIT_TOKEN=re.findall("globalRepeatSubmitToken = '(.*?)';",r.text)[0]def post_getPassengerDTOs(self): #获取乘客信息url='https:///otn/confirmPassenger/getPassengerDTOs'data={'REPEAT_SUBMIT_TOKEN':self.REPEAT_SUBMIT_TOKEN,'_json_att':''}r=self.s.post(url=url,data=data)print(r.text)if __name__ == '__main__':print(get_random())cn=CN12306()cn.get_init()cn.get_newpasscode()if cn.get_auth_code():#如果验证码获取成功,就调⽤打码平台print('验证码获取成功')print('正在调⽤打码平台...')cn.analysis_auth_code()if cn.auth_auth_code(): #验证验证码是否正确cn.login()erLogin()cn.getjs()cn.post_uamtk()cn.post_uamauthclient()cn.get_userLogin()cn.get_leftTicket()cn.get_GetJS()cn.get_qufzjql()while cn.get_queryZ():time.sleep(30)以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

python3.7之12306抢票脚本实现

python3.7之12306抢票脚本实现

python3.7之12306抢票脚本实现 在原作者之上,对执⾏代码做了以下处理:1. 删除短信/邮件通知功能2. 删除控制台输⼊功能3. 新增登陆cookie的刷新4. 新增多车次抢票5. 新增多座位类型抢票 注:使⽤ splinter.browser 在调⽤时,注意将 chrome驱动路径(chromedriver.exe所在)配置在环境变量 - path 下。

代码如下:#!/usr/bin/env python# -*- coding: utf-8 -*-from splinter.browser import Browserfrom time import sleepimport sysclass BrushTicket(object):"""买票类及实现⽅法"""def __init__(self, passengers, from_time, from_station, to_station, number_seat):"""定义实例属性,初始化"""# 乘客姓名self.passengers = passengers# 起始站和终点站self.from_station = from_stationself.to_station = to_station# 乘车⽇期self.from_time = from_time# 车次 - 座位 dictnum_seat_dic = {}for num_seat in number_seat:use = num_seat.split(':')num = use[0]seats = use[1]seats_use = seats.split(',')seat_str = ''for seat in seats_use:# 座位类型所在td位置if seat == '商务座特等座':seat_type_index = 1seat_type_value = 9elif seat == '⼀等座':seat_type_index = 2seat_type_value = 'M'elif seat == '⼆等座':seat_type_index = 3seat_type_value = 0elif seat == '⾼级软卧':seat_type_index = 4seat_type_value = 6elif seat == '软卧':seat_type_index = 5seat_type_value = 4elif seat == '动卧':seat_type_index = 6seat_type_value = 'F'elif seat == '硬卧':seat_type_index = 7seat_type_value = 3elif seat == '软座':seat_type_index = 8seat_type_value = 2elif seat == '硬座':seat_type_index = 9seat_type_value = 1elif seat == '⽆座':seat_type_index = 10seat_type_value = 1elif seat == '其他':seat_type_index = 11seat_type_value = 1else:seat_type_index = 7seat_type_value = 3seat_str += (str(seat_type_index) + '-' + str(seat_type_value) + ',')num_seat_dic[num] = seat_strself.num_seat_dic = num_seat_dic# 新版12306官⽹主要页⾯⽹址self.login_url = 'https:///otn/resources/login.html'self.init_my_url = 'https:///otn/view/index.html'self.ticket_url = 'https:///otn/leftTicket/init?linktypeid=dc'# 浏览器驱动信息,驱动下载页:https:///a//chromedriver/downloadsself.driver_name = 'chrome'self.driver = Browser("chrome")def do_login(self):"""登录功能实现,⼿动识别验证码进⾏登录"""self.driver.visit(self.login_url)sleep(1)# 选择登陆⽅式登陆print('请扫码登陆或者账号登陆……')while True:if self.driver.url != self.init_my_url:sleep(1)else:breakdef start_brush(self):"""买票功能实现"""# 浏览器窗⼝最⼤化self.driver.driver.maximize_window()# 登陆self.do_login()# 跳转到抢票页⾯self.driver.visit(self.ticket_url)try:print('开始刷票……')# 加载车票查询信息self.driver.cookies.add({"_jc_save_fromStation": self.from_station})self.driver.cookies.add({"_jc_save_toStation": self.to_station})self.driver.cookies.add({"_jc_save_fromDate": self.from_time})self.driver.reload()count = 0while self.driver.url == self.ticket_url:self.driver.find_by_text('查询').click()sleep(1)count += 1print('第%d次点击查询……' % count)if count % 50 == 0:self.driver.find_by_id('login_user').click()sleep(1)self.driver.visit(self.ticket_url)sleep(1)print('继续刷票......')# 加载车票查询信息self.driver.cookies.add({"_jc_save_fromStation": self.from_station})self.driver.cookies.add({"_jc_save_toStation": self.to_station})self.driver.cookies.add({"_jc_save_fromDate": self.from_time})self.driver.reload()if self.driver.url == self.ticket_url:continuetry:# 多车次处理for bander in self.num_seat_dic.keys():current_tr = self.driver.find_by_xpath('//tr[@datatran="' + bander + '"]/preceding-sibling::tr[1]') if current_tr:# 多座次处理seat_value = self.num_seat_dic[bander]seat_split = seat_value.split(',')for seat in seat_split:if seat:seat_type = seat.split('-')seat_type_index = int(seat_type[0])seat_type_value = int(seat_type[1])if current_tr.find_by_tag('td')[seat_type_index].text == '--':print(bander + ' 还未出售')sleep(1)elif current_tr.find_by_tag('td')[seat_type_index].text == '⽆':print(bander + ' ⽆票,继续尝试……')sleep(1)else:# 有票,尝试预订print(bander + ' 刷到票了(余票数:' + str(current_tr.find_by_tag('td')[seat_type_index].text) + '),开始尝试预订……') current_tr.find_by_css('td.no-br>a')[0].click()sleep(1)key_value = 1for p in self.passengers:# 选择⽤户print('开始选择⽤户……')self.driver.find_by_text(p).last.click()# 选择座位类型print('开始选择席别……')if seat_type_value != 0:self.driver.find_by_xpath("//select[@id='seatType_" + str(key_value) + "']/option[@value='" + str( seat_type_value) + "']").first.click()key_value += 1sleep(0.2)if p[-1] == ')':self.driver.find_by_id('dialog_xsertcj_ok').click()print('正在提交订单……')self.driver.find_by_id('submitOrder_id').click()sleep(2)# 查看放回结果是否正常submit_false_info = self.driver.find_by_id('orderResultInfo_id')[0].textif submit_false_info != '':print(submit_false_info)self.driver.find_by_id('qr_closeTranforDialog_id').click()sleep(0.2)self.driver.find_by_id('preStep_id').click()sleep(0.3)continueprint('正在确认订单……')self.driver.find_by_id('qr_submit_id').click()print('预订成功,请及时前往⽀付……')else:print('不存在当前车次【%s】,已结束当前刷票,请重新开启!' % self.number)sys.exit(1)except Exception as error_info:print(error_info)except Exception as error_info:print(error_info)if __name__ == '__main__':# nyapassengers=['***'] # ⽤户名from_time='2019-02-01' # 出发⽇期from_station='%u4E0A%u6D77%2CSHH' # 起始站点 - 来⾃12306 余票查询请求 - cookie (此处 - 上海) to_station='%u6C11%u6743%2CMQF' # 结束站点(此处 - 民权)number_seat=['K4054:硬座,⽆座','K4168:硬座,⽆座'] # 车次:座位类型# 开始抢票ticket = BrushTicket(passengers, from_time, from_station, to_station, number_seat)ticket.start_brush()。

列车时刻查询源码

列车时刻查询源码

#include<iostream>#include<fstream>#include<string>#include<iomanip>#include<time.h>#include<windows.h>using namespace std;class train_infor{private:static int train_No;char start[20];char end[20];int train_order;int Hour_start,Minute_start;float GoHour;public:train_infor();~train_infor();train_infor *next;void input();void input(ifstream & is);void output();void output(ofstream & os);void GetTime_start();bool GetTime();int Get_train_order() { return train_order; } string Get_end()const;};int train_infor::train_No=1;train_infor::train_infor(){train_No++;}train_infor::~train_infor(){train_No--;}void train_infor::input(){cout<<"\t\t\t按提示输入:"<<endl;cout<<"请输入班次: ";while(1){cin>>train_order;if (cin.fail()){cout << "\n班次输入错误,请重新输入:";cin.clear();cin.get();}elsebreak;}GetTime_start();cout<<"请输入行车时间:";while(1){cin>>GoHour;if (cin.fail()){cout << "\n行车时间输入错误,请重新输入:";cin.clear();cin.get();}elsebreak;}cout<<"请输入起始站与终点站(始发站/终点站):";cin>>start;cin>>end;}void train_infor::input(ifstream & is){is>>train_order>>Hour_start>>Minute_start>>start>>end>>GoHour;is.get();}void train_infor::output(){cout<<" "<<train_order<<"\t";if(Minute_start==0){cout<<Hour_start<<":"<< Minute_start<<"0\t";}else{cout<<Hour_start<<":"<< Minute_start<<"\t";}cout<<start<<"\t"<<end<< "\t"<<GoHour;if(!GetTime())cout<<"\t 此班列车已出发"<<endl;elsecout<<"\t 此班列车未出发"<<endl;}void train_infor::output(ofstream & os){os<<setw(6)<<train_order<<setw(15)<<Hour_start<<setw(15)<<Minute_start<<setw(15)<<start<<setw(6)<<end<<setw(15)<<GoHour<<endl;}void train_infor::GetTime_start(){cout<<"请输入始发时间(时/分):";while(1){cin>>Hour_start>>Minute_start;if (cin.fail()){cout << "\n时间输入错误,请重新输入:";cin.clear();cin.get();}else if(Hour_start<0||Hour_start>24||Minute_start<0||Minute_start>60) cout<<"\n时间格式出错,请重新输入:";elsebreak;}}bool train_infor::GetTime(){struct tm *local;time_t t;t=time(NULL);local=localtime(&t);if(local->tm_hour<Hour_start||(local->tm_hour==Hour_start && local->tm_min<=Minute_start))return 1;elsereturn 0;}string train_infor::Get_end()const{string s=end;return s;}class train_link{public:train_link(){head=new train_infor;head->next=NULL;key=0;}~train_link(){delete head;}void input();void mend();void del();int find(train_infor **p,int num,char *pn);void found();void show();void save();void begin();void clear();void about();char mainmenu();void setkey(int k){ key=k; }int getkey(){ return key;}private:train_infor *head;int key;int password;};void train_link::input(){if(password==1){train_infor *p,*p2=NULL;p=head;int n=1; //int n;while(p->next)p=p->next;while(n){p2=new train_infor;p2->input();p->next=p2;p2->next=NULL;p=p->next;train_link::setkey(1);cout<<"\t\t\t按1继续输入, 按0返回菜单: ";cin>>n;if(!cin)throw string("数据输入错误");}}elsecout<<"\n\t\t对不起,游客不能录入车票信息"<<endl;}void train_link::show(){cout<<"列车基本信息如下:"<<endl<<"|班次发车时间起点站终点站行车时间当前状况|"<<endl;train_infor *p;p=head;while(p->next){(p->next)->output();p=p->next;}}void train_link::found(){train_infor *p;int num,n;char name[20];do{cout<<"\t\t1:按列车班次查找, 2:按列车终点站查找: ";cin>>n;if(!cin)throw string("数据输入错误");}while(n<1||n>2);if(n==1){cout<<"\t\t\t请输入班次: ";cin>>num;if(!cin)throw string("数据输入错误");}if(n==2){cout<<"\t\t\t请输入终点站: ";cin>>name;}if(!find(&p,num,name)){cout<<"\t\t找不到你要查找的车次,请确定输入信息是否正确!"<<endl;return;}}int train_link::find(train_infor **p1,int num,char *pn){train_infor *p;p=head;int t=0;while(p->next){(*p1)=p;if( (p->next)->Get_train_order()==num|| (p->next)->Get_end()==pn ){cout<<"列车基本信息如下:"<<endl<<"|班次发车时间起点站终点站行车时间当前状况|"<<endl;(p->next)->output();t=1;}p=p->next;}return t;}void train_link::del(){if(password==1){train_infor *p,*p2;int num;char name[20];cout<<"\t\t\t请输入列车班次号: ";cin>>num;if(!cin)throw string("数据输入错误");if( !find(&p,num,name) ){cout<<"\t\t对不起!找不到你要删除的内容,请确定输入信息是否正确!"<<endl;return;}cout<<"\n\t\t\t确定删除(Y/N)?";char a;cin>>a;if(a=='y'||a=='Y'){p2=p->next;p->next=p2->next;delete p2;train_link::setkey(1);cout<<"\n\t\t\t信息已删除!";}else{cout<<"\n\t\t\t取消删除!";}}elsecout<<"\n\t\t对不起,游客不能删除车票信息"<<endl;}void train_link::mend()if(password==1){train_infor *p;int num;char name[20];cout<<"\t\t\t请输入班次号: ";cin>>num;if(!cin)throw string("数据输入错误");if( !find(&p,num,name) ){cout<<"\t\t对不起!找不到你要修改的内容,请确认输入信息是否正确!"<<endl;return;}(p->next)->input();train_link::setkey(1);}elsecout<<"\n\t\t对不起,游客不能修改车票信息"<<endl;}void train_link::save(){if(password==1){train_infor *p;p=head;ofstream os("train.txt",ios::out);if (train_link::getkey()==1){while(p->next){(p->next)->output(os);p=p->next;}}cout<<"\t\t\t文件已保存! "<<endl;train_link::setkey(0);}elsecout<<"\n\t\t对不起,游客无法保存车票信息"<<endl;}void train_link::about(){cout<<endl<<"关于列车时刻查询系统"<<endl<<"────────"<<endl;cout<<"使用说明:"<<endl<<"\t1.请按照操作提示输入正确的格式,以保证系统正常运行;"<<endl<<"\t2.当使用管理员登陆时,需输入密码,可进行对系统的所有操作;"<<endl <<"\t3.当使用游客身份登陆时,无需输入密码,但只能浏览和查询列车时刻信息;"<<endl<<"\t4.车票信息用文本文档格式,文件名为train,保存在本程序文件夹目录下,可以直接打开查看."<<endl<<endl<<"系统说明:"<<endl<<"\t本系统为课程设计作品,可以简易的进行列车时刻查询,欢迎提出意见和建议"<<endl<<"\t \t "<<endl<<endl;}void train_link::begin(){password=0;train_infor *p,*p2;p=head;clear();long t;ifstream is("train.txt",ios::in);if(!is){ofstream os("train.txt",ios::out);os.close();return ;}int num=-1;while(1){num=-1;t=is.tellg();is>>num;is.seekg(t);if(num<0){is.close();return;}p2=new train_infor;p2->input(is);p->next=p2;p2->next=NULL;p=p->next;}}void train_link::clear(){train_infor *p,*p2;p=head->next;while( p ){p2=p;p=p->next;delete p2;}}char train_link::mainmenu(){struct tm *local;char s1[128];time_t t;t=time(NULL);local=localtime(&t);strftime(s1,128,"%Y-%m-%d %H:%M ",local);string s;cout<<"\n\n ────<<欢迎使用列车时刻查询系统>>────"<<endl<<endl;cout<<" ┌───────────────────────────┐"<<endl<<" │┌─────────────────────────┐│"<<endl<<" ││ 1. 录入列车信息 2. 浏览列车信息││"<<endl<<" ││ 3. 查询列车信息 4. 删除列车信息││"<<endl<<" ││ 5. 修改列车信息 6. 保存列车信息││"<<endl<<" ││7. 关于列车时刻查询系统0. 退出系统││"<<endl<<" │└─────────────────────────┘│<<" └───────────────────────────┘"<<endl<<"\t\t\t\t\t "<<s1<<endl<<endl;while(password==0){cout<<"\t\t请选择用户名(1.管理员;2.游客): ";int n; cin>>n;if(!cin)throw string("数据输入错误");if(n==1){cout<<"\n\t\t请输入管理员密码: ";int m;cin>>m;if(m==123456){password=1;cout<<endl;break;}else{cout<<"\n\t\t密码输入不正确\n"<<endl;}}else{password=2;break;}}cout<<" 请选择功能按钮:";while(true){cin>>s;if(s.length()!=1||s[0]<'0'||s[0]>'9')cout<<"输入错误,请重新选择功能按钮: ";elsebreak;}return s[0];}int main()SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGRO UND_INTENSITY|FOREGROUND_GREEN|BACKGROUND_BLUE); // 调用windows系统文件改变字体颜色和背景颜色train_link pp;int k=1;string s;pp.begin();try{while(k==1){system("cls");s=pp.mainmenu();switch(s[0]){case '1':pp.input(); break;case '2':pp.show(); break;case '3':pp.found(); break;case '4':pp.del(); break;case '5':pp.mend(); break;case '6':pp.save(); break;case '7':pp.about();break;case '0':k=0;break;}if(k==1){cout<<"\n\t\t\t是否返回主菜单? 1.是(继续)2.不是(退出): ";cin>>k;if(!cin)throw string("数据输入错误");}if(k==0){if(pp.getkey()==1){cout<<"\t\t\t是否保存? 1.保存0.不保存: ";cin>>k;if(!cin)throw string("数据输入错误");if(k==1)pp.save();pp.clear();k=0;}}}}catch(string s){cout<<s<<",为保护系统不崩溃,将自动退出系统!"<<endl;system("pause");}return 0;}。

火车发车时间接口 可根据列次号查询相关信息

火车发车时间接口 可根据列次号查询相关信息

火车发车时间接口可根据列次号查询相关信息火车发车时间接口,可根据列次号,查询列次类型、出发站、终点站、发车时间、到达时间、运行时间、里程、票价相关信息等相关内容。

接口名称:火车发车时间接口接口平台:聚合数据接口地址:/onebox/train/query支持格式:json请求方式:http get请求示例:/onebox/train/query?key=您申请的KEY&train=D3010请求参数说明:名称类型必填说明train string 是车次号,如:D3010key string 是应用APPKEY(应用详细页查询)返回参数说明:名称类型说明error_code int 返回码reason string 返回说明result string 返回结果集火车发车时间接口调用JSON返回示例:{"reason": "查询成功","result": {"list": {"train_no": "D3010/D3011", /*列次*/"train_type": "动车组", /*列次类型*/"start_station": "上海虹桥", /*出发站*/"start_station_type": "始","end_station": "汉口", /*终点站*/"end_station_type": "终","start_time": "14:52", /*发车时间*/"end_time": "20:47", /*到达时间*/"run_time": "5小时55分", /*运行时间*/"run_distance": "829公里", /*里程*/"price_list": [ /*票价相关信息*/{"price_type": "二等座","price": "264"},{"price_type": "一等座","price": "316"}]}},"error_code": 0}。

列车时刻查询系统面向对象课程设计代码郁小芳

列车时刻查询系统面向对象课程设计代码郁小芳

1,//trainsys.cpp文件#include"train.h"#include"trainlist.h"#include<iostream>using namespace std;int main(){ trainlist p;int k,s;p.begin();while(p.password==0) //身份验证选择管理员或者游客,游客只能查看无其他功能{cout<<endl<<" ***********<<欢迎进入列车时刻查询系统>>***********"<<endl<<endl;p.about();//使用该系统前的说明书,即一般软件的帮助信息cout<<endl;cout<<"请选择用户名类型: 管理员:输入1";cout<<endl<<" 游客: 输入其他任意键"<<endl;string n;string m;cin>>n;if(n=="1"){cout<<"请输入管理员密码: ";cin>>m;}if(n=="1"&&m=="8")//管理员的账号和密码{p.password=1;cout<<endl;break;}else{p.password=2; //游客身份标志break;}}while(p.password==1){ system("cls");//调用系统清屏s=p.menu1(); //调用主菜单函数switch(s){case 1:p.input(); break; //录入列车信息case 2:p.show(); break; //浏览列车信息case 3:p.found(); break; //查询列车信息case 4:p.del(); break; //删除列车信息case 5:p.xg(); break; //修改列车信息case 6:p.save(); break; //保存列车信息case 7:p.about();break; //列车时刻查询系统说明书case 0:k=0;break; //退出系统}if(p.password==1){cout<<" 按任意键(除0)返回主菜单按0真的退出"<<endl;cin>>k;if(k==0){if(p.password==1){cout<<" 是否保存? 保存:按1 不保存:按除1外任意键 ";cin>>k;if(k==1)p.save();p.clear();} p.password=0;}}}while(p.password==2){system("cls");//调用系统清屏s=p.menu2(); //调用主菜单函数switch(s){case 1:p.show(); break; //浏览列车信息case 2:p.found(); break; //查询列车信息case 3:p.about();break; //列车时刻查询系统说明书case 0:p.password=0; cout<<" 谢谢使用,祝您旅途愉快!"<<endl;break;//退出系统}if(p.password==2){cout<<" 按任意键(除0)返回主菜单按0退出"<<endl;cin>>k;if(k==0){cout<<" 谢谢使用,祝您旅途愉快!"<<endl;p.password=0;}}}return 0;}2,//train.h头文件#ifndef TRAIN_H#define TRAIN_H#include<fstream> //文件输入/输出#include<iomanip> //参数化输入/输出#include<time.h> //时间库函数#include<string> //字符串操作#include<iostream>using namespace std; //命名空间class train{public:train(){}train *next; //指向自身的指针void input(); //录入函数void input(ifstream & is); //读取函数void output(); //输出函数void output(ofstream & os); //写入函数int get_train_order() { return train_order; } //返回车次号bool gettime(); //判断发车情况string get_end(){return end;} //返回终点站的字符串private:char start[20]; //起点站char end[20]; //终点站int train_order; //车次号int hour_start,minute_start; //发车时间string gohour; //到站时间};void train::input() //车次信息输入{ int a=1;cout<<"请输入车次: ";cin>>train_order;while(a){ cout<<"请输入发车时间(时/分):"<<endl;cin>>hour_start;cin>>minute_start;if(hour_start<0||hour_start>=24||minute_start<0||minute_start>=60)cout<<"时间格式出错,请重新输入!"<<endl;//判断时间格式是否出错,小时不能小于0大于24,分钟不能小于0大于60elsea=0;}cout<<"请输入到站时间:"<<endl;cin>>gohour;cout<<"请输入起始站:";cin>>start;cout<<"请输入终点站:";cin>>end;}void train::input(ifstream & is){is>>train_order>>hour_start>>minute_start>>start>>end>>gohour;is.get();}void train::output(){cout<<setw(2)<<train_order;<<setw(10)<<hour_start<<":"<<minute_start<<" "<<setw(10)<<start<<" "<<setw(10)<<end<<" "<<setw(8)<<gohour;if(!gettime())cout<<" "<<setw(16)<<"此班列车已出发"<<endl;elsecout<<" "<<setw(16)<<"此班列车未出发"<<endl;}void train::output(ofstream & os){os<<setw(2)<<train_order<<setw(10)<<hour_start<<setw(10)<<minute_start<<setw(10)<<start <<setw(10)<<end<<setw(8)<<gohour<<endl; //用setw()函数设置输出宽度}bool train::gettime(){struct tm *local;time_t t;t=time(NULL);local=localtime(&t); //获取当前系统时间if(local->tm_hour<hour_start||(local->tm_hour==hour_start&&local->tm_min<=minute_start)) return 1; //比较当前时间与发车时间,获得班次的当前状况,返回表示班次未出发elsereturn 0; //返回表示班次已出发}#endif3,//trainlist.h头文件#ifndef TRAINLIST_H#define TRAINLIST_H#include<fstream>#include<iomanip>#include<string>#include<iostream>using namespace std;class trainlist{public:trainlist(){h=new train;h->next=NULL;}//带参数的构造函数~trainlist(){delete h;} //析构函数void input(); //录入列车信息void xg(); //修改列车信息void del(); //删除列车信息int find1(train **p,int num); //按车次查找的函数int find2(train **p,char *pn); //按终点站查找的函数void found(); //查询列车信息void show(); //显示列车信息void save(); //保存列车信息void begin(); //初始化列车信息void clear(); //清除函数void about(); //关于列车信息char menu1(); //管理员主菜单函数char menu2(); //游客主菜单函数int password; //身份登陆标志private:train *h; //链表指针};void trainlist::input() //控制列车信息的输入{train *p1,*p2=NULL;p1=h;int n=1;while(p1->next)p1=p1->next; //实现列车信息的追加while(n){ p2=new train;p2->input();p1->next=p2;p2->next=NULL;p1=p1->next;cout<<"按除0外任意键继续输入 , 按0返回菜单: ";cin>>n;}}void trainlist::show() //浏览列车信息{cout<<"列车基本信息如下:"<<endl<<" 车次始发时间起点站终点站进站时间发车情况"<<endl;train *p;p=h;while(p->next){cout<<" ";(p->next)->output();cout<<endl;p=p->next;}}void trainlist::found() //按列车车次或终点站查询信息{ train *p;int m=1;while(m) //用循环实现继续查找{ int num,n;char name[20];cout<<" 1:按列车班次查找, 2:按列车终点站查找: ";cin>>n;if(n==1||n==2){ if(n==1){cout<<"请输入班次: ";cin>>num;if(!find1(&p,num)){cout<<"找不到你要查找的车次,请确定输入信息是否正确!"<<endl;}}if(n==2){cout<<"请输入终点站: ";cin>>name;if(!find2(&p,name)){cout<<"找不到你要查找的车次,请确定输入信息是否正确!"<<endl;}}}elsecout<<"输入的信息错误!";cout<<endl<<"按1继续查找, 按0退出查找!";cin>>m;}}int trainlist::find1(train **p1,int num) //具体按车次查询列车信息{train *p;p=h;int t=0;cout<<"列车基本信息如下:"<<endl<<"车次始发时间起点站终点站进站时间发车情况"<<endl;while(p->next){ (*p1)=p;if( (p->next)->get_train_order()==num){(p->next)->output();t=1;}p=p->next;}return t;}int trainlist::find2(train **p1,char *pn) //具体按终点站查询列车信息{train *p;p=h;int t=0;cout<<"列车基本信息如下:"<<endl<<"班次始发时间起点站终点站进站时间发车情况"<<endl;while(p->next){ (*p1)=p;if( ( (p->next)->get_end()==pn )){(p->next)->output();t=1;}p=p->next;}return t;}void trainlist::del() //列车信息删除{train *p,*p2;int num;cout<<"请输入列车班次号: ";cin>>num;if( !find1(&p,num) ){cout<<" 对不起!找不到你要删除的内容,请确定输入信息是否正确!"<<endl;return;}p=h;while(p->next){ p2=p;if( (p->next)->get_train_order()==num){ //p->next->output();p2=p->next;p->next=p2->next;delete p2;if (p->next==NULL){cout<<" 信息已删除!";return;}}p=p->next;}cout<<" 信息已删除!";}void trainlist::xg() //列车信息修改{train *p;int n=1;while(n){int num;cout<<"请输入班次号: ";cin>>num;if( !find1(&p,num) )//调用查找函数判断有无此班车{cout<<"\t\t对不起!找不到你要修改的内容,请确认输入信息是否正确!"<<endl;}cout<<endl;p=h;int t=0;while(p->next){if( (p->next)->get_train_order()==num){cout<<"列车基本信息如下:"<<endl<<"车次始发时间起点站终点站进站时间发车情况"<<endl;p->next->output();(p->next)->input();}p=p->next;}cout<<"按1继续修改 , 按0返回菜单: ";cin>>n;}}void trainlist::save() //列车信息保存{train *p;p=h;ofstream os("train.txt",ios_base::out);while(p->next){(p->next)->output(os);p=p->next;}cout<<"文件已保存! "<<endl;}void trainlist::about() //输出列车时刻查询系统使用说明{char ch;ifstream file1("使用说明.txt"); //在构造过程中打开使用说明while(file1.get(ch)) //get函数读入数据时包括空白字符cout<<ch;file1.close();//关闭该文件}void trainlist::begin() //初始化列车信息函数{ofstream os;password=0;train *p1,*p2;p1=h;clear();long t;ifstream is("train.txt",ios_base::in||ios_base::binary); //文件以输入方式打开if(!is){ofstream os("train.txt",ios_base::out||ios_base::binary); //文件以输出方式打开os.close(); //关闭文件return ;}int num=-1;while(1){ num=-1;t=is.tellg(); //记录当前位置is>>num;is.seekg(t); //移动到原来位置if(num<0){ is.close();return;}p2=new train;p2->input(is); //输入is对象内容p1->next=p2;p2->next=NULL;p1=p1->next;p1->output(os);}}void trainlist::clear() //释放列车信息所占内存的函数{ train *p1,*p2;p1=h->next;while( p1 ){p2=p1;p1=p1->next;delete p2;}}char trainlist::menu1(){int s;cout<<" ***********<<欢迎进入列车时刻查询系统>>***********"<<endl<<endl;cout<<" ****************************************************************"<<endl; cout<<" -------------------------------------------------------------- "<<endl <<" 1. 录入列车信息 2. 浏览列车信息 "<<endl <<" 3. 查询列车信息 4. 删除列车信息 "<<endl <<" 5. 修改列车信息 6. 保存列车信息 "<<endl <<" 7. 关于列车时刻查询系统说明 0. 退出系统 "<<endl <<" -------------------------------------------------------------- "<<endl <<" **************************************************************** "<<endl;cout<<"请选择功能按钮: ";while(true){cin>>s;if(s<0||s>7)cout<<"输入错误,请重新选择功能按钮: ";elsebreak;}return s;}char trainlist::menu2(){int s;cout<<" ***********<<欢迎进入列车时刻查询系统>>***********"<<endl<<endl; cout<<" ****************************************************************"<<endl;cout<<" -------------------------------------------------------------- "<<endl <<" 1.浏览列车信息 2.查询列车信息 "<<endl<<" 3. 关于列车时刻查询系统说明 0.退出系统 "<<endl<<" -------------------------------------------------------------- "<<endl <<" **************************************************************** "<<endl;cout<<"请选择功能按钮: ";while(true){cin>>s;if(s<0||s>3)cout<<"输入错误,请重新选择功能按钮: ";elsebreak;}return s;}#endif。

WebService的列车时刻表

WebService的列车时刻表

名称:应用开发项目题目:Web Service列车时刻系统专业班级:年级:姓名:学名:序号:-----------------------------------------------------------------------资源收集自梁高崇四年档1概述1.1 Web Service服务应用Web Service是一种新应用程序的分支,是构建应用程序的普通模型能在支持Iternent 网络通讯的操作系统上实施。

Web Service也很容易部署,因为它们基于一些常规的产业标准以及已有的一些技术,诸如标准通用标记语言下的子集XML、HTTP。

Web Service减少了应用接口的花费。

Web Service为整个企业甚至多个组织之间的业务流程的集成提供了一个通用机制。

1.2 项目开发环境及工具开发环境:Microsoft .NET Framework 4.5、Windows 7。

开发工具:Microsoft Visual Studio 2013 、Notepad++ (编辑Html、CSS)、Chrome浏览器开发语言:C#注意事项:本列车时刻系统引用的是互联网上的第三方Web服务,因此使用本系统时务必保证本地机器的网络连接通畅,以免系统正常功能受到影响。

2.设计的任务和要求2.1设计任务本项目通过调用已有的Web Service可以较方便地查询全国范围的列车时刻表相关信息,获得的列车主要信息有,车次、始发站、终点站、发车时间、到站时间、运行时间、总里程。

2.2设计要求1.程序要求能够正常运行,并完成所要求的基本功能;2. 前台页面布局采取DIV/CSS方式;3.进行必要的系统测试;4.编写规范的设计说明书;2.3设计流程和步骤2.3.1程序设计主要流程2.3.2添加引用Web服务①选中项目右击②添加引用服务③打开高级选项④选中Web服务引用⑤在URL栏中输入并转到:⑥默认引用名.webxml.www,点击添加引用,此时成功添加Web服务。

python制作12306查票工具实验报告

python制作12306查票工具实验报告

Python制作12306查票工具实验报告一、引言在当前信息化社会,许多人都会选择网络火车票。

然而,由于12306网站的用户量大、抢票难度高,许多用户会遇到难以抢到心仪车票的情况。

本文将介绍利用Python编程语言制作12306查票工具的实验报告,帮助用户更高效地抢到心仪车票。

二、需求分析在开始编写程序之前,首先需要明确我们的需求。

12306查票工具应该具备以下功能:1. 可以根据用户输入的出发地、目的地、出行日期等信息,实时查询12306网站的车票情况;2. 在车票查询结果中,能够筛选出用户需要的车次、座席,并自动提交抢票请求;3. 在抢票期间,能够持续监控车票的变化情况,并及时提醒用户。

三、技术选型针对以上需求,我们选择使用Python编程语言以及相关的第三方库来实现我们的12306查票工具。

具体来说,我们会使用requests库来发送网络请求,使用BeautifulSoup库来解析HTML页面,使用selenium库来进行自动化操作。

四、实施步骤1. 获取12306网站数据我们需要发送网络请求获取12306网站的车票数据。

我们可以使用requests库发送GET请求,并将返回的HTML页面使用BeautifulSoup库进行解析,从而轻松地获取到所需的车票信息。

2. 筛选需要的车票在获取到12306网站的车票信息后,我们需要对其进行筛选,找出符合用户需求的车次、座席。

这一过程需要编写一些逻辑代码来实现,例如根据用户输入进行筛选、排除已售完的车票等。

3. 自动抢票一旦找到符合用户需求的车票,我们就需要自动提交抢票请求。

这一步骤可以通过selenium库实现,通过模拟用户在浏览器中的操作来完成。

4. 监控车票变化我们需要持续监控车票的变化情况,并及时提醒用户。

这一步骤可以通过定时任务或者轮询的方式来实现。

五、实验结果通过以上步骤,我们成功地实现了12306查票工具。

用户可以通过输入相关信息,快速地查询到符合需求的车票,并进行抢票操作。

列车时刻表查询代码

列车时刻表查询代码

六源代码Dim quan() As String:Dim delt() As String:Dim js() As String:Dim x() As String:Dim max As String:Private Sub Combo1_click()a = Combo1.ListIndexClsList2.Clearm = -1For i = 1 To maxFor z = js(i) To js(i + 1)v = InStr(delt(z), x(a + 1))If v <> 0 Thenm = m + 1List2.List(m) = delt(js(i) + 2)End IfNext zNext iList2.Visible = TrueList1.Visible = FalseEnd SubPrivate Sub Command1_Click()List1.Visible = TrueList2.Visible = FalseEnd SubPrivate Sub Form_Load()ReDim Preserve quan(0) '这个数组代表了content里面的每一行Open "content.txt" For Input As #1Do While Not EOF(1)Line Input #1, liecheReDim Preserve quan(UBound(quan) + 1)quan(UBound(quan)) = liecheLoop '上面是读取过程max = UBound(quan)For i = 1 To max ' 这里是将list1中的每一项赋值b = InStr(quan(i), ",") - 1List1.List(i - 1) = Left(quan(i), b)Next iClose #1Dim del As StringReDim Preserve delt(0) '这个数组代表了detail里面的每一行Open "detail.txt" For Input As #2Do While Not EOF(2)Line Input #2, delReDim Preserve delt(UBound(delt) + 1)delt(UBound(delt)) = delLoop '上面是读取过程Close #2ReDim js(0) '这个数组代表了"*"的位置z = -1For p = 1 To UBound(delt)z = z + 1If delt(p) = delt(1) ThenReDim Preserve js(UBound(js) + 1)js(UBound(js)) = zEnd IfNext pn = -1Dim y() As String '下面是给下拉列表框中的内容赋值,而且是没有重复的ReDim x(0)For v = 1 To UBound(delt)y = Split(delt(v), ",")If UBound(y) = 0 Then GoTo reo = y(0)For f = 0 To UBound(x)If x(f) = o Then GoTo reNext fReDim Preserve x(UBound(x) + 1)x(UBound(x)) = y(0)n = n + 1re: Next vFor r = 1 To UBound(x)Combo1.List(r - 1) = x(r)Next rEnd SubPrivate Sub List1_Click()Dim b() As Stringa = List1.ListIndex '选中了list中的项,反馈到text中Text1.Text = ""For i = js(a + 1) + 3 To js(a + 2)b = Split(delt(i), ",")one = LenB(b(0))ss = Len(b(1))ss1 = Len(b(2))kongge1 = 42 - one - sskongge = 37 - ss1zi = b(0) + Space(kongge1) + b(1) + Space(kongge) + b(2) '这里可以对齐冒号Text1.Text = Text1.Text + zi + vbCrLfNext iDim c() As Stringc = Split(quan(a + 1), ",")Text3.Text = c(1)Text4.Text = c(2)Text5.Text = c(3)Text6.Text = c(4)End SubPrivate Sub List2_Click()c = List2.ListIndex '选中了list中的项,反馈到text中For m = 0 To maxu = InStr(quan(m), List2.List(c))If u <> 0 Then Exit ForNext mDim b() As StringText1.Text = ""For i = js(m) + 3 To js(m + 1)b = Split(delt(i), ",")one = LenB(b(0))ss = Len(b(1))ss1 = Len(b(2))kongge1 = 42 - one - sskongge = 37 - ss1zi = b(0) + Space(kongge1) + b(1) + Space(kongge) + b(2) '这里也可以对齐冒号Text1.Text = Text1.Text + zi + vbCrLfNext iDim q() As Stringq = Split(quan(m), ",")Text3.Text = q(1)Text4.Text = q(2)Text5.Text = q(3)Text6.Text = q(4)End Sub。

PHP火车票查询

PHP火车票查询

<?php/***火车票查询方法简单尝试** @copyright widuu* @license * @lastmodify 2013-6-20*/function json_array($json){if($json){foreach ((array)$json as $k=>$v){$data[$k] = !is_string($v)? json_array($v):$v;}return $data;}}function doget ($start,$end,$time) // get获取数据使用{if(empty($time)){$time = date('Y-m-d',time());}else{if(substr($time,0,1)!=0){$time = date('Y-0',time()).$time;echo substr($time,0,1);}else{$time = date('Y-',time()).$time;}}$name = include ("../name.php");$star = $name[$start];$end = $name[$end];$url = "/otsquery/query/queryRemanentTicketAction.do?method=queryLeftTick et&orderRequest.train_date={$time}&orderRequest.from_station_telecode={$star}&orderReques t.to_station_telecode={$end}&orderRequest.train_no=&trainPassType=QB&trainClass=QB%23 D%23Z%23T%23K%23QT%23&includeStudent=00&seatTypeAndNum=&orderRequest.start_ti me_str=00%3A00--24%3A00";$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:/otsquery/query/queryRemanentTicketAc tion.do?method=init"));$file = file_get_contents($url, false , stream_context_create($optionget));return json_array(json_decode($file));}$result = doget("北京","廊坊","6-23");$result = strip_tags($result['datas']);$return_str = str_replace("&nbsp;","",$result);$return_str = str_replace("\\n","",$return_str);$a = explode(",",$return_str);$name =array();$c = array_chunk($a,16);array_pop($c);foreach($c as $k =>$v){$str="余票:<br>商务座:".$v[5].",特等座:".$v[6].",一等座:".$v[7].",二等座:".$v[8].",高级软卧:".$v[9].",软卧:".$v[10].",硬卧:".$v[11].",软座:".$v[12].",硬座:".$v[13].",无座:".$v[14].",其他:".$v[15];$str = preg_replace("/,硬座\:--,/","",$str);$str = preg_replace("/商务座\:--,/","",$str);$str = preg_replace("/,特等座\:--,/","",$str);$str = preg_replace("/,一等座\:--,/","",$str);$str = preg_replace("/,二等座\:--,/","",$str);$str = preg_replace("/,高级软卧\:--,/","",$str);$str = preg_replace("/,软卧\:--,/","",$str);$str = preg_replace("/,硬卧\:--,/","",$str);$str = preg_replace("/,软座\:--,/","",$str);$str = preg_replace("/,硬座\:--,/","",$str);$str = preg_replace("/,其他\:--/","",$str);echo "车次:{$v[1]},发站:{$v[2]},到站:{$v[3]},历时:{$v[4]},<br>{$str}<br>";}?>。

Python爬虫之12306-买票器小白源码

Python爬虫之12306-买票器小白源码

Python爬⾍之12306-买票器⼩⽩源码研究不易import requestsimport reimport urllib.parseimport jsonimport datetimefrom collections import OrderedDictself=requests.session()self.verify=Falseself.headers={'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8','Accept-Encoding':'gzip, deflate, br','Accept-Language':'zh-CN,zh;q=0.9','Connection':'keep-alive','Host':'','Cache-Control':'no-cache','User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36',}def dow():url='https:///passport/captcha/captcha-image?login_site=E&module=login&rand=sjrand'requests.packages.urllib3.disable_warnings()res=self.get(url)print(res.status_code)if res.status_code==200:with open('login.jpg','wb') as f:f.write(res.content)else:dow()#验证def yanzhengma():#获取验证码dow()# 1 2 3 4 5 6 7 8xylist=['35,35','105,35','175,35','245,35','35,105','105,105','175,105','245,105']print('请依次输⼊验证码的位置并换⾏,0表⽰结束')ilist=[]while True:i=input()if i=='0':breakilist.append(xylist[int(i)-1])xy=','.join(ilist)print(xy)data={'answer':xy,'login_site':'E','rand':'sjrand'}url='https:///passport/captcha/captcha-check'requests.packages.urllib3.disable_warnings()res=self.post(url,data=data)print(res.url)print(res.text)code=re.search('_code.*?(\d)',res.text,re.S).group(1)print(code)# 成功返回True,失败递归调⽤if code=='4':print('验证成功,请登陆')elif code=='5':print('验证错误')yanzhengma()elif code=='7':print('验证超时')yanzhengma()else:print('验证失败')yanzhengma()def login():yanzhengma()#验证码data={'username':'账号,'password':'密码,'appid':'otn'}url='https:///passport/web/login'requests.packages.urllib3.disable_warnings()res=self.post(url,data=data)print(res.text)code=re.search('_code.*?(\d)',res.text,re.S).group(1)# 成功返回True,失败递归调⽤if code=='0':yzdata={'appid':'otn'}tk_url='https:///passport/web/auth/uamtk'resp3=self.post(tk_url,data=yzdata)print('-----------------第⼀次验证-----------------')print(resp3.text)login_message=resp3.json()['newapptk']print('loginMessage=',login_message)yz2data={'tk':login_message}client_url='https:///otn/uamauthclient'resp4=self.post(client_url,data=yz2data)print('-----------------第⼆次验证-----------------')print(resp4.text)print('登陆成功,可以开始购票')elif code=='1':print('密码输⼊错误。

火车票订票接口PHP示例

火车票订票接口PHP示例

火车票订票接口示例本教程用来演示聚合数据-火车票订票接口的使用流程。

1.配置好PHP环境,PHP版本最好大于5.52.去聚合数据-火车票订票接口申请key3.以下代码供您了解流程,不要直接复制,不要用于生产环境<!--?php/*** 火车票订票接口示例* 测试环境:PHP 5.5.22*//*** 模拟post的函数* @param string $url 要访问的URL* @param string $data 要传递的参数* @return mixed*/function post($url, $data) {$ch= curl_init();curl_setopt( $ch, CURLOPT_POST , true );@curl_setopt( $ch, CURLOPT_POSTFIELDS , $data);curl_setopt($ch, CURLOPT_URL, $url);curl_setopt( $ch, CURLOPT_RETURNTRANSFER , true );$response= curl_exec($ch);curl_close($ch);return$response;}header("Content-type:text/html;charset=utf-8");$config= array('key' =--> '您申请到的key','url'=> array('cityCode'=> '/trainTickets/cityCode','ticketsAvailable'=> '/trainTickets/ticketsAvailab le','submit'=> '/trainTickets/submit','orderStatus'=> '/trainTickets/orderStatus','pay'=> '/trainTickets/pay',),);#1、查站点简码echo'行程规划:2015年7月1日,从苏州出发,目的地青岛<br><hr>';echo'首先查询苏州站和青岛站的简码<br>';//查询苏州站的简码$suzhouCodeResponse= post($config['url']['cityCode'], 'key='.$config['k ey'].'&stationName=苏州');$suzhouCodeArray= json_decode($suzhouCodeResponse, true); $suzhouCode= $suzhouCodeArray['result']['code'];echo'查询到苏州站的简码是:'.$suzhouCode.'<br>';// 查询青岛站的简码$qingdaoCodeResponse= post($config['url']['cityCode'], 'key='.$config[' key'].'&stationName=青岛');$qingdaoCodeArray= json_decode($suzhouCodeResponse, true); $qingdaoCode= $qingdaoCodeArray['result']['code'];echo'查询到青岛站的简码是:'.$qingdaoCode.'<br><hr>';#2、查余票echo'然后查询余票信息<br>';$ticketsAvailableResponse= post($config['url']['ticketsAvailable'],'&key='.$config['key'].'&train_date=2015-07-01'. //注意日期的格式'&from_station=SZH'. //上一步骤中查到苏州站的简码是SZH'&to_station=QDK'//上一步骤中查到青岛站的简码是QDK);$ticketsAvailableArray= json_decode($ticketsAvailableResponse, true); echo'查询到的余票信息:<br>';print_r($ticketsAvailableArray['result']['list']);echo'<br><hr>';#3、提交订单echo'提交订单<br>';echo'根据余票信息,发现G226车次比较合适<br>';echo'请看G226车次的余票详情,有些字段需要注意一下:<br>';echo'start_station_name:始发站,上海虹桥<br>';echo'from_station_name:我们将要出发的车站,苏州北,注意不是苏州<br>'; echo'from_station_code:OHH,需要注意这个是苏州北站的简码,不是苏州站的,也是接下来我们提交订单时传递的参数<br>';$passengersArray= array(array('passengerid'=> '1123', //乘客的顺序号,当有多个乘客时,每个人的乘客号要唯一'passengersename'=> '张三', //请替换成真实的名字'piaotype'=> '1', //请仔细查看官网文档中piaotype和piaotypename的对应关系,不可出错'piaotypename'=> '成人票','passporttypeseid'=> '1', //请仔细查看官网文档中passporttypeseid和pa ssporttypeseidname的对应关系,不可出错'passporttypeseidname'=> '二代身份证','passportseno'=> '420205************', //请替换成真实的身份证号码'price'=> '763.5', //填写真实的价格'zwcode'=> 'M', //请确定您选择的车次中是否真有此类座次'zwname'=> '一等座',),array( //第二个乘客,最多五个乘客'passengerid'=> '2123','passengersename'=> '李四','piaotype'=> '1','piaotypename'=> '成人票','passporttypeseid'=> '1','passporttypeseidname'=> '二代身份证','passportseno'=> '23060519930621234','price'=> '59.5','zwcode'=> 'M','zwname'=> '一等座',));$postArray= array('key'=> $config['key'],'checi'=> 'G226', //从上一步查询中发现G226有余票'from_station_code'=> 'OHH', //出发站的简码,注意不是SZH(苏州)'from_station_name'=> '苏州北', //出发站的名字,务必和出发站的简码对应'to_station_code'=> 'QDK', //到达车站的简码'to_station_name'=> '青岛', //到达车站的名字,务必和到达车站的简码对应'train_date'=> '2015-07-01', //乘车日期,注意时间的格式'passengers'=> json_encode($passengersArray, JSON_UNESCAPED_UNICODE), );$postStr= '';foreach($postArray as$key=> $value) {$postStr.= '&'.$key.'='.$value;}// echo $postStr;exit;$submit= post($config['url']['submit'], $postStr);// echo $submit;exit;echo'<hr>';/* 正常输出示例{"reason": "成功的返回","result": {"orderid": "1433493562439" //稍候可根据此订单号查询处理状态},"error_code": 0}*/#4、查询订单状态echo'查询订单状态<br>';//请将订单号替换成您自己的订单号$status= post($config['url']['orderStatus'], 'key='.$config['key'].'&or derid=1433493562439');echo$status;#5、请求出票(将从您的聚合账户中扣款);请求此接口的数据前请确定您的订单是一个待支付的订单echo'<hr>请求出票(前提是查询订单状态,得知占座成功)<br>';$pay= post($config['url']['pay'], 'key='.$config['key'].'&orderid=14334 93562439');echo$pay;。

Python爬取12306车次信息代码详解

Python爬取12306车次信息代码详解

Python爬取12306车次信息代码详解详情查看下⾯的代码:如果被识别就要添加⼀个cookie如果没有被识别的话就要⼀个user—agent就好了。

如果出现乱码就设置编码格式为utf-8#静态的数据⼀般在elements中(复制⽂字到sources按ctrl+f搜索。

找到的为静态),⽽动态去network中去寻找相关的信息import requestsimport redef send_request():headers = {'user-agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/74.0.3729.131 Safari/537.36','Cookie':'_uab_collina=159618052151589201474313; JSESSIONID=D33C89D8BEC6A692C79CFA69FC0B0D29; BIGipServerotn=233832970.24610.0000; BIGipServerpool_passport=216859146.50215.0000; RAIL_EXPIRATION=1596443951465; RAIL_DE url='https:///otn/leftTicket/query?leftTicketDTO.train_date=2020-07-31&leftTicketDTO.from_station=BJP&leftTicketDTO.to_station=TJP&purpose_codes=ADULT'#设置编码格式。

防⽌乱码resp=requests.get(url,headers=headers)resp.encoding='utf-8'return resp#解析数据#{}是字典。

Python实现火车票查询工具

Python实现火车票查询工具

Python实现⽕车票查询⼯具⼀、实验简介当你想查询⼀下⽕车票信息的时候,你还在上 12306 官⽹吗?或是打开你⼿机⾥的 APP?下⾯让我们来⽤ Python 写⼀个命令⾏版的⽕车票查看器,只要在命令⾏敲⼀⾏命令就能获得你想要的⽕车票信息!Python 基础知识的综合运⽤docopt、requests、colorama 及 prettytable 库的使⽤setuptools 的使⽤1.2 效果截图⼆、接⼝设计⼩应⽤-- tickets。

我们希望⽤户只要输⼊出发站,到达站以及⽇期就能获得想要的信息,⽐如要查看10⽉10号上海-北京的⽕车余票,我们只需输⼊:$ python3 tickets.py 上海北京 2016-10-10注意:上⾯的⽇期(包括后⾯的)是笔者写⽂章时确定的⽇期,当你在做这个项⽬的时候可能要根据当前时间做适当调整。

转化为程序语⾔就是:$ python tickets.py from to date另外,⽕车有各种类型,⾼铁、动车、特快、快速和直达,我们希望可以提供选项只查询特定的⼀种或⼏种的⽕车,所以,我们应该有下⾯这些选项:-g ⾼铁-d 动车-t 特快-k 快速-z 直达这⼏个选项应该能被组合使⽤,所以,最终我们的接⼝应该是这个样⼦的:$ python tickets.py [-gdtkz] from to date接⼝已经确定好了,剩下的就是实现它了。

三、代码实现⾸先安装⼀下实验需要⽤到的库:$ sudo pip3 install requests prettytable docopt$ sudo pip3 install --upgrade colorama #升级环境中的 coloramarequests,使⽤ Python 访问 HTTP 资源的必备库。

docopt,Python3 命令⾏参数解析⼯具。

prettytable,格式化信息打印⼯具,能让你像 MySQL 那样打印数据。

火车票查询系统代码

火车票查询系统代码

if(strcmp(numorcity,"num")==0) 于判断 {
// ; while(r) { if(strcmp(r->data.getnum(),findmess)==0) return r ; r=r->next ; } } else if(strcmp(numorcity,"city")==0) { r=l->next ; while(r) { if(strcmp(r->data.getcity(),findmess)==0) return r ; r=r->next ; } } return 0 ; } void chaxuntrain(Link l) // 查询火车信息 { char t='y'; while(t=='y') { Node *p ; int sel ; //查询方式代号(1和2) char str1[5],str2[10]; if(!l->next) //指向链表的最后尾段, 即没有记录 {cout<<" 非常抱歉,这里没有相关记录 !"<<endl; return ; } cout<<" 选择查询方式:\n 1:根据车次查询;\n 2:根据到达的城市查询:"<<endl;
if(fp==NULL) { cout<<" 文件无法打开!" ; return ; } p=l->next ; while(p) { if(fwrite(p,sizeof(Node),1,fp)==1) //fwrite,写内 容(Node)到流中,c库函数, { p=p->next ; count++; } else { flag=0 ; break ; } } if(flag) { cout<<" 以上"<<count<<"个train的信息已经被保 存"<<endl; shoudsave=0 ; } fclose(fp); //文件关闭 } int main() { FILE*fp1 ; Node*p,*r ; Link l ; int sel ; l=(Node*)malloc(sizeof(Node));
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于php的火车时刻表接口调用代码实例
代码描述:基于php的火车时刻表接口调用代码实例
代码平台:聚合数据
<!--?php
// +----------------------------------------------------------------------
// | JuhePHP [ NO ZUO NO DIE ]
// +----------------------------------------------------------------------
// | Copyright (c) 2010-2015 All rights reserved.
// +----------------------------------------------------------------------
// | Author: Juhedata <info@-->
// +----------------------------------------------------------------------
//----------------------------------
// 火车时刻表调用示例代码-聚合数据
// 在线接口文档:/docs/79
//----------------------------------
header('Content-type:text/html;charset=utf-8');
//配置您申请的appkey
$appkey= "*********************";
//************1.列次查询************
$url= "/onebox/train/query";
$params= array(
"train"=> "",//车次号,如:D3010
"key"=> $appkey,//应用APPKEY(应用详细页查询)
);
$paramstring= http_build_query($params);
$content= juhecurl($url,$paramstring);
$result= json_decode($content,true);
if($result){
if($result['error_code']=='0'){
print_r($result);
}else{
echo$result['error_code'].":".$result['reason'];
}
}else{
echo"请求失败";
}
//**************************************************
//************2.站到站检索************
$url= "/onebox/train/query_ab"; $params= array(
"from"=> "",//出发站名称,如:北京
"to"=> "",//到达站名称,如:上海
"key"=> $appkey,//应用APPKEY(应用详细页查询)
);
$paramstring= http_build_query($params);
$content= juhecurl($url,$paramstring);
$result= json_decode($content,true);
if($result){
if($result['error_code']=='0'){
print_r($result);
}else{
echo$result['error_code'].":".$result['reason'];
}
}else{
echo"请求失败";
}
//**************************************************
/**
* 请求接口返回内容
* @param string $url[请求的URL地址]
* @param string $params[请求的参数]
* @param int $ipost[是否采用POST形式]
* @return string
*/
function juhecurl($url,$params=false,$ispost=0){
$httpInfo= array();
$ch= curl_init();
curl_setopt( $ch, CURLOPT_HTTP_VERSION , CURL_HTTP_VERSION_1_1 );
curl_setopt( $ch, CURLOPT_USERAGENT , 'JuheData');
curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT , 60 );
curl_setopt( $ch, CURLOPT_TIMEOUT , 60);
curl_setopt( $ch, CURLOPT_RETURNTRANSFER , true );
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
if( $ispost)
{
curl_setopt( $ch, CURLOPT_POST , true );
curl_setopt( $ch, CURLOPT_POSTFIELDS , $params);
curl_setopt( $ch, CURLOPT_URL , $url);
}
else
{
if($params){
curl_setopt( $ch, CURLOPT_URL , $url.'?'.$params);
}else{
curl_setopt( $ch, CURLOPT_URL , $url);
}
}
$response= curl_exec( $ch);
if($response=== FALSE) {
//echo "cURL Error: " . curl_error($ch);
return false;
}
$httpCode= curl_getinfo( $ch, CURLINFO_HTTP_CODE );
$httpInfo= array_merge( $httpInfo, curl_getinfo( $ch) );
curl_close( $ch);
return$response;
}。

相关文档
最新文档