|
| 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