arikin / crimeflare
从www.crimeflare.us下载和解压缩数据文件
Requires
- nelexa/zip: ^3.0
This package is not auto-updated.
Last update: 2024-09-29 03:00:02 UTC
README
此项目将Crimeflare数据保持最新状态,并在数据库中。数据文件zip的下载页面:http://www.crimeflare.info/zippy.html 此页面有它自己的搜索表单:http://www.crimeflare.info/cfs.html#box
概述
它下载数据zip文件,然后提取它们。提取的文件被解析成变量。然后,这些数据被插入到一个数据库中,每个数据文件对应一个表。
设置文件,crimeflare.json,允许您设置数据库凭据、要下载的文件以及表sql信息。
这个项目打算每三周作为cron作业运行一次。Crimeflare本身也只每三周更新一次。例如,如果您尝试每小时更新一次,它们会禁用您的IP地址进行滥用。所以不要滥用它们花时间建立的资源。
安装
这是一个简单的composer require。
php composer.phar require arikin/crimeflare
通过仔细设置文件权限来保护crimeflare.json
文件。如果需要,您也可以将其移动到另一个路径。只需将设置传递给Crimeflare即可。
$crime = new Crimeflare(array( 'settings_file' => "[full path to file]" ));
用法
使用真实的DB凭据更新crimeflare.json
文件。
初始化Crimeflare类并调用update
方法。
use Arikin\Crimeflare; $crime = new Crimeflare(); $crime->update();
请注意,Crimeflare数据文件相当大。每个文件逐个逐行处理,但在创建SQL INSERT语句时确实会占用内存。所以请确保为脚本设置内存限制。
ini_set('memory_limit', '2G');
crimeflare.json
JSON格式的设置文件。以下是对设置的说明
-
base_dir - 基础目录的完整路径。不要有尾随斜杠。在这里创建download/和extract/目录。**重要**完成数据文件后,不会删除数据文件。请在此脚本中完成此操作以节省空间。
-
base_url - 文件的基准URL。不要有尾随斜杠。默认为:http://crimeflare.net:83/domains
-
curl_timeout - 获取每个文件的超时时间。
-
pdo - PDO对象设置的数组
- pdo: host - mysql服务器的IP或域名
- pdo: db - 数据库名称
- pdo: user - mysql用户的用户名
- pdo: pass - 该用户的密码
- pdo: charset - 连接到数据库时使用的字符集
- pdo: timeout - PDO超时时间(秒)。
-
crimeflare - 每个Crimeflare数据文件的值数组。以下是对ipout.zip的示例。
键是不包含任何前缀或后缀的文件名。以下是一个示例
- ipout - 此文件的选项数组
- ipout: file - 不包含任何前缀或后缀的文件名。对于识别和创建文件和表很重要。
- ipout: uri - 不包含实际文件名的文件URL。不要有尾随斜杠。
- ipout: sql - SQL和数据文件解析的设置数组
- ipout: sql: table - 用于此文件数据的表名。建议使用前缀,因为表将被删除和创建。
- ipout: sql: fields - 字段数组。每行以空格字符分割。此处顺序重要。索引0是行左侧最远的数据。
- ipout: sql: fields: updated_at - 创建表时使用的第一个列名和对应的数据类型
- ipout: sql: fields: domain - 创建表时使用的第二个列名和对应的数据类型
- ipout: sql: fields: ip_address - 创建表时使用的第三个列名和对应的数据类型
注意
默认情况下,每张表的插入操作以20000条记录为一组进行。如果你的数据库可以处理更多的参数绑定,则在使用更新方法之前,根据以下公式设置新的整数限制:数据库绑定限制 / 字段数量
$crime->setBindingLimit(50000); $crime->update();
将PDO分离出来,以便在需要时提供自己的PDO。更改 src/Crimeflare.php 中的use语句。
use \DbUpdate;