Skip to content

Commit 556c75c

Browse files
authored
Merge pull request #430 from DieterHolvoet/bandcamp-provider-name
Bandcamp links have the artist name as provider name
2 parents a247f4a + 092c6e1 commit 556c75c

File tree

3 files changed

+43
-7
lines changed

3 files changed

+43
-7
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php
2+
declare(strict_types = 1);
3+
4+
namespace Embed\Adapters\Bandcamp\Detectors;
5+
6+
use Embed\Detectors\ProviderName as Detector;
7+
8+
class ProviderName extends Detector
9+
{
10+
public function detect(): string
11+
{
12+
return 'Bandcamp';
13+
}
14+
}

src/Adapters/Bandcamp/Extractor.php

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
<?php
2+
declare(strict_types = 1);
3+
4+
namespace Embed\Adapters\Bandcamp;
5+
6+
use Embed\Extractor as Base;
7+
use Embed\Http\Crawler;
8+
use Psr\Http\Message\RequestInterface;
9+
use Psr\Http\Message\ResponseInterface;
10+
use Psr\Http\Message\UriInterface;
11+
12+
class Extractor extends Base
13+
{
14+
public function __construct(UriInterface $uri, RequestInterface $request, ResponseInterface $response, Crawler $crawler)
15+
{
16+
parent::__construct($uri, $request, $response, $crawler);
17+
18+
$this->providerName = new Detectors\ProviderName($this);
19+
}
20+
}

src/ExtractorFactory.php

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,17 @@ class ExtractorFactory
1818
'snipplr.com' => Adapters\Snipplr\Extractor::class,
1919
'play.cadenaser.com' => Adapters\CadenaSer\Extractor::class,
2020
'ideone.com' => Adapters\Ideone\Extractor::class,
21-
'github.com' => Adapters\Github\Extractor::class,
2221
'gist.github.com' => Adapters\Gist\Extractor::class,
23-
'en.wikipedia.org' => Adapters\Wikipedia\Extractor::class,
24-
'es.wikipedia.org' => Adapters\Wikipedia\Extractor::class,
25-
'gl.wikipedia.org' => Adapters\Wikipedia\Extractor::class,
22+
'github.com' => Adapters\Github\Extractor::class,
23+
'wikipedia.org' => Adapters\Wikipedia\Extractor::class,
2624
'archive.org' => Adapters\Archive\Extractor::class,
2725
'sassmeister.com' => Adapters\Sassmeister\Extractor::class,
2826
'facebook.com' => Adapters\Facebook\Extractor::class,
2927
'instagram.com' => Adapters\Instagram\Extractor::class,
3028
'imageshack.com' => Adapters\ImageShack\Extractor::class,
31-
'imagizer.imageshack.com' => Adapters\ImageShack\Extractor::class,
3229
'youtube.com' => Adapters\Youtube\Extractor::class,
3330
'twitch.tv' => Adapters\Twitch\Extractor::class,
31+
'bandcamp.com' => Adapters\Bandcamp\Extractor::class,
3432
];
3533
private array $customDetectors = [];
3634
private array $settings;
@@ -43,9 +41,13 @@ public function __construct(?array $settings = [])
4341
public function createExtractor(UriInterface $uri, RequestInterface $request, ResponseInterface $response, Crawler $crawler): Extractor
4442
{
4543
$host = $uri->getHost();
46-
$host = str_replace('www.', '', $host);
44+
$class = $this->default;
4745

48-
$class = $this->adapters[$host] ?? $this->default;
46+
foreach ($this->adapters as $adapterHost => $adapter) {
47+
if (substr($host, -strlen($adapterHost)) === $adapterHost) {
48+
$class = $adapter;
49+
}
50+
}
4951

5052
/** @var Extractor $extractor */
5153
$extractor = new $class($uri, $request, $response, $crawler);

0 commit comments

Comments
 (0)