diff --git a/bridges/ZonebourseBridge.php b/bridges/ZonebourseBridge.php new file mode 100644 index 00000000..e8c91608 --- /dev/null +++ b/bridges/ZonebourseBridge.php @@ -0,0 +1,85 @@ + [ + 'name' => 'topic', + 'type' => 'list', + 'values' => [ + 'toute-l-actualite' => [ + 'monde' => '/actualite-bourse/', + 'france' => '/actualite-bourse/regions/locales/', + 'europe' => '/actualite-bourse/regions/europe/', + 'amerique-du-nord' => '/actualite-bourse/regions/amerique-du-nord/', + 'amerique-du-sud' => '/actualite-bourse/regions/amerique-du-sud/', + 'asie' => '/actualite-bourse/regions/asie/', + 'afrique' => '/actualite-bourse/regions/afrique/', + 'moyen-orient' => '/actualite-bourse/regions/moyenorient/', + 'emergents' => '/actualite-bourse/regions/emergents/', + ], + 'societes' => [ + 'toute-l-actualite' => '/actualite-bourse/societes/', + 'reco-analystes' => '/actualite-bourse/societes/recommandations/', + 'rumeurs' => '/actualite-bourse/societes/rumeur/', + 'introductions' => '/actualite-bourse/societes/introductions/', + 'operations-capitalistiques' => '/actualite-bourse/societes/operations/', + 'nouveaux-contrats' => '/actualite-bourse/societes/nouveaux-contrats/', + 'profits-warnings' => '/actualite-bourse/societes/profits-warnings/', + 'nominations' => '/actualite-bourse/societes/nominations/', + 'communiques' => '/actualite-bourse/societes/communique/', + 'operations-sur-titre' => '/actualite-bourse/societes/operations_titre/', + 'publications-de-resultats' => '/actualite-bourse/societes/publications/', + 'nouveaux-marches' => '/actualite-bourse/societes/nouveaux-marches/', + 'nouveaux-produits' => '/actualite-bourse/societes/nouveaux-produits/', + 'strategies-societes' => '/actualite-bourse/societes/strategies-societes/', + 'risques-juridiques' => '/actualite-bourse/societes/risques-juridiques/', + 'rachats-d-actions' => '/actualite-bourse/societes/rachats-actions/', + 'fusions-et-acquisitions' => '/actualite-bourse/societes/fusions-acquisitions/', + 'call-transcripts' => '/actualite-bourse/societes/call-transcripts/', + 'guidance' => '/actualite-bourse/societes/guidance/', + ], + ], + ], + ], + ]; + + public function getName() + { + $topic = $this->getKey('topic'); + return self::NAME . ($topic ? ': ' . $topic : ''); + } + + public function collectData() + { + $dom = getSimpleHTMLDOM(self::URI . $this->getInput('topic')); + $articles = $dom->find('table#newsScreener tbody tr'); + + if (!$articles) { + returnServerError('Failed to retrieve news content'); + } + + foreach ($articles as $article) { + $element = $article->find('.grid a', 0); + + if (!$element || empty($element->plaintext) || empty($element->href)) { + continue; + } + + $date = $article->find('span.js-date-relative.txt-muted.h-100', 0); + $timestamp = $date->{'data-utc-date'} ?? ''; + + $this->items[] = [ + 'timestamp' => $timestamp, + 'title' => trim($element->plaintext), + 'uid' => $element->href, + 'uri' => self::URI . $element->href, + ]; + } + } +}