Questo è solo un prototipo, un esempio di codice.
Ogni sito wordpress ha nativamente un RSS che mostra gli articoli del sito web, così da poter rimanere in contatto.
A questa pagina si può vedere come sia strutturato (Link alla documentazione del feed di wordpress), l’output generato è simile alla seguente struttura
<channel>
<title> Titolo del sito web </title>
...
<item>
<title>Titolo dell'articolo 1 </title>
...
<description> Riassunto articolo </description>
</item>
<item>
<title>Titolo dell'articolo 1 </title>
...
<description> Riassunto articolo </description>
</item>
...
</channel>
Quindi per ogni articolo viene generato un tag <item> con all’interno varie informazioni, quelle che ho usato sono principalmente due: Titolo e Descrizione.
Codice
Il codice per questa operazione è stata la seguente:
<html>
<head>
<title>Rss reader</title>
</head>
<link rel="stylesheet" href="style.css">
<body>
<?php
function getContent($Url)
{
//https://howto.webarea.it/php/come-utilizzare-curl-php-chiamate-get-post_73
$curlSES=curl_init();
curl_setopt($curlSES,CURLOPT_URL,$Url);
curl_setopt($curlSES,CURLOPT_RETURNTRANSFER,true);
curl_setopt($curlSES,CURLOPT_HEADER, false);
$result=curl_exec($curlSES);
curl_close($curlSES);
return $result;
}
$Url = "https://example.it/feed/";
if($_GET['url'])
$Url = $_GET['url'];
$result=getContent($Url);
$feed = new SimpleXMLElement($result);
function printRootAndFirstChildOfXml($Xml)
{
foreach ($Xml->children() as $child){
echo "Name Of Child: ".$child->getName();
echo "</br>";
// Get attributes of this element
foreach ($child->attributes() as $attr){
echo 'Name of Attributes: ' . $attr->getName() . ': ' . $attr;
echo "</br>";
}
// Get children
foreach ($child->children() as $subchild){
echo 'Name Of subchild: ' . $subchild->getName() . ': ' . $subchild;
echo "</br>";
}
}
}
function printExampleOfRss()
{
echo($feed->channel->title);
for($i=0;$i<2;$i++)
{
echo($feed->channel->item[$i]->title);
}
}
?>
<h3 class="NameOfChannel"><?= $feed->channel->title ?></h3>
<?php
function printItem($item)
{
?>
<div class="item">
<div class="title"><?= $item->title ?></div>
<div class="description"><?= $item->description ?></div>
</div>
<?php
}
for($iteration=0;$iteration<count($feed->channel->item);$iteration++)
printItem($feed->channel->item[$iteration]);
?>
</body>
</html>
Per migliorare la formattazione del codice ho aggiunto le seguenti regole di CSS:
.item{
width: 30vw;
margin-right: 2vw;
border:1px solid black;
float:left;
min-height: 50vh;
margin-bottom: 10vh;
}
.item .title
{
font-size: 30px;
background-color: #eee;
text-align: center;
padding:10px 0px;
}
.item .description
{
font-size: 20px;
padding: 5px;
}
.NameOfChannel
{
color:#000099;
text-align: center;
font-size: 35px;
width: 100vw;
}
Conclusione
Questo è uno script basilare, ci sono molte cose che si possono fare per migliorare, partendo dal fatto di connettrlo a un database sia per fare il login degli utenti, sia per tenere registrate i diversi url con i relativi RSS, in modo da ridurre drasticamente il numero di richieste, quindi si potrebbe utilizzare un framework come Laravel o simili per creare un vero e proprio RSS reader.
Altra cosa importante, questo è funzionale al momento solo per lo standard di wordpress e non crea molti controlli sul reale riuscita della richiesta.