diff options
Diffstat (limited to 'bridges/LegifranceJOBridge.php')
-rw-r--r-- | bridges/LegifranceJOBridge.php | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/bridges/LegifranceJOBridge.php b/bridges/LegifranceJOBridge.php new file mode 100644 index 0000000..348be8f --- /dev/null +++ b/bridges/LegifranceJOBridge.php @@ -0,0 +1,68 @@ +<?php +class LegifranceJOBridge extends BridgeAbstract { + + const MAINTAINER = 'Pierre Mazière'; + const NAME = 'Journal Officiel de la République Française'; + const URI = 'https://www.legifrance.gouv.fr/affichJO.do'; + const DESCRIPTION = 'Returns the laws and decrees officially registered daily in France'; + + const PARAMETERS = array(); + + private $author; + private $timestamp; + private $uri; + + private function extractItem($section, $subsection = null, $origin = null){ + $item = array(); + $item['author'] = $this->author; + $item['timestamp'] = $this->timestamp; + $item['uri'] = $this->uri . '#' . count($this->items); + $item['title'] = $section->plaintext; + + if(!is_null($origin)) { + $item['title'] = '[ ' . $item['title'] . ' / ' . $subsection->plaintext . ' ] ' . $origin->plaintext; + $data = $origin; + } elseif(!is_null($subsection)) { + $item['title'] = '[ ' . $item['title'] . ' ] ' . $subsection->plaintext; + $data = $subsection; + } else { + $data = $section; + } + + $item['content'] = ''; + foreach($data->nextSibling()->find('a') as $content) { + $text = $content->plaintext; + $href = $content->nextSibling()->getAttribute('resource'); + $item['content'] .= '<p><a href="' . $href . '">' . $text . '</a></p>'; + } + return $item; + } + + public function collectData(){ + $html = getSimpleHTMLDOM(self::URI) + or $this->returnServer('Unable to download ' . self::URI); + + $this->author = trim($html->find('h2.title', 0)->plaintext); + $uri = $html->find('h2.titleELI', 0)->plaintext; + $this->uri = trim(substr($uri, strpos($uri, 'https'))); + $this->timestamp = strtotime(substr($this->uri, strpos($this->uri, 'eli/jo/') + strlen('eli/jo/'))); + + foreach($html->find('h3') as $section) { + $subsections = $section->nextSibling()->find('h4'); + foreach($subsections as $subsection) { + $origins = $subsection->nextSibling()->find('h5'); + foreach($origins as $origin) { + $this->items[] = $this->extractItem($section, $subsection, $origin); + } + if(!empty($origins)) { + continue; + } + $this->items[] = $this->extractItem($section, $subsection); + } + if(!empty($subsections)) { + continue; + } + $this->items[] = $this->extractItem($section); + } + } +} |