Skip to content

Commit

Permalink
add src and tests
Browse files Browse the repository at this point in the history
  • Loading branch information
peter-gribanov committed Jul 21, 2017
1 parent cfb84ad commit 1b6e746
Show file tree
Hide file tree
Showing 9 changed files with 622 additions and 0 deletions.
60 changes: 60 additions & 0 deletions README.md
Expand Up @@ -11,3 +11,63 @@

AnimeNewsNetwork.com API browser
================================

Installation
------------

Pretty simple with [Composer](http://packagist.org), run:

```sh
composer require anime-db/anime-news-network-browser-bundle
```

Add AnimeDbAnimeNewsNetworkBrowserBundle to your application kernel

```php
// app/appKernel.php

public function registerBundles()
{
$bundles = array(
// ...
new AnimeDb\Bundle\AnimeNewsNetworkBrowserBundle\AnimeDbAnimeNewsNetworkBrowserBundle(),
);
}
```

Configuration
-------------

```yml
anime_db_anime_news_network_browser:
# Host name
# As a default used 'https://cdn.animenewsnetwork.com'
host: 'https://cdn.animenewsnetwork.com'

# Reports
# As a default used '/encyclopedia/reports.xml'
reports: '/encyclopedia/reports.xml'

# Anime/Manga Details
# As a default used '/encyclopedia/api.xml'
details: '/encyclopedia/api.xml'

# HTTP User-Agent
# No default value
client: 'My Custom Bot 1.0'
```

Usage
-----

First get browser

```php
$browser = $this->get('anime_db.anime_news_network.browser');
```

License
-------

This bundle is under the [GPL v3 license](http://opensource.org/licenses/GPL-3.0).
See the complete license in the file: LICENSE
17 changes: 17 additions & 0 deletions src/AnimeDbAnimeNewsNetworkBrowserBundle.php
@@ -0,0 +1,17 @@
<?php

/**
* AnimeDb package.
*
* @author Peter Gribanov <info@peter-gribanov.ru>
* @copyright Copyright (c) 2011, Peter Gribanov
* @license http://opensource.org/licenses/GPL-3.0 GPL v3
*/

namespace AnimeDb\Bundle\AnimeNewsNetworkBrowserBundle;

use Symfony\Component\HttpKernel\Bundle\Bundle;

class AnimeDbAnimeNewsNetworkBrowserBundle extends Bundle
{
}
@@ -0,0 +1,38 @@
<?php

/**
* AnimeDb package.
*
* @author Peter Gribanov <info@peter-gribanov.ru>
* @copyright Copyright (c) 2011, Peter Gribanov
* @license http://opensource.org/licenses/GPL-3.0 GPL v3
*/

namespace AnimeDb\Bundle\AnimeNewsNetworkBrowserBundle\DependencyInjection;

use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\Config\FileLocator;
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
use Symfony\Component\DependencyInjection\Loader;

class AnimeDbAnimeNewsNetworkBrowserExtension extends Extension
{
/**
* @param array $configs
* @param ContainerBuilder $container
*/
public function load(array $configs, ContainerBuilder $container)
{
$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.yml');

$config = $this->processConfiguration(new Configuration(), $configs);

$container->getDefinition('anime_db.anime_news_network.browser')
->replaceArgument(1, $config['host'])
->replaceArgument(2, $config['reports'])
->replaceArgument(3, $config['details'])
->replaceArgument(4, $config['client'])
;
}
}
57 changes: 57 additions & 0 deletions src/DependencyInjection/Configuration.php
@@ -0,0 +1,57 @@
<?php

/**
* AnimeDb package.
*
* @author Peter Gribanov <info@peter-gribanov.ru>
* @copyright Copyright (c) 2011, Peter Gribanov
* @license http://opensource.org/licenses/GPL-3.0 GPL v3
*/

namespace AnimeDb\Bundle\AnimeNewsNetworkBrowserBundle\DependencyInjection;

use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
use Symfony\Component\Config\Definition\Builder\TreeBuilder;
use Symfony\Component\Config\Definition\ConfigurationInterface;

class Configuration implements ConfigurationInterface
{
/**
* Config tree builder.
*
* Example config:
*
* anime_db_anime_news_network_browser:
* host: 'https://cdn.animenewsnetwork.com'
* reports: '/encyclopedia/reports.xml'
* details: '/encyclopedia/api.xml'
* client: 'My Custom Bot 1.0'
*
* @return ArrayNodeDefinition
*/
public function getConfigTreeBuilder()
{
return (new TreeBuilder())
->root('anime_db_anime_news_network_browser')
->children()
->scalarNode('host')
->defaultValue('https://cdn.animenewsnetwork.com')
->cannotBeEmpty()
->end()
->scalarNode('reports')
->defaultValue('/encyclopedia/reports.xml')
->cannotBeEmpty()
->end()
->scalarNode('details')
->defaultValue('/encyclopedia/api.xml')
->cannotBeEmpty()
->end()
->scalarNode('client')
->defaultValue('')
->cannotBeEmpty()
->end()
->end()
->end()
;
}
}
8 changes: 8 additions & 0 deletions src/Resources/config/services.yml
@@ -0,0 +1,8 @@
services:
anime_db.anime_news_network.browser:
class: AnimeDb\Bundle\AnimeNewsNetworkBrowserBundle\Service\Browser
arguments: [ '@anime_db.anime_news_network.browser.client', ~, ~, ~, ~ ]

anime_db.anime_news_network.browser.client:
class: GuzzleHttp\Client
public: false
100 changes: 100 additions & 0 deletions src/Service/Browser.php
@@ -0,0 +1,100 @@
<?php

/**
* AnimeDb package.
*
* @author Peter Gribanov <info@peter-gribanov.ru>
* @copyright Copyright (c) 2011, Peter Gribanov
* @license http://opensource.org/licenses/GPL-3.0 GPL v3
*/

namespace AnimeDb\Bundle\AnimeNewsNetworkBrowserBundle\Service;

use GuzzleHttp\Client;

class Browser
{
/**
* @var Client
*/
private $client;

/**
* @var string
*/
private $host;

/**
* @var string
*/
private $reports;

/**
* @var string
*/
private $details;

/**
* @var string
*/
private $app_client;

/**
* @param Client $client
* @param string $host
* @param string $reports
* @param string $details
* @param string $app_client
*/
public function __construct(Client $client, $host, $reports, $details, $app_client)
{
$this->client = $client;
$this->host = $host;
$this->reports = $reports;
$this->details = $details;
$this->app_client = $app_client;
}

/**
* @param int $id
* @param array $options
*
* @return string
*/
public function reports($id, array $options = [])
{
$options['id'] = $id;

return $this->request($this->host.$this->reports, $options);
}

/**
* @param array $options
*
* @return string
*/
public function details(array $options)
{
return $this->request($this->host.$this->details, $options);
}

/**
* @param string $url
* @param array $options
*
* @return string
*/
private function request($url, array $options)
{
if ($this->app_client) {
$options['headers'] = array_merge(
['User-Agent' => $this->app_client],
isset($options['headers']) ? $options['headers'] : []
);
}

$response = $this->client->request('GET', $url, $options);

return $response->getBody()->getContents();
}
}

0 comments on commit 1b6e746

Please sign in to comment.