当前位置: 首页 > news >正文

世界国家省份城市县区街道村地址邮编常用通用功能最全API - 多级联动 - 淘宝天猫阿里巴巴技术赏析...

为什么80%的码农都做不了架构师?>>>   hot3.png

请登录购买宝贝并到结帐页面

http://unit.buy.tmall.com/order/confirmOrder.htm

当到这个页面后,你会发现这个页面是个iframe(框架),单击右键可以轻松知道配送地址功能的界面URL

http://member1.taobao.com/member/fresh/deliver_address_frame.htm?sign=_a2_wr_qwv6w_f_rd_zu8cp_i_w_zj9_x_jms_k_g_z_y7_z_d_l0v_p_ec_v_ai_i%252F0_dd0_j_g_u4v_a%253D%253D&from=tmall&reurl=%2F%2Fbuy.tmall.com%2Forder%2FaddressProxy.htm&version=1.0.10&sign_type=TEP&tid=74126668

OK,看到这个界面,大家就可以单击右键,把淘宝的源码保存下来了

节省了自己写HTML代码的时间:

通过火狐FireBug,可以查看到类似JS文件:

http://g.tbcdn.cn/tbc/??address/1.2.1/xaddress/index-min.js?t=1432885222614.js

复制上述内容

用JS格式化工具格式化JS文件内容,辅助Unicode编码转换

(如北京的Unicode编码是\u5317\u4eac),更清楚的看到很多惊喜的接口API,根据URL参数地址,相信聪明的你肯定知道其各自作用:

OK,主要JS文件就在这边

自己可以顺着这个路线具体研究淘宝地址实现逻辑了,也可以间接使用JS(省得自己写JS了)

地址多级联动API

打开火狐firebug或者IE浏览器按F12快捷键,当你在选择:中国大陆->北京->东城 时候,会发现URL

http://lsp.wuliu.taobao.com/locationservice/addr/output_address_town_array.do?l1=110000&l2=110100&l3=110101&lang=zh-S&_ksTS=1432880083437_7507&callback=jsonp7508

上述API只要接收几个必要参数即可,请按照上述图片中获取所有省、市、县的各自CODE值,然后循环赋值参数给这个接口拼接为新的URL

就像采集一样,就可以批量瞬间得到全国具体物流信息 乡、区、村这种具体的物流数据,愉快的保存到您的数据库吧!

你也可以把淘宝这个API当成您的“私人”API使用!而且速度更快,更稳定!节省你的可怜宽带、CPU、内存...

享受下站在巨人肩膀上的乐趣吧!

总结

  1. 地址大部分数据都是固定不变的(如省份、市、县),我们可以“写死”在JS文件中静态加载
  2. 静态js文件只需加载1次,以后用户浏览器自动使用本地使用缓存文件
  3. 也可以做个程序按需手动生成“address.js"的程序,比如某个省改名了
  4. 千万不要再去多此一举的去连接数据库,否则会增大数据库压力浪费宽带资源...
  5. 如果地址配送想做的更细,如:针对乡、区、村这种变更率稍大的字段,可以借鉴淘宝那种做成API的Ajax按需请求URL
  6. 针对上述的API数据获取,服务端有可能是从数据库中获取数据,也有可能是从静态文件中筛选出数据(参考上述第3条)
  7. 细心的同学通过查看淘宝源码可以发现有很多规范可以学习参考:HTML写法、验证电话号码&区号的正则、城市区号对照、HTML5的运用、压缩的处理...有些可以直接拿来用!
  8. 不需要到处盲目的找“规范”,淘宝就是规范!因为他们都是经过严格面试的!站在巨人的肩膀上,学习淘宝,取其精华取其糟粕,假以时日,你就是高手!

转载于:https://my.oschina.net/cart/blog/372636

相关文章:

  • ×××S 2012 Report Items -- 独立报表单元
  • 基于Netty与RabbitMQ的消息服务
  • 32_使用BeanUtils工具包操作JavaBean
  • 常用HTTP状态码
  • 怎样将U盘设置成只读属性
  • Sum、if、mod隔列求和
  • 有关android 应用的plugin框架调研
  • 数据结构之查找(php代码实现)
  • redis常用命令
  • (太强大了) - Linux 性能监控、测试、优化工具
  • Centos 源代码以及编译过程
  • PHP_NoteBook
  • 利用mongo profile 分析mongo慢查询
  • GlusterFS源代码解析 —— GlusterFS 简单介绍
  • rem是什么?
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • CSS实用技巧
  • docker python 配置
  • es6--symbol
  • HashMap剖析之内部结构
  • HTML5新特性总结
  • JS进阶 - JS 、JS-Web-API与DOM、BOM
  • vuex 笔记整理
  • vue从入门到进阶:计算属性computed与侦听器watch(三)
  • weex踩坑之旅第一弹 ~ 搭建具有入口文件的weex脚手架
  • 分类模型——Logistics Regression
  • 给github项目添加CI badge
  • 构造函数(constructor)与原型链(prototype)关系
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 理清楚Vue的结构
  • 删除表内多余的重复数据
  • 深度学习中的信息论知识详解
  • 微信端页面使用-webkit-box和绝对定位时,元素上移的问题
  • 正则表达式
  • 《码出高效》学习笔记与书中错误记录
  • ​【已解决】npm install​卡主不动的情况
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • $.ajax()方法详解
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • ()、[]、{}、(())、[[]]等各种括号的使用
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (Python) SOAP Web Service (HTTP POST)
  • (windows2012共享文件夹和防火墙设置
  • (保姆级教程)Mysql中索引、触发器、存储过程、存储函数的概念、作用,以及如何使用索引、存储过程,代码操作演示
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)springboot太原学院贫困生申请管理系统 毕业设计 101517
  • (九十四)函数和二维数组
  • (理论篇)httpmoudle和httphandler一览
  • (一) springboot详细介绍
  • (一)80c52学习之旅-起始篇
  • (一)使用Mybatis实现在student数据库中插入一个学生信息