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, -3, 3);
$permitted_chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$imgName = 'img-' . substr(str_shuffle($permitted_chars), 0, 16) . '.' . $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, -3, 3);
$permitted_chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$imgName = 'img-' . substr(str_shuffle($permitted_chars), 0, 16) . '.' . $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, -3, 3);
$permitted_chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$vidName = 'vid-' . substr(str_shuffle($permitted_chars), 0, 16) . '.' . $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!