treehouselabs / feeder
包含用于下载、解析、转换和导出不同类型源的数据库函数。
v1.1.5
2017-12-12 13:13 UTC
Requires
- php: >=5.5
- ext-intl: *
- ext-mbstring: *
- guzzlehttp/guzzle: ~6.0
- psr/http-message: ~1.0
- symfony/event-dispatcher: ~2.6
- symfony/http-foundation: ~2.6
- symfony/serializer: ~2.6
Requires (Dev)
- phpunit/phpunit: ~4.5
- scrutinizer/ocular: ~1.1
README
包含用于下载、解析、转换和导出不同类型源的数据库函数。
安装
composer require treehouselabs/feeder:~1.0
使用
以下是一个简单的源处理脚本
// create a new reader, in this case we'll fetch a feed from the interwebs $resource = new FileResource(HttpTransport::create('http://example.org/feed')); $reader = new XmlReader($resource); // tell the reader to pull <item> nodes $reader->setNodeCallback('item'); // create a feed for this reader $feed = new Feed($reader); // now simply iterate over the items foreach ($feed as $item) { // $item is a ParameterBag instance with the serialized <item> node as data }
修改器
当您开始添加修改器时,Feeder 真的变得非常有用。修改器应用于每个项目,可以用来转换字段值、重新映射键、添加/删除新值等。
假设我们在要处理的数据源中有一个以下 <item>
节点
<item> <title>The quick brown fox jumps over the lazy dog</title> <publishDate>Thu, 05 Mar 2015 20:24:38 +0000</publishDate> <explicit>yes</explicit> <link href="http://example.org/articles/1"/> </item>
这将给出以下项目
[ 'title' => 'The quick brown fox jumps over the lazy dog', 'publishDate' => 'Thu, 05 Mar 2015 20:24:38 +0000', 'explicit' => 'yes', 'link' => [ '#' => '', '@href' => 'http://example.org/articles/1' ], ]
如果您像我一样有强迫症,希望数据是 snake_case 格式
$feed->addTransformer(new LowercaseKeysTransformer()); // will return: [ 'title' => 'The quick brown fox jumps over the lazy dog', 'publish_date' => 'Thu, 05 Mar 2015 20:24:38 +0000', 'explicit' => 'yes', 'link' => [ '#' => '', '@href' => 'http://example.org/articles/1' ], ]
现在我们希望发布日期是一个实际的 DateTime
实例
// the DataTransformer wraps a transformer for a specific field, // instead of the whole item $transformer = new DataTransformer( new StringToDateTimeTransformer(DATE_RFC2822), 'publish_date' ); $feed->addTransformer($transformer); // will return: [ 'title' => 'The quick brown fox jumps over the lazy dog', 'publish_date' => DateTime::__set_state(array( 'date' => '2015-03-05 20:24:38.000000', 'timezone_type' => 1, 'timezone' => '+00:00', )), 'explicit' => 'yes', 'link' => [ '#' => '', '@href' => 'http://example.org/articles/1' ], ]
更多示例
$feed->addTransformer( new DataTransformer( new StringToBooleanTransformer(), 'explicit' ) ); $feed->addTransformer( new DataTransformer( new CallbackTransformer(function ($value) { return $value['@href']; }), 'link' ) ); // will return: [ 'title' => 'The quick brown fox jumps over the lazy dog', 'publish_date' => DateTime::__set_state(array( 'date' => '2015-03-05 20:24:38.000000', 'timezone_type' => 1, 'timezone' => '+00:00', )), 'explicit' => true, 'link' => 'http://example.org/articles/1', ]
如您所见,您可以创建非常强大的修改器链以获得所需的结果。修改器不仅限于转换函数,还有映射器(将项目中的键映射到您自己的字段)、过滤器(根据您的逻辑排除项目)和验证器(当项目无效时引发异常)。这个库有很多修改器,请查看它们!
测试
composer test
安全性
如果您发现任何安全相关的问题,请通过电子邮件 peter@treehouse.nl 反馈,而不是使用问题跟踪器。
许可
MIT 许可证 (MIT)。有关更多信息,请参阅 许可文件。