Ver Mensaje Individual
  #3 (permalink)  
Antiguo 28/07/2020, 15:48
Avatar de Middrel
Middrel
 
Fecha de Ingreso: abril-2005
Mensajes: 835
Antigüedad: 19 años
Puntos: 27
Respuesta: Importar XML con PHP

Hola Triby, gracias por responder!

Efectivamente, me faltaba agregar file_get_contents y con eso funcionó bien:

Código PHP:
$url $otherNode->image->attributes();
$img file_get_contents($url);
$ext substr($url, -33);
$permitted_chars '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$imgName 'img-' substr(str_shuffle($permitted_chars), 016) . '.' $ext;
$pathName $path $imgName;

file_put_contents($pathName$img); 
ahora, por el mismo medio descargue los archivos de audio, quedando el código de la siguiente forma:

Código PHP:
if(isset($_POST['upload-rss'])){
        
        
$xml trim(mysqli_real_escape_string($conn$_POST['url-rss']));        
        
$parse simplexml_load_file($xml); 
        
        
// Cabeceras del Show
        
foreach ($parse -> children() as $row) {
            
$title          $row -> title;
            
$description    $row -> description;            
            
            
$author         $row -> author;
            
$keywords       $row -> keywords;
            
$language       $row -> language;
            
$link           $row -> link;
            
$banner         $row -> image;           
            
        }
        
        
// Obtener items de iTunes
        
$x simplexml_load_file($xml);
        
$path 'images/tmp/';
        
$nodes 0;

        foreach (
$x->channel->item as $item) { 
            
            if(
$nodes <= 10){
            
                
$otherNode $item->children('itunes'TRUE); 
                
$itunesTitle    $otherNode->title;
                
$itunesEpisode  $otherNode->episode;
                
$itunesAuthor   $otherNode->author
                
$itunesSummary  $otherNode->summary;
                
$itunesKeywords $otherNode->keywords;


                
$url $otherNode->image->attributes();
                
$img file_get_contents($url);
                
$ext substr($url, -33);
                
$permitted_chars '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
                
$imgName 'img-' substr(str_shuffle($permitted_chars), 016) . '.' $ext;
                
$pathName $path $imgName;

                
file_put_contents($pathName$img);              
               
            }
            
            
$nodes ++;
        }          
        
        
$xmlDoc = new DOMDocument();
        
$xmlDoc->load$xml );
        
$nodesv 0;

        
$searchNode $xmlDoc->getElementsByTagName"item" );

        foreach( 
$searchNode as $searchNode ){
            
            if(
$nodesv <= 10){
            
            
$xmlDate $searchNode->getElementsByTagName"enclosure" )->item(0)->getAttribute('url');     
            
$vid file_get_contents($xmlDate);
            
$ext substr($xmlDate, -33);
            
$permitted_chars '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
            
$vidName 'vid-' substr(str_shuffle($permitted_chars), 016) . '.' $ext;
            
$pathName $path $vidName;
                
            
file_put_contents($pathName$vid);          
                
            }            
            
$nodesv ++;
            
        }
    } 
Ahora, de cierta forma con esto ya conseguí el objetivo al que quería llegar, obtener la información de una url, de podcasts, para poder usar la información y cargarlo en un servicio de podcast propio. Es decir, si un usuario quiere migrar su podcast de un servicio a otro ya podría hacerlo. Sin embargo, pasa lo siguiente:

1. No sé si esta es la forma correcta de hacerlo, si te das cuenta lo hago en tres fases, primero traigo los datos del programa (Cabeceras), luego traigo los items (todos los episodios que hay hasta el momento) y al final los audios (por error les puse $vid, eso luego lo cambio...)
2. No pude traer en una sola consulta, los elementos del item (iTunes) con el audio, ya que las etiquetas eran diferentes y tenía que traerlo por separado.
3. Si te das cuenta, puse una variable temporal llamada $nodes y $nodesv para solo traer 10 elementos, esto debido a que si es una url con muchos items (tengo uno de prueba de alrededor de 80), tarda mucho tiempo en descargar las imágenes y, por ende, los audios.
4. Con relación al punto 3, ¿Cómo le hago para que el usuario haga la importación y no tenga que esperar horas mientras estos se importan? ¿Debería hacerlo en algún proceso interno del servidor para evitar esto? ¿Es decir hacerlo con una tarea programada o algo así?

Es la primera vez que trabajo con esto, así que tengo aún algunas dudas de su correcta implementación.

De antemano, agradezco por sus comentarios! Saludos!