网上的三级联动数据大多只有省市县,且数据可能并不完整,由此可以借用京东的三级联动数据,除了可以获得省市县的数据外还可以获取主干街道的数据,和京东下单时所填写的配送地址一样比较全面,适合电商网站使用。

数据源

http://fts.jd.com/area/get?fid=' . $fid . '&callback=getAreaList_callbackF&sceneval=2

通过以上URL,替换中间的$fid可以获取到不同省、直辖市的下主要区域。
下面是全国主要省、直辖市的id

    $baseArea = [
        '1'     => '北京',
        '2'     => '上海',
        '3'     => '天津',
        '4'     => '重庆',
        '5'     => '河北',
        '6'     => '山西',
        '7'     => '河南',
        '8'     => '辽宁',
        '9'     => '吉林',
        '10'    => '黑龙江',
        '11'    => '内蒙古',
        '12'    => '江苏',
        '13'    => '山东',
        '14'    => '安徽',
        '15'    => '浙江',
        '16'    => '福建',
        '17'    => '湖北',
        '18'    => '湖南',
        '19'    => '广东',
        '20'    => '广西',
        '21'    => '江西',
        '22'    => '四川',
        '23'    => '海南',
        '24'    => '贵州',
        '25'    => '云南',
        '26'    => '西藏',
        '27'    => '陕西',
        '28'    => '甘肃',
        '29'    => '青海',
        '30'    => '宁夏',
        '31'    => '新疆',
        '32'    => '台湾',
        '84'    => '钓鱼岛',
        '52993' => '港澳'
    ];

例如这样:
主要区域json集

代码

<?php
/**
 * @author 心语难诉
 * @version 1.0
 * @url https://xinyu19.com
 * @filename JDArea.php
 * @des 京东 省、市、县、街道数据获取
 */
class JDArea{
    /**
     * [$baseArea 全国省、直辖市ID]
     */
    public static $baseArea = [
        '1'     => '北京',
        '2'     => '上海',
        '3'     => '天津',
        '4'     => '重庆',
        '5'     => '河北',
        '6'     => '山西',
        '7'     => '河南',
        '8'     => '辽宁',
        '9'     => '吉林',
        '10'    => '黑龙江',
        '11'    => '内蒙古',
        '12'    => '江苏',
        '13'    => '山东',
        '14'    => '安徽',
        '15'    => '浙江',
        '16'    => '福建',
        '17'    => '湖北',
        '18'    => '湖南',
        '19'    => '广东',
        '20'    => '广西',
        '21'    => '江西',
        '22'    => '四川',
        '23'    => '海南',
        '24'    => '贵州',
        '25'    => '云南',
        '26'    => '西藏',
        '27'    => '陕西',
        '28'    => '甘肃',
        '29'    => '青海',
        '30'    => '宁夏',
        '31'    => '新疆',
        '32'    => '台湾',
        '84'    => '钓鱼岛',
        '52993' => '港澳'
    ];

    /**
     * [getAll 循环获取所有数据]
     */
    public static function getAll(){
        $areaArr = [];
        foreach (self::$baseArea as $key => $value) {
            $areaArr[$key]['id'] = $key;
            $areaArr[$key]['name'] = $value;
            $areaArr[$key]['area'] = self::requestApi($key);
            foreach ($areaArr[$key]['area'] as $k => $v) {
                echo "数据获取成功:{$areaArr[$key]['name']}----{$v['name']}\r\n";
                $province = $areaArr[$key]['name'];
                $city = $v['name'];
                $areaArr[$key]['area'][$k]['county'] = self::requestApi($v['id']);
                foreach ($areaArr[$key]['area'][$k]['county']  as  $item) {
                    echo "数据获取成功:{$province}----{$city}----{$item['name']}\r\n";
                }
            }
        }
        return $areaArr;
    }

    /**
     * [requestApi 数据请求函数]
     * @return [type]      [json]
     */
    public static function requestApi($fid){
        $API_URL = 'http://fts.jd.com/area/get?fid=' . $fid . '&callback=getAreaList_callbackF&sceneval=2';
        $result = file_get_contents($API_URL);
        $result = str_replace('getAreaList_callbackF(', '', $result);
        $result = str_replace(')', '', $result);
        $result = json_decode($result, true);
        return $result;        
    }
}
$res = JDArea::getAll();

DEMO

命令行运行获取数据

说明

代码中只做了简单的数据生成,可根据自身需求生成json文件或者动态入库。PS:代码仅供研究学习

最后修改:2019 年 06 月 09 日 01 : 00 PM