紧凑 / b3d
Berlin3 'Details' API包装器
1.0.0
2018-06-11 21:56 UTC
Requires
- php: >=5.4.0
- guzzlehttp/guzzle: ~6.0
- kompakt/collection-runner: ^1.0.0
- kompakt/directory-runner: ^1.1.1
- symfony/event-dispatcher: ~2.8|~3.0|~4.0
Requires (Dev)
- kompakt/test-helper: ^1.0.0
- phpunit/phpunit: ^5.0
- symfony/stopwatch: ~2.8|~3.0|~4.0
This package is auto-updated.
Last update: 2024-08-30 01:28:49 UTC
README
Berlin3 详细信息 API包装器
描述
从"详细信息"端点获取数据,可选地缓存结果,按"详细信息"模式加载完整图,构建规范产品表示,并将结果序列化为XML文件。
安装
通过Composer
composer require kompakt/b3d
简介
Berlin3 详细信息软件为音乐企业提供基本的数据访问形式,即完整表的转储。用户需要自行构建图和组装数据模型以供进一步使用。以下实体可用:发行、产品、艺术家、标签、价格、产品-曲目、曲目和库存。这些实体构建以下结构
+ release (1)
+ label (1)
+ artist (N)
+ product (N)
+ price (N)
+ stock (1)
+ account (N)
+ product-track (N)
+ track (N)
图书馆功能
- 数据检索器
- 数据映射器
- 原始数据缓存
- 内存图加载器
- 规范产品构建器
- 规范产品序列化器
- 可扩展的事件驱动架构
内部数据映射到临时实体对象。然后由图加载器连接这些实体。从那里,将图转换为基于规范产品的数据结构。这划定了逻辑边界,以防止"详细信息"内部泄漏到您的领域。
+ product (contains release-, artist- and labeldata)
+ price (N)
+ track (N)
检索
use GuzzleHttp\Client; use Kompakt\B3d\Details\Endpoint\Resource\Artist\Endpoint; $artistEndpoint = new Endpoint( new Client(), '<artist-endpoint-url>', '<api-key>' ); $rawArtistData = $artistEndpoint->fetchAll();
缓存
use Kompakt\B3d\Details\Endpoint\Cache\PhpFile\Serializer; use Kompakt\B3d\Util\File\Writer; $artistSerializer = new Serializer( new Writer(), 'path/to/artist/data/file' ); $artistSerializer->serialize($rawArtistData);
填充实体存储库
从缓存中填充
use Kompakt\B3d\Details\Endpoint\Resource\Artist\Mapper; use Kompakt\B3d\Details\Entity\Artist; use Kompakt\B3d\Details\Repository\ArtistRepository; use Kompakt\B3d\Util\File\Reader; use Kompakt\B3d\Details\Populator\Cache\PhpFile\Populator; $artistPopulator = new Populator( new ArtistMapper(new Artist()), new ArtistRepository(), new Reader(), 'path/to/artist/data/file' ); $artistRepository = $artistPopulator->populate(); $artists = $artistRepository->getAll();
各个部分也可以直接连接以直接检索和填充
use Kompakt\B3d\Details\Endpoint\Resource\Artist\Mapper; use Kompakt\B3d\Details\Entity\Artist; use Kompakt\B3d\Details\Repository\ArtistRepository; use Kompakt\B3d\Details\Populator\Endpoint\Populator; $artistPopulator = new Populator( new ArtistMapper(new Artist()), new ArtistRepository(), $artistEndpoint );
加载图
use Kompakt\B3d\Details\Graph\Loader as GraphLoader; $graphLoader = new GraphLoader( $artistPopulator, $labelPopulator, $pricePopulator, $productPopulator, $productTrackPopulator, $releasePopulator, $trackPopulator ); $releaseRepository = $graphLoader->load();
构建和序列化规范产品
use Kompakt\B3d\Canonical\Dom\Product\Builder as CanonicalProductDomBuilder; use Kompakt\B3d\Canonical\Entity\Price as CanonicalPrice; use Kompakt\B3d\Canonical\Entity\Product as CanonicalProduct; use Kompakt\B3d\Canonical\Entity\Track as CanonicalTrack; use Kompakt\B3d\Canonical\Converter\Details\ConverterRunner; use Kompakt\B3d\Canonical\Converter\Details\Product as CanonicalProductConverter; use Kompakt\B3d\Canonical\Converter\Details\Subscriber\XmlSerializer as XmlSerializerSubscriber; use Kompakt\B3d\Util\File\Writer; use Kompakt\CollectionRunner\EventNames; use Kompakt\CollectionRunner\Runner as CollectionRunner; use Symfony\Component\EventDispatcher\EventDispatcher; $dispatcher = new EventDispatcher(); $eventNames = new EventNames(); $collectionRunner = new CollectionRunner($dispatcher, $eventNames); $canonicalProductConverter = new CanonicalProductConverter( new CanonicalProduct(), new CanonicalTrack(), new CanonicalPrice() ); $canonicalProductXmlSerializer = new CanonicalProductXmlSerializer( new CanonicalProductDomBuilder(), new Writer(), 'path/to/xml/output/dir' ); $serializerSubscriber = new XmlSerializerSubscriber( $dispatcher, $eventNames, $canonicalProductXmlSerializer ); $converterRunner = new ConverterRunner( $collectionRunner, $graphLoader, $canonicalProductConverter ); $serializerSubscriber->activate(); $converterRunner->load(); $converterRunner->run();
当然,您不一定需要序列化规范产品。您可以选择省略XmlSerializerSubscriber
并编写自己的事件监听器,直接将数据保存到数据库
从序列化XML填充规范产品存储库
use Kompakt\B3d\Canonical\Dom\Product\Mapper as DomProductMapper; use Kompakt\B3d\Canonical\Entity\Price; use Kompakt\B3d\Canonical\Entity\Product; use Kompakt\B3d\Canonical\Entity\Track; use Kompakt\B3d\Canonical\Populator\Xml\Subscriber\Product as Populator; use Kompakt\B3d\Canonical\Repository\ProductRepository; use Kompakt\B3d\Canonical\Unserializer\Xml\Product as Unserializer; use Kompakt\B3d\Util\Dom\Loader as DomLoader; use Kompakt\B3d\Util\File\Reader; use Kompakt\DirectoryRunner\Runner; use Kompakt\DirectoryRunner\EventNames; use Kompakt\DirectoryRunner\Subscriber\Debugger; use Symfony\Component\EventDispatcher\EventDispatcher; $dispatcher = new EventDispatcher(); $eventNames = new EventNames(); $fileReader = new Reader(); $domLoader = new DomLoader(); $runner = new Runner( $dispatcher, $eventNames, $canonicalProductDirPathname ); $price = new Price(); $product = new Product(); $track = new Track(); $domMapper = new DomProductMapper($product, $track, $price); $repository = new ProductRepository(); $unserializer = new Unserializer( $fileReader, $domLoader, $domMapper ); $populator = new Populator( $dispatcher, $eventNames, $unserializer, $repository ); $populator->activate(); $runner->run(); foreach ($repository->getAll() as $product) { echo sprintf("%s\n", $product->getReleaseTitle()); foreach ($product->getTracks() as $track) { echo sprintf(">> %s\n", $track->getTitle()); } }
检索库存
一旦您设置了产品,您就可以检索库存水平。请注意,API每次请求返回最多200个库存项
use GuzzleHttp\Client; use Kompakt\B3d\Details\Endpoint\Resource\Stock\Endpoint as StockEndpoint; use Kompakt\B3d\Details\Endpoint\Cache\PhpFile\Serializer as PhpFileSerializer; use Kompakt\B3d\Util\File\Writer; use Symfony\Component\Stopwatch\Stopwatch; $stockEndpoint = new StockEndpoint( new Client(), '<stock-endpoint-url>', '<api-key>' ); $stockEndpoint->fetch(['uuid-1', 'uuid-2']);
将订单传递给详细信息
use GuzzleHttp\Client; use Kompakt\B3d\Details\Endpoint\Resource\Order\Endpoint; $orderEndpoint = new Endpoint( new Client(), '<stock-endpoint-url>', '<api-key>' ); $orderData = [ ... ]; $itemData = [ ... ]; $orderEndpoint->create($orderData, $itemData);
工作示例
cp example/config.php.dist config.php
- 根据需要调整
config.php
许可
紧凑/b3d遵循MIT许可 - 有关详细信息,请参阅LICENSE文件