Skip to content
This repository has been archived by the owner. It is now read-only.

Commit 8caea51

Browse files
Add listener for scrape fails
1 parent d08fa15 commit 8caea51

File tree

4 files changed

+111
-7
lines changed

4 files changed

+111
-7
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
3+
namespace Softonic\LaravelIntelligentScraper\Scraper\Listeners;
4+
5+
use Softonic\LaravelIntelligentScraper\Scraper\Events\ScrapeFailed;
6+
7+
class ScrapeFailedListener
8+
{
9+
private $listeners;
10+
11+
public function __construct($listeners)
12+
{
13+
$this->listeners = $listeners;
14+
}
15+
16+
public function handle(ScrapeFailed $scraped)
17+
{
18+
if (isset($this->listeners[$scraped->scrapeRequest->type])) {
19+
resolve($this->listeners[$scraped->scrapeRequest->type])->handle($scraped);
20+
}
21+
}
22+
}

src/ScraperProvider.php

+8-1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
use Softonic\LaravelIntelligentScraper\Scraper\Listeners\ConfigureScraper;
1212
use Softonic\LaravelIntelligentScraper\Scraper\Listeners\Scrape;
1313
use Softonic\LaravelIntelligentScraper\Scraper\Listeners\ScrapedListener;
14+
use Softonic\LaravelIntelligentScraper\Scraper\Listeners\ScrapeFailedListener;
1415
use Softonic\LaravelIntelligentScraper\Scraper\Listeners\UpdateDataset;
1516

1617
class ScraperProvider extends EventServiceProvider
@@ -75,7 +76,13 @@ public function register()
7576
$this->app->when(ScrapedListener::class)
7677
->needs('$listeners')
7778
->give(function () {
78-
return config('scraper.listeners');
79+
return config('scraper.listeners.scraped');
80+
});
81+
82+
$this->app->when(ScrapeFailedListener::class)
83+
->needs('$listeners')
84+
->give(function () {
85+
return config('scraper.listeners.scrape-failed');
7986
});
8087
}
8188
}

src/config/scraper.php

+17-6
Original file line numberDiff line numberDiff line change
@@ -14,20 +14,31 @@
1414
'ignore-identifiers' => '/^react_.*$/',
1515
],
1616
/*
17-
* Configure listener per Scraped type
17+
* Configure listener per event type
1818
*
1919
* Format:
2020
* [
2121
* 'type' => 'handler class',
2222
* ].
2323
*
24+
* Declare in the "scraped" key the listener you want to attend the scrapes done successfully.
25+
* Declare in the "scrape-failed" key the listener you want to attend the scrapes that could not retrieve the
26+
* information.
27+
*
2428
* Example:
25-
* [
26-
* 'news' => App\NewsHandler::class,
27-
* 'post' => App\PostHandler::class
28-
* ]
29+
* 'scraped' => [
30+
* 'post' => App\CreatePostHandler::class
31+
* ],
32+
* 'scrape-failed' => [
33+
* 'post' => App\NotifyErrorHandler::class
34+
* ]
2935
*/
3036
'listeners' => [
31-
//
37+
'scraped' => [
38+
//
39+
],
40+
'scrape-failed' => [
41+
//
42+
],
3243
],
3344
];
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
<?php
2+
3+
namespace Softonic\LaravelIntelligentScraper\Scraper\Listeners;
4+
5+
use Softonic\LaravelIntelligentScraper\Scraper\Events\ScrapeFailed;
6+
use Softonic\LaravelIntelligentScraper\Scraper\Events\ScrapeRequest;
7+
use Tests\TestCase;
8+
9+
class ScrapeFailedListenerTest extends TestCase
10+
{
11+
/**
12+
* @test
13+
*/
14+
public function whenReceiveAnUnknownScrapeFailedTypeItShouldDoNothing()
15+
{
16+
$listener = \Mockery::mock(ScrapeFailedListener::class);
17+
\App::instance(get_class($listener), $listener);
18+
19+
$scrapeFailedListener = new ScrapeFailedListener([
20+
'known_type' => get_class($listener),
21+
]);
22+
23+
$scrapeFailedEvent = new ScrapeFailed(
24+
new ScrapeRequest(
25+
'http://uri',
26+
'unknown_type'
27+
),
28+
[],
29+
1
30+
);
31+
32+
$listener->shouldNotReceive('handle');
33+
34+
$scrapeFailedListener->handle($scrapeFailedEvent);
35+
}
36+
37+
/**
38+
* @test
39+
*/
40+
public function whenReceiveAKnownScrapeFailedTypeItShouldHandleTheEventWithTheSpecificDependency()
41+
{
42+
$listener = \Mockery::mock(ScrapeFailedListener::class);
43+
\App::instance(get_class($listener), $listener);
44+
45+
$scrapeFailedListener = new ScrapeFailedListener([
46+
'known_type' => get_class($listener),
47+
]);
48+
49+
$scrapeFailedEvent = new ScrapeFailed(
50+
new ScrapeRequest(
51+
'http://uri',
52+
'known_type'
53+
),
54+
[],
55+
1
56+
);
57+
58+
$listener->shouldReceive('handle')
59+
->once()
60+
->with($scrapeFailedEvent);
61+
62+
$scrapeFailedListener->handle($scrapeFailedEvent);
63+
}
64+
}

0 commit comments

Comments
 (0)