PHP: convertire RSS in JSON

Short link

Convertire un feed RSS in un file JSON è un compito che io stesso ritengo da farsi nel tempo libero (leggi). Dato che oggi ho un pò di tempo libero, ho messo mano all'estensione DOM di PHP (ma si può usare anche SimpleXML, XMLReader eccetera) e ho creato un array associativo da passare alla funzione json_encode(). Vediamo il risultato.

Ecco il codice PHP:


<?php
header('Content-Type: application/json');
$feed = new DOMDocument();
$feed->load('blog-feed.xml');
$json = array();

$json['title'] = $feed->getElementsByTagName('channel')->item(0)->getElementsByTagName('title')->item(0)->firstChild->nodeValue;
$json['description'] = $feed->getElementsByTagName('channel')->item(0)->getElementsByTagName('description')->item(0)->firstChild->nodeValue;
$json['link'] = $feed->getElementsByTagName('channel')->item(0)->getElementsByTagName('link')->item(0)->firstChild->nodeValue;

$items = $feed->getElementsByTagName('channel')->item(0)->getElementsByTagName('item');

$json['item'] = array();
$i = 0;


foreach($items as $item) {

   $title = $item->getElementsByTagName('title')->item(0)->firstChild->nodeValue;
   $description = $item->getElementsByTagName('description')->item(0)->firstChild->nodeValue;
   $pubDate = $item->getElementsByTagName('pubDate')->item(0)->firstChild->nodeValue;
   $guid = $item->getElementsByTagName('guid')->item(0)->firstChild->nodeValue;
   
   $json['item'][$i++]['title'] = $title;
   $json['item'][$i++]['description'] = $description;
   $json['item'][$i++]['pubdate'] = $pubDate;
   $json['item'][$i++]['guid'] = $guid;   
     
}


echo json_encode($json);


?>

che restituisce la seguente struttura JSON:


{
  "title": "...",
  "description": "...",
  "link": "...",
  "item": [
    {
      "title": "..."
      
    },
    
    {
    
      "description": "..."
      
    },
    
    {
    
      "pubdate" : "..."
      
    },
    
    {
    
      "guid": "..."
      
    }
    
    ... altre voci
    
  ]

}

Come al solito non sono affatto soddisfatto del risultato. Aspetto i vostri consigli (e altro tempo libero) per migliorare l'implementazione.