cn / GB2260

中华人民共和国国家标准 GB/T 2260 行政区划代码

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Spec 对历史查询不友好

timothyqiu opened this issue · comments

GB2260 本身并不向后兼容,例如北京崇文区 110103 在 2009 以后的版本中是不存在的。

目前的 Spec 中 GB2260 接口都必须对应到具体的年,与 GB2260 本身是一致的。那么通过 `new GB2260("2014").get("110103") 应该是得不到结果的。

目前的 Spec 不支持在各个历史版本中查询。例如查询 110103 可以:

GB2260.search("110103")  // 在所有历史版本中查询
GB2260.search("110103", ["2009", "2011"])  // 在 2009 和 2011 版本中查询

// =>
{
    "code": "110103",
    "name": "崇文区",
    "year": "2009",
}

GB2260.search("110103", ["2007", "2008"])  // 得到 2008 版本

如果想要基于目前的 Spec 实现这个函数的话,不带参数的版本因为 Spec 中未给出 year 可选范围,几乎无法进行编写。

@lepture 的意思是不是想要说 从latest year开始往前回溯进行search?

@timothyqiu 其实需要的是一个可选年份列表,这个其实很简单实现:

def search(code, years):
    for year in years:
        division = GB2260(year).get(code)
        if division:
            return division

Spec 之前的 GB2260.py 实现了 search 接口

@lepture 缺省不带 year 的版本比较难做到。从 Spec 里没法得知「GB2260 目前有哪些年份的版本」,只能 hard code 进去。

p.s. 「年份」感觉怪怪的,因为比如 2005 年有两个版本。GB2260.py 里 year2014 实际上是当 201412 来的,把这个参数细化到了「月」。不过个人觉得还是「版本」更贴切。

一年两次修订的数据是后期才逐渐补充上的

不过赞同 revision 取代 year

这样的话,spec 需要修改一下了。

已经加上了 revisions 函数,可以获取所有 revisions 数据了。

#revisions()
List all revisions supported by GB2260 in descendant.

另外 search 函数返回什么数据还要再讨论。先关闭这个 issue,如果要加 search 的话,再另起 issue 讨论。