Skip to content

Instantly share code, notes, and snippets.

@hhhaiai
Forked from Ancientwood/chelaile.php
Created October 6, 2024 06:18
Show Gist options
  • Save hhhaiai/abafaa1e8fcae876129343ad27008d80 to your computer and use it in GitHub Desktop.
Save hhhaiai/abafaa1e8fcae876129343ad27008d80 to your computer and use it in GitHub Desktop.
chelaile
<?php
class chelaile
{
// 城市信息接口
private $citylist_url = 'https://web.chelaile.net.cn/cdatasource/citylist';
// 附近站点线路及信息
private $homePageInfo = 'https://api.chelaile.net.cn/bus/stop!homePageInfo.action';
//实时接口
private $lineDetail = 'http://api.chelaile.net.cn/bus/line!lineDetail.action';
//公交车细节
private $busesDetail = 'http://api.chelaile.net.cn/bus/line!busesDetail.action';
//公交车时刻表
private $getBusTime = 'http://api.chelaile.net.cn/bus/line!depTimeTable.action';
public $lat = ''; //维度
public $lng = ''; //经度
private $gpstype = 'wgs';
private $s = 'android'; //(必须,否则非法授权访问)
private $v = '3.80.0'; //(必须,否则非法授权访问)
private $src = 'webapp_default';
private $userId = '';
public $sign = 'PPgBLFF5779koWJpY09iQg%3D%3D'; //签名(无签名非法授权访问)
public $lineId = ''; //(0574-628路-0)
public $cityId = ''; //城市ID
private $apiUrl2 = 'https://api.chelaile.net.cn/bus/stop!homePageInfo.action?type=1&act=2&gpstype=wgs&gpsAccuracy=65.000000&cityId=城市ID(从前面一个接口获取)&hist=&s=IOS&sign=&dpi=3&push_open=1&v=5.50.4&lat=纬度&lng=经度';
private $geo_type = ''; //(必备gcj)
/**
* 获取城市信息
* @Author Youngxj
* @DateTime 2019-07-11
* @return [type] [description]
*/
public function getCity()
{
$url = $this->citylist_url . '?type=gpsRealtimeCity&lat=' . $this->lat . '&lng=' . $this->lng . '&gpstype=' . $this->gpstype . '&s=' . $this->s . '&v=' . $this->v . '&src=' . $this->src . '&userId=' . $this->userId;
$data = $this->curl_request($url);
if ($json_data = json_decode($data, 1)) {
if ($json_data && isset($json_data['status']) && $json_data['status'] == 'OK') {
return $json_data['data']['gpsRealtimeCity'];
} else {
return false;
}
} else {
return false;
}
}
/**
* 获取附近站点的线路及信息
* @Author Youngxj
* @DateTime 2019-07-11
* @return [type] [description]
*/
public function getArr()
{
$url = $this->homePageInfo . '?type=1&act=2&gpstype=' . $this->gpstype . '&gpsAccuracy=65.000000&cityId=' . $this->cityId . '&hist=&s=' . $this->s . '&sign=&dpi=3&push_open=1&v=5.50.4&lat=' . $this->lat . '&lng=' . $this->lng;
$data_json = $this->curl_request($url);
$data = str_replace(array("YGKJ##", '**YGKJ'), "", $data_json);
if ($json_data = json_decode($data, 1)) {
if ($json_data && isset($json_data['jsonr']['status']) && $json_data['jsonr']['status'] == '00') {
return $json_data['jsonr']['data'];
} else {
return false;
}
} else {
return false;
}
}
/**
* 获取公交车实时信息
* @Author Youngxj
* @DateTime 2019-07-11
* @param [type] $lineId 线路lineId
* @param [type] $geo_lng 公交站点lng
* @param [type] $geo_lat 公交站点lat
* @return [type] [description]
*/
public function getBusInfo()
{
$url = $this->lineDetail . '?sign=' . $this->sign . '&cityId=' . $this->cityId . '&geo_type=gcj&lineId=' . $this->lineId . '&isNewLineDetail=1&s=' . $this->s . '&last_src=app_xiaomi_store&geo_lng=' . $this->lng . '&geo_lat=' . $this->lat . '&v=' . $this->v;
$data_json = $this->curl_request($url);
$data = str_replace(array("YGKJ##", '**YGKJ'), "", $data_json);
if ($json_data = json_decode($data, 1)) {
if ($json_data && isset($json_data['jsonr']['status']) && $json_data['jsonr']['status'] == '00') {
return $json_data['jsonr']['data'];
} else {
return false;
}
} else {
return false;
}
}
/**
* 获取公交车细节
* @Author Youngxj
* @DateTime 2019-07-11
* @param [type] $targetOrder 所在公交站点ID
* @return [type] [description]
*/
public function getBusesDetail($targetOrder)
{
$url = $this->busesDetail . '?sign=' . $this->sign . '&cityId=' . $this->cityId . '&lat=' . $this->lat . '&geo_type=gcj&gpstype=gcj&geo_lt=5&screenDensity=3.0&flpolicy=1&stats_referer=searchHistory&targetOrder=' . $targetOrder . '&lineId=' . $this->lineId . '&s=' . $this->s . '&geo_lng=' . $this->lng . '&geo_lat=' . $this->lat . '&v=' . $this->v;
$data_json = $this->curl_request($url);
$data = str_replace(array("YGKJ##", '**YGKJ'), "", $data_json);
if ($json_data = json_decode($data, 1)) {
if ($json_data && isset($json_data['jsonr']['status']) && $json_data['jsonr']['status'] == '00') {
return $json_data['jsonr']['data'];
} else {
return false;
}
} else {
return false;
}
}
/**
* 获取公交时刻表
* @Author Youngxj
* @DateTime 2019-07-11
* @param [type] $sId 所在公交站的sid
* @return [type] [description]
*/
public function getBusTime($sId = '0574-6437')
{
$url = $this->getBusTime . '?sign=' . $this->sign . '&cityId=&stationId=' . $sId . '&geo_type=gcj&lineId=' . $this->lineId . '&s=android&geo_lng=' . $this->lng . '&geo_lat=' . $this->lat . '&v=' . $this->v;
$data_json = $this->curl_request($url);
$data = str_replace(array("YGKJ##", '**YGKJ'), "", $data_json);
if ($json_data = json_decode($data, 1)) {
if ($json_data && isset($json_data['jsonr']['status']) && $json_data['jsonr']['status'] == '00') {
return $json_data['jsonr']['data'];
} else {
return false;
}
} else {
return false;
}
}
/**
* curl模拟提交
* @param [type] $url 访问的URL
* @param string $post post数据(不填则为GET)
* @param string $referer 自定义来路
* @param string $cookie 提交的$cookies
* @param integer $returnCookie 是否返回$cookies
* @param string $ua 自定义UA
* @return [type] [description]
*/public function curl_request($url, $post = '', $referer = '', $cookie = '', $returnCookie = 0, $ua = 'Mozilla/5.0 (Windows NT 6.1; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0')
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_USERAGENT, $ua);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_AUTOREFERER, 1);
curl_setopt($curl, CURLOPT_TIMEOUT, 60);
curl_setopt($curl, CURLOPT_REFERER, $referer);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
$httpheader[] = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8";
$httpheader[] = "Accept-Encoding:gzip, deflate";
$httpheader[] = "Accept-Language:zh-CN,zh;q=0.9";
$httpheader[] = "Connection:close";
curl_setopt($curl, CURLOPT_HTTPHEADER, $httpheader);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
if ($post) {
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($post));
}
if ($cookie) {
curl_setopt($curl, CURLOPT_COOKIE, $cookie);
}
curl_setopt($curl, CURLOPT_HEADER, $returnCookie);
curl_setopt($curl, CURLOPT_TIMEOUT, 10);
curl_setopt($curl, CURLOPT_ENCODING, "gzip");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$data = curl_exec($curl);
if (curl_errno($curl)) {
return curl_error($curl);
}
curl_close($curl);
if ($returnCookie) {
list($header, $body) = explode("\r\n\r\n", $data, 2);
preg_match_all("/Set\-Cookie:([^;]*);/", $header, $matches);
$info['cookie'] = substr($matches[1][1], 1);
$info['content'] = $body;
return $info;
} else {
return $data;
}
}
#获取百度经纬度(ak=百度ak码)
public function addressbaidu($address) //$address:地址
{
$url = 'http://api.map.baidu.com/geocoder/v2/?address=' . $address . '&output=json&ak=Bsr5iefxHEwQD8iCFTx3GwWOem0ZoSBk';
if ($result = file_get_contents($url)) {
$arr = explode(',"lat":', substr($result, 40, 36));
return $arr;
} else {
return false;
}
}
#获取高德经纬度(key=高德key值)
public function addresstolatlag($address)
{
//$address:地址
$url = 'http://restapi.amap.com/v3/geocode/geo?key=a5767d2101d83dffcb6cc0325eaccfb4&s=rsv3&city=35&address=' . $address;
if ($result = file_get_contents($url)) {
$result = json_decode($result, true);
//判断是否成功
if (!empty($result['count'])) {
return explode(',', $result['geocodes']['0']['location']);
} else {
return false;
}
}
}
/**
* 方糖通知
* @Author Youngxj
* @DateTime 2019-07-12
* @param [type] $text 标题
* @param string $desp 内容
* @param string $key [description]
* @return [type] [description]
*/
public function sc_send($text, $desp = '', $key = '')
{
$postdata = http_build_query(
array(
'text' => $text,
'desp' => $desp,
)
);
$opts = array('http' => array(
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => $postdata,
),
);
$context = stream_context_create($opts);
return $result = file_get_contents('https://sc.ftqq.com/' . $key . '.send', false, $context);
}
<?php
$chelaile = new chelaile();
// 获取百度地图经纬度
$localtion = $chelaile->addressbaidu('这里改成自己车站的站名');
if (!$localtion) {
exit('地址定位获取失败');
}
// 反向
$fx = isset($_GET['fx']) ? 1 : 0;
// 细节
$xj = isset($_GET['xj']) ? 1 : 0;
// 站点ID
$zd = isset($_GET['zd']) ? $_GET['zd'] : '10';
// 签名
$chelaile->sign = 'PPgBLFF5779koWJpY09iQg%3D%3D';
// 当前公交站定位
if($fx){
$chelaile->lng = isset($localtion[0]) ? $localtion[0] : '';
$chelaile->lat = isset($localtion[1]) ? $localtion[1] : '';
}else{
$chelaile->lng = isset($localtion[0]) ? $localtion[0] : '';
$chelaile->lat = isset($localtion[1]) ? $localtion[1] : '';
}
// 获取城市信息
$cityInfo = $chelaile->getCity();
if ($cityInfo && isset($cityInfo['cityId']) && $cityInfo['cityId'] != '') {
$chelaile->cityId = $cityInfo['cityId'];
// $testInfo = $chelaile->getArr();
// var_dump($testInfo);exit();
// %E8%B7%AF urldecode编码 (路)
$chelaile->lineId = '0574-628%E8%B7%AF-' . $fx;
if ($xj) {
// 获取公交细节信息
$getBusesDetail = $chelaile->getBusesDetail($zd);
//echo json_encode($getBusesDetail);
echo '当前站台:' . $getBusesDetail['targetOrder'] . '<br/>';
echo '线路状态:' . $getBusesDetail['line']['assistDesc'] . ',' . $getBusesDetail['line']['desc'] . '<br/>';
if (isset($getBusesDetail['buses'][0])) {
echo '车牌号:' . $getBusesDetail['buses'][0]['busId'] . '<br/>';
echo '距离站点:' . $getBusesDetail['buses'][0]['distanceToSc'] . 'm<br/>';
}
echo '车辆状态:' . $getBusesDetail['tip']['desc'] . '<br/>';
exit();
}
// 获取公交实时信息
$getBusInfo = $chelaile->getBusInfo();
//echo json_encode($getBusInfo);
echo '当前位置:'.$chelaile->lat.','.$chelaile->lng.'<br/>';
echo '始发站:' . $getBusInfo['line']['startSn'] . '<br/>';
echo '终点站:' . $getBusInfo['line']['endSn'] . '<br/>';
echo '首班车:' . $getBusInfo['line']['firstTime'] . '<br/>';
echo '末班车:' . $getBusInfo['line']['lastTime'] . '<br/>';
echo '公交线:' . $getBusInfo['line']['name'] . '<br/>';
echo '每位票价:' . $getBusInfo['line']['price'] . '<br/>';
echo '车辆状态:' . $getBusInfo['line']['desc'] ? $getBusInfo['line']['desc'] . '<br/>' : '在路上……' . '<br/>';
echo '车辆描述:' . $getBusInfo['depDesc'] ? $getBusInfo['depDesc'] . '<br/>' : '在路上……' . '<br/>';
echo '提示:' . $getBusInfo['tip']['desc'] . '<br/>';
// if (isset($getBusInfo['tip']['desc'])) {
// $sytime = preg_match_all('/\d/', $getBusInfo['tip']['desc'], $string);
// var_dump($sytime);
// if (is_numeric($sytime)) {
// $msg = '公交线:' . $getBusInfo['line']['name'] . '还有' . $sytime . '分钟到达';
// $chelaile->sc_send('车来了', $msg);
// }
// }
if (isset($getBusInfo['stations'])) {
echo '#############################以下是车站信息#####################################<br/>';
foreach ($getBusInfo['stations'] as $key => $value) {
echo 'ID:' . $getBusInfo['stations'][$key]['order'] . ' 站台名:' . $getBusInfo['stations'][$key]['sn'] . ' 距离站点:' . $getBusInfo['stations'][$key]['distanceToSp'] . 'M {经度:' . $getBusInfo['stations'][$key]['lat'] . '纬度:' . $getBusInfo['stations'][$key]['lng'] . '}<br/>';
}
}
} else {
exit('获取城市ID失败');
}

Web

City List

City List
027北京
034上海
004杭州
003重庆
007成都
009青岛
019佛山
021中山
000武汉
001乌鲁木齐
008东莞
010郑州
011苏州
015瑞安
016惠州
018南京
022南昌
023许昌
024开封
025邯郸
026焦作
028嘉兴
029南阳
030安阳
031商丘
032驻马店
033新乡
035沈阳
038张家口
042昌吉
045宁波
046南宁
044绍兴
041济南
039赣州
043拉萨
047福州
053石家庄
054无锡
056唐山
057徐州
058常州
059泉州
048温州
051莆田
055南通
060大连
052烟台
061长春
067包头
069保定
070岳阳
071鞍山
066长沙
074三亚
020太原
062淮安
049呼和浩特
076西安
078临沂
068台州
073吉林
079精河县
080台北
083贵阳
081昆明
093泰安
091济宁
094长治
085香港
082沧州
099祁阳
100银川
103阿勒泰
104吐鲁番
107盘锦
108淄博
095秦皇岛
096哈尔滨
112威海
113潮州
114淮南
115陇南
116丽江
117日照
128辽阳
129海口
130内江
131牡丹江
133绵阳
135广汉
123滨州
125聊城
122潍坊
124德州
126菏泽
120枣庄
121东营
127莱芜
138漳州
137滕州
139铁岭
145泰州
134江门
143桂平
146绥芬河
141陵水
147海林
148科右中旗
149突泉
150扎兰屯
151珲春
152岫岩
153调兵山
154抚顺
157湛江
158阳江
159汕尾
160清远
161云浮
163吴忠
165曲靖
166遵义
169梧州
170濮阳
171平顶山
173湘潭
174邵阳
175湘西
176永州
177张家界
178晋中
180大同
164固原
168黔东南
181临汾
182吕梁
183朔州
184忻州
185阳泉
186运城
187金华
188衢州
191乐山
192攀枝花
193宜宾
194雅安
195新余
196鹰潭
197锦州
198营口
199阜阳
200亳州
202马鞍山
203龙岩
204三明
205南平
208伊犁
210赤峰
211巴彦淖尔
212郴州
214铜陵
215宁德
216襄阳
217廊坊
155宜昌
162娄底
179六盘水
220衡水
218晋城
240祁县
244万荣
246东海
247宿迁
142伊春
248开远
098镇江
242珠海
253阳城
241韶关
254九江
257东兴
256讷河
259齐齐哈尔
258吉安
136江油
262滁州
260龙海
263资阳
264涠洲岛
261盘州
267北海
268永丰
251茂名
272荣县
271都江堰
273普洱
266沂源
249招远
277梅州
276张家港
278河源
279奉化
280庄河
245天门
288陵川
118牙克石
282巴中
290昭通
295惠水
294镇远
293六枝
298咸宁
297安庆
299楚雄
300河池
303贺州
306阿城
307农安
308白山
304松原
305安顺
302博乐
311新沂
265琼中
281太仓
291甘孜
289克拉玛依
312毕节
301舟山
310杨陵
275宝鸡
292兴义
318文山
316贵港
317威宁
325沙湾
322佳木斯
326信丰
320达州
140柳州
915新加坡
338额敏
337塔城
340托里
336鄂尔多斯
335锡林浩特
269宁武
286高平
287沁水
342安宁
328涿鹿
327万宁
343海宁
313侯马
346图们
344泸州
321海盐
345汕头
348萍乡
349西丰
353兖州
354蒙自
357赤壁
355白银
350温岭
352曲阜
358四会
347镇雄
359临海
361桂林
363汾西
360扬州
366天水
364乌拉特前旗
365十堰
367曲阳
368仁怀
324阿图什
370淮北
219承德
371自贡
369道孚
372来宾
270揭阳
373恩施
375壶关
314怀化
377大庆
379依兰
005合肥
381临高
274天长
378迁安
362霍州
386都匀
387当涂
388淳安
206双鸭山
389三门峡
383启东
385如东
391敦煌
392平湖
393准格尔旗
396兰考
390蚌埠
395乳山
397邢台
399岳池
374宿州
400福清
376武冈
401石阡
402盐城
404平定
405安吉
406襄垣
398景德镇
407义乌
412高邑
413定西
411海东
409林芝
415海拉尔
414七台河
410漯河
433山南
437垣曲
394抚州
435芮城
434天镇
439双河
946黄骅
440玉林
436清徐
949章丘
442苏尼特右旗
441永济
443周口
408咸阳
951阳曲
447德清
448磐安
446铁力
450信阳
452多伦
444香河
449开原
454江阴
456繁峙
455门源
351大理
458大冶
438固安
319龙南
457嵊州
459朝阳
462哈密
465丹东
460翼城
464东乌珠穆沁
453荆门
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment