PHP获取京东三级联动数据

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

数据源

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
如果觉得我的文章对你有用,请随意赞赏

发表评论 取消回复

18 条评论

  1. 灰狼

    我手里就有完整的京东地址库数据,之前跟京东做业务对接的时候搞的

    1. 心语难诉
      @灰狼

      可以啊兄嘚~可否分享?ヾ(≧∇≦*)ゝ

  2. wu先生

    我记得好像是34个。

  3. Liang.Ke

    钓鱼岛,点赞啊!

    1. 123
      @Liang.Ke

      钓鱼岛能邮到吗

  4. 今日新闻

    文章不错支持一下

  5. 青山

    联动数据是什么意思

    1. 心语难诉
      @青山

      就是类似省市级这样的多级筛选

  6. Xcnte

    来看看,学习一下|´・ω・)ノ

  7. 微信抢房

    收藏

  8. 逆时针

    很不错呀,虽然不懂技术,给博主点个赞!

  9. 青衫慧博客

    哇,很不错的接口数据,学习了。

  10. Mark

    技术与文笔并存的博主,关注一波

    1. 心语难诉
      @Mark

      蟹蟹~向你学习!ヾ(≧∇≦*)ゝ

  11. 张波博客

    这个感觉就像编程里用正则取值一样

    1. 心语难诉
      @张波博客

      这些天都没更新,工作太忙太累了

  12. 奶爸de笔记

    技术资料,学习了。

    1. 心语难诉
      @奶爸de笔记

      →_→小意思,这些东西都是微不足道的,为了水文章哈哈