edgar.dueñas
Enviado por edgar.dueñas el Mié, 11/05/2016 - 16:52

Para leer los feed fue necesario usar la función simplexml_load_string de PHP que nos permite leer XML y mostrarlo como un objeto, luego fue necesario construir una función para convertir el objeto a un array.

Los XMLs son de dos fuentes diferentes y el código usado es el siguiente, que consiste en un modulo que imprime un bloque.

 

 

<?php
 
/***
 * @file
 * Módulo Logistics Customs Agency
 * Funcionalidades extras para una aplicacion de Agencias Aduanales
 */
 
/***
 * Implementation of hook_block_info().
 */
function logistics_ca_block_info() {
    $blocks['fix-change'] = array(
        'info' => t('FIX exchange rate'),
    );
    return $blocks;
}
 
/***
 * Implementation of hook_block_view().
 */
function logistics_ca_block_view($delta = '') {
 
    $block = array();
    switch ($delta) {
        case 'fix-change':
            $block['content'] = change_type();
            break;
    }
    return $block;
}
 
/***
 * custom html block
 * @return string
 */
function change_type() {
 
    $urlSAT = "http://dof.gob.mx/indicadores.xml";
    $urlThemoneyConverter = "http://themoneyconverter.com/rss-feed/ES/EUR/rss.xml";
 
    $changeTypeDollar = simplexml_load_string(file_get_contents($urlSAT));
    $resultChangeTypeDollar = xml2array($changeTypeDollar->channel->item[0]);
    $resultUDIS = xml2array($changeTypeDollar->channel->item[1]);
 
    $changeTypeEuro = simplexml_load_string(file_get_contents($urlThemoneyConverter));
    $resultChangeTypeEuroObj = xml2array($changeTypeEuro->channel->item[55]);
    $resultChangeTypeEuro = xml2array($resultChangeTypeEuroObj['description']);
    $resultChangeTypeEuro = $resultChangeTypeEuro[0];
    $resultChangeTypeEuro = explode(" ", $resultChangeTypeEuro);
 
    //dpm($resultChangeTypeEuro);
 
    return theme('change_type', array(
        'dollar' => $resultChangeTypeDollar['description'],
        'udis' => $resultUDIS['description'],
        'euro' => $resultChangeTypeEuro[3]
    ));
}
 
/***
 * Implements hook_theme the block change type
 */
function logistics_ca_theme() {
    return array(
        'change_type' => array(
            'variables' => array(
                // Specifies both available variables.
                'dollar' => NULL,
                'udis' => NULL,
                'euro' => NULL
            ),
            // It will be automatically loaded by Drupal.
            'template' => 'tpl/change_type',
        ),
    );
}
 
/***
 * function xml2array
 *
 * This function is part of the PHP manual.
 *
 * The PHP manual text and comments are covered by the Creative Commons 
 * Attribution 3.0 License, copyright (c) the PHP Documentation Group
 *
 */
function xml2array($xmlObject, $out = array()) {
    foreach ((array) $xmlObject as $index => $node)
        $out[$index] = ( is_object($node) ) ? xml2array($node) : $node;
 
    return $out;
}
?>
<div class="content-change-type">
    <h2>Tipos de cambio</h2>
    <div class="box-change-type">
        <div class="icon-change-dollar">        
        </div>
        <div class="change-type">
            <strong>Cambio D&oacute;lar</strong><span><?php echo $dollar; ?></span>      
        </div>    
    </div>    
    <div class="box-change-type">
        <div class="icon-change-dollar">        
        </div>
        <div class="change-type">
            <strong>Cambio Euro</strong> <span><?php echo $euro; ?></span>       
        </div>    
    </div> 
    <div class="box-change-type">
        <div class="icon-change-dollar">        
        </div>
        <div class="change-type">
            <strong>UDIS</strong> <span><?php echo $udis; ?></span>      
        </div>    
    </div>     
</div>