jonasraoni / marc-to-iso
PHP映射从MARC代码/国家到ISO 3166-1 alpha-2格式,反之亦然。
1.0.0
2021-07-17 07:32 UTC
Requires
- php: >=7.2.0
README
PHP映射从MARC代码/国家到ISO 3166-1 alpha-2格式,反之亦然。
使用方法
安装包
composer require jonasraoni/marc-to-iso
该包提供4个独立的映射(仅为了减少加载到内存中的冗余数据量)
- JonasRaoni\MarcToIso\IsoToMarcCode
- JonasRaoni\MarcToIso\IsoToMarcName
- JonasRaoni\MarcToIso\MarcCodeToIso
- JonasRaoni\MarcToIso\MarcNameToIso
选择适合您需求的一个,并调用静态方法get
,它可能返回正确的映射或null(如果无效)。
use JonasRaoni\MarcToIso\IsoToMarcCode; echo 'US = ' . IsoToMarcCode::get('US');
数据生成
要重新生成类,请确保已更新子模块,然后调用generate.php脚本(包含类模板、手动映射等),它将覆盖现有类。
过程很简单,一个国家通用列表及其相应的MARC代码与完整的MARC代码列表进行匹配,剩余未匹配的条目则手动映射。
数据源
-
通用国家列表是从此链接获取的:https://datahub.io/core/country-codes(.csv文件作为子模块链接到此仓库)。
-
MARC国家/代码列表是从此链接手动获取的:https://www.loc.gov/marc/countries/countries_code.html。以下脚本用于从链接中提取.csv文件(应在Chromium DevTools控制台面板中执行),执行时将数据作为CSV复制到剪贴板。
故意删除了已弃用的MARC代码,因为其中一些可能指向不再存在的国家,因此不属于ISO标准。
let rows = ['code;name']; for(const tr of [...$$('table:nth-of-type(1) tbody tr')].slice(1)) { const code = tr.querySelectorAll('td')[0].innerText; const name = tr.querySelectorAll('td')[1].innerText; if (!code.includes('-')) // deprecated rows.push(code.replace('-', '') + ',' + tr.querySelectorAll('td')[1].innerText); } copy(rows.join('\n'));