summaryrefslogtreecommitdiff
path: root/bridges/CNETFranceBridge.php
blob: 222c8b9a513022378e9ce86b950b229e5a3e1045 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php
class CNETFranceBridge extends FeedExpander
{
	const MAINTAINER = 'leomaradan';
	const NAME = 'CNET France';
	const URI = 'https://www.cnetfrance.fr/';
	const CACHE_TIMEOUT = 3600; // 1h
	const DESCRIPTION = 'CNET France RSS with filters';
	const PARAMETERS = array(
		'filters' => array(
			'title' => array(
				'name' => 'Exclude by title',
				'required' => false,
				'title' => 'Title term, separated by semicolon (;)',
				'defaultValue' => 'bon plan;bons plans;au meilleur prix;des meilleures offres;Amazon Prime Day;RED by SFR ou B&You'
			),
			'url' => array(
				'name' => 'Exclude by url',
				'required' => false,
				'title' => 'URL term, separated by semicolon (;)',
				'defaultValue' => 'bon-plan;bons-plans'
			)
		)
	);

	private $bannedTitle = [];
	private $bannedURL = [];

	public function collectData()
	{
		$title = $this->getInput('title');
		$url = $this->getInput('url');

		if ($title !== null) {
			$this->bannedTitle = explode(';', $title);
		}

		if ($url !== null) {
			$this->bannedURL = explode(';', $url);
		}

		$this->collectExpandableDatas('https://www.cnetfrance.fr/feeds/rss/news/');
	}

	protected function parseItem($feedItem)
	{
		$item = parent::parseItem($feedItem);

		foreach ($this->bannedTitle as $term) {
			if (preg_match('/' . $term . '/mi', $item['title']) === 1) {
				return null;
			}
		}

		foreach ($this->bannedURL as $term) {
			if (preg_match('/' . $term . '/mi', $item['uri']) === 1) {
				return null;
			}
		}

		return $item;
	}
}