Skip to content

Commit e69ceba

Browse files
authored
[ZonebourseBridge] Add Bridge (#4501)
1 parent 0d20a8c commit e69ceba

File tree

1 file changed

+85
-0
lines changed

1 file changed

+85
-0
lines changed

bridges/ZonebourseBridge.php

Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
<?php
2+
3+
class ZonebourseBridge extends BridgeAbstract
4+
{
5+
const NAME = 'Zonebourse';
6+
const URI = 'https://www.zonebourse.com';
7+
const DESCRIPTION = 'Retrieve news from zonebourse.com';
8+
const MAINTAINER = 'tillcash';
9+
const PARAMETERS = [
10+
[
11+
'topic' => [
12+
'name' => 'topic',
13+
'type' => 'list',
14+
'values' => [
15+
'toute-l-actualite' => [
16+
'monde' => '/actualite-bourse/',
17+
'france' => '/actualite-bourse/regions/locales/',
18+
'europe' => '/actualite-bourse/regions/europe/',
19+
'amerique-du-nord' => '/actualite-bourse/regions/amerique-du-nord/',
20+
'amerique-du-sud' => '/actualite-bourse/regions/amerique-du-sud/',
21+
'asie' => '/actualite-bourse/regions/asie/',
22+
'afrique' => '/actualite-bourse/regions/afrique/',
23+
'moyen-orient' => '/actualite-bourse/regions/moyenorient/',
24+
'emergents' => '/actualite-bourse/regions/emergents/',
25+
],
26+
'societes' => [
27+
'toute-l-actualite' => '/actualite-bourse/societes/',
28+
'reco-analystes' => '/actualite-bourse/societes/recommandations/',
29+
'rumeurs' => '/actualite-bourse/societes/rumeur/',
30+
'introductions' => '/actualite-bourse/societes/introductions/',
31+
'operations-capitalistiques' => '/actualite-bourse/societes/operations/',
32+
'nouveaux-contrats' => '/actualite-bourse/societes/nouveaux-contrats/',
33+
'profits-warnings' => '/actualite-bourse/societes/profits-warnings/',
34+
'nominations' => '/actualite-bourse/societes/nominations/',
35+
'communiques' => '/actualite-bourse/societes/communique/',
36+
'operations-sur-titre' => '/actualite-bourse/societes/operations_titre/',
37+
'publications-de-resultats' => '/actualite-bourse/societes/publications/',
38+
'nouveaux-marches' => '/actualite-bourse/societes/nouveaux-marches/',
39+
'nouveaux-produits' => '/actualite-bourse/societes/nouveaux-produits/',
40+
'strategies-societes' => '/actualite-bourse/societes/strategies-societes/',
41+
'risques-juridiques' => '/actualite-bourse/societes/risques-juridiques/',
42+
'rachats-d-actions' => '/actualite-bourse/societes/rachats-actions/',
43+
'fusions-et-acquisitions' => '/actualite-bourse/societes/fusions-acquisitions/',
44+
'call-transcripts' => '/actualite-bourse/societes/call-transcripts/',
45+
'guidance' => '/actualite-bourse/societes/guidance/',
46+
],
47+
],
48+
],
49+
],
50+
];
51+
52+
public function getName()
53+
{
54+
$topic = $this->getKey('topic');
55+
return self::NAME . ($topic ? ': ' . $topic : '');
56+
}
57+
58+
public function collectData()
59+
{
60+
$dom = getSimpleHTMLDOM(self::URI . $this->getInput('topic'));
61+
$articles = $dom->find('table#newsScreener tbody tr');
62+
63+
if (!$articles) {
64+
returnServerError('Failed to retrieve news content');
65+
}
66+
67+
foreach ($articles as $article) {
68+
$element = $article->find('.grid a', 0);
69+
70+
if (!$element || empty($element->plaintext) || empty($element->href)) {
71+
continue;
72+
}
73+
74+
$date = $article->find('span.js-date-relative.txt-muted.h-100', 0);
75+
$timestamp = $date->{'data-utc-date'} ?? '';
76+
77+
$this->items[] = [
78+
'timestamp' => $timestamp,
79+
'title' => trim($element->plaintext),
80+
'uid' => $element->href,
81+
'uri' => self::URI . $element->href,
82+
];
83+
}
84+
}
85+
}

0 commit comments

Comments
 (0)