You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Php_RSS/fluxRSS/src/model/Parser.php

100 lines
2.7 KiB

<?php
namespace model;
use DAL\ArticleGateway;
use DAL\Connection;
use DAL\FluxGateway;
use DOMDocument;
use Exception;
use metier\Article;
use metier\Flux;
class Parser
{
private FluxGateway $fluxGateway;
private ArticleGateway $articleGateway;
public function __construct(FluxGateway $fluxGateway, ArticleGateway $articleGateway){
$this->fluxGateway = $fluxGateway;
$this->articleGateway = $articleGateway;
}
public function parseArticles(Flux $flux): array
{
$dom = new DOMDocument();
$tabArticle = array();
if ($dom->load($flux->getFlux())){
$items = $dom->getElementsByTagName('item');
foreach ($items as $item) {
$title = $item->getElementsByTagName('title')[0]->nodeValue;
$date = $item->getElementsByTagName('pubDate')[0]->nodeValue;
$guid = $item->getElementsByTagName('guid')[0]->nodeValue;
$link = $item->getElementsByTagName('link')[0]->nodeValue;
$description = $item->getElementsByTagName('description')[0]->nodeValue;
$media = $item->getElementsByTagName('media:content');
$mediaUrl = null;
if ($media->length > 0){
$mediaUrl = $media->item(0)->getAttribute('url');
}
$tabArticle[] = new Article(
(int)null,
$title,
$date,
$description,
$guid,
$link,
($mediaUrl !== null) ? (string)$mediaUrl : '',
$flux->getId());
}
return $tabArticle;
} else {
// En cas d'erreur lors du chargement du flux RSS, lever une exception
throw new Exception("Erreur lors du chargement du flux RSS");
}
}
/**
* @throws Exception
*/
public function parseAll($fluxes){
$tabArticles = [];
foreach ($fluxes as $flux){
$fluxx = new Flux($flux[0],$flux[1]);
$tabArticles[] = $this->parseArticles($fluxx);
}
return $tabArticles;
}
/**
* @throws Exception
*/
public function addAllArticles()
{
$tabFluxes = [];
$this->articleGateway->removeAllArticleForParser();
$allItemFlux = $this->fluxGateway->findAllFlux();
foreach ($allItemFlux as $ItemFlux){
$tabFluxes[] = $ItemFlux[1];
}
$allTabArticles = $this->parseAll($allItemFlux);
foreach ($allTabArticles as $tabArticle) {
foreach ($tabArticle as $item) {
$this->articleGateway->addArticle($item);
}
}
}
}