包含用于下载、解析、转换和导出不同类型源的数据库函数。

v1.1.5 2017-12-12 13:13 UTC

This package is auto-updated.

Last update: 2024-09-12 23:38:24 UTC


README

Latest Version on Packagist Software License Build Status Coverage Status Quality Score

包含用于下载、解析、转换和导出不同类型源的数据库函数。

安装

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)。有关更多信息,请参阅 许可文件

致谢