eclipxe / sepomexphp
墨西哥邮政服务PHP库(非官方版本)
Requires (Dev)
- dms/phpunit-arraysubset-asserts: ^0.4.0
- guzzlehttp/guzzle: ^7.7
- phpunit/phpunit: ^9.5
- symfony/browser-kit: ^6.3
- symfony/http-client: ^6.3
- symfony/mime: ^6.3
Suggests
- guzzlehttp/guzzle: Perform the download process using Guzzle
- symfony/browser-kit: Perform the download process using Symfony Browser Kit (recommended)
README
这个库是墨西哥 SEPOMEX 数据的非官方版本。
由于这个库的主要用户是墨西哥人,所以项目的一些部分是西班牙语。无论如何,所有数据库、代码和其他信息都是英文。
安装
使用 composer 安装,不推荐使用其他方法!
composer require eclipxe/sepomexphp
使用方法
使用由库创建的 SQLite3 数据库文件
<?php /** @var string $databaseFilename set the database file location */ $sepomex = \Eclipxe\SepomexPhp\SepomexPhp::createForDatabaseFile($databaseFilename); // query a zip code $zipcode = $sepomex->getZipCodeData('86100');
使用您自己的 PDO 连接
<?php /** @var string $pdoString set the database connection using Pdo */ $pdoString = "..."; // create the SepomexPhp Object $sepomex = new \Eclipxe\SepomexPhp\SepomexPhp( new \Eclipxe\SepomexPhp\PdoDataGateway\PdoDataGateway( new \PDO($pdoString) ) ); // query a zip code $zipcode = $sepomex->getZipCodeData((int) $argv[1]);
此外,检查脚本文件 zipcode-info.php
和测试文件 ZipCodeDataTest.php
。
如果您只想从 SEPOMEX 下载源文件,请检查脚本文件 scripts/download.php
。
<?php /** * @var string $destinationFile is the path where the destination file will be located. */ $downloader = new \Eclipxe\SepomexPhp\Downloader\SymfonyDownloader(); printf("Download from %s to %s\n", $downloader::LINK, $destinationFile); $downloader->downloadTo($destinationFile);
您可以使用自己的下载器,只需实现接口 DownloaderInterface
。
项目提供了以下实现
SymfonyDownloader
:它使用 Symfony Browser Kit 执行下载(推荐)。GuzzleDownloader
:使用 Guzzle 和固定数据执行下载。PhpStreamsDownloader
:使用纯 PHP 函数和固定数据执行下载。
如果您想将 SEPOMEX 的源文件导入自己的 SQLite3 数据库,请检查 create-sqlite-from-raw.php
。
<?php /** * @var PDO $pdo The PDO connection to your database. * @var string $sourceFile The path to the SEPOMEX database in TXT format. */ $importer = new \Eclipxe\SepomexPhp\Importer\PdoImporter($pdo); // drop tables if existed, create tables. $importer->createStruct(); // perform data import $importer->import($sourceFile);
如果您有自己的 Sepomex 数据集,则可以扩展此库,只需创建实现方法的 DataGatewayInterface
并从任何地方获取数据。
关于 SEPOMEX 信息(截至 2018-02-02)
Sepomex 以非常严格的条款分发其邮政编码数据库的第一行
《全国邮政编码目录》,由墨西哥邮政编制,免费提供给个人使用,不得进行全部或部分商业化和向第三方分发。
这意味着
- 数据仅用于个人用途。
- 不得将信息(全部或部分)分发给任何人(插入一个大 WTF!)。
- 不得从信息中获利。
无论如何,数据源已经由墨西哥政府使用名为 LIBRE USO MX 的自由许可证发布,并取消了免责声明的任何限制。
如果您运行脚本 scripts/create-sqlite-from-raw.php
,您将创建一个包含相同信息的 sqlite 数据库,但进行了规范化,如果不存在,脚本将下载源文件。
您可以在 docs/DATABASE.md(西班牙语)中找到有关原始源文件更多信息。
当前工作
现在您可以通过搜索墨西哥邮政编码,并获取以下信息
- 所在州 Estado,例如 'Tabasco'。
- 所在区 Delegación/Municipio,例如 'Centro'。
- 位置列表 Colonias,每个位置包含
- 位置名称,例如 '1 de mayo'。
- 位置类型,例如 'Colonia' 或 'Unidad habitacional'。
- 城市名称,例如 'Villahermosa'。
由于相同的邮政编码可以包括城市内部和城市外的一些地方,城市位于位置实体之下。是的,墨西哥就是这样运作的。
贡献
欢迎贡献!请阅读 CONTRIBUTING 获取详细信息,并别忘了查看 TODO 和 CHANGELOG 文件。
许可证
eclipxe\sepomexphp
库版权所有 © Carlos C Soto,并使用 MIT 许可证(MIT)授权。更多信息请参阅 LICENSE。
数据来源
由“Correos de México”发布的“Tabla de Códigos Postales y asentamientos humanos”。数据获取自