Script para mostrar la trm del dia con php.

editado marzo 2009 en Programación
en mis ya conocidas , eternas ,largas y grandiosas busquedas en internet de problemas que generalmente no tienen solucion y qe me toca hacer franskentein de ellas para lograr el objetivo y qe como he dicho no se COMO CARAJOS LAS ENCUENTRO , me tope con el siguiente problema .

Necesitaba mostrar la trm del dia para una paginilla que ando haciend por ahi y pues buscando en internet me di cuenta que la gente que preguntaba jamas colocaba la soucion y que pues no existia ninugn plugin o codigo libre que permitiera hacerlo asi que me di a la tarea de hacerlo yo mismo con codigos de cosas que me pudieran servir.

Lo primera era ver donde carajos encontraba la trm del dia en colombia y pues lo unico que encontre asi como que fuera la fuente de todo poder era pues el mismo banco de la republica , usmeando pues me di cuenta qe ha existia una zona para mostrar la trm de cualquier dia en un estado de tiempo y mirando codigos fuente pues llegue a este pequeña direccion que lograba mostrar una respuesta del servidor jsp del banco de la republica .

bueno ya tenia de donde sacar la trm ahora solo faltaba tomar el numero y mostrarlo . pues buscando en internet llegue a este foro donde preguntaban como tomar strings del codigo de una pagina , y encontre este codigo :

<?php
$url="http://steamcommunity.com/id/vancete/stats/TF2";
$ch = curl_init();

curl_setopt ($ch, CURLOPT_URL,$url);
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$page = trim(curl_exec($ch));


$pos1=strpos($page,"Accumulated Points:");
$pos1=strpos($page,'whiteText">',$pos1);
$pos1=$pos1+11;

$pos2=strpos($page,"</span>",$pos1);

$puntuacion=substr($page,$pos1,$pos2-$pos1);
echo "puntuacion :".$puntuacion;
?>


modificando entonces el codigo quedaria de esta forma :

<?php
$url="http://dportal.banrep.gov.co/j2ee/encuesta/jsp/trm_del_dia.jsp";
$ch = curl_init();

curl_setopt ($ch, CURLOPT_URL,$url);
curl_setopt ($ch, CURLOPT_HEADER, 0);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
$page = trim(curl_exec($ch));


$pos1=strpos($page,'<B>');

$pos1=$pos1;

$pos2=strpos($page,"</B>",$pos1);

$puntuacion=substr($page,$pos1,$pos2-$pos1);
echo "TRM :".$puntuacion;
?>

y asi pues qeuda la trm.

pues no se si sea de ayuda para alguien pero la verdad me costo algo de trabajo encontrarla y hace unos dias jure solemnemente mostrar codiguillos o programillas que hayan resuelto dudas mias y de amigos y compartirlas con ustedes .
Espero que en algun momento de la vida cuando les ocurran momentos como los mios donde no sabes que carajos hacer y esta sea uno de ellos encuentren la solucion pronto con este script.

saludos

y Exitos la Suerte es para Tontos.

||Do0kK|em4n|| = Ducales = "El del Toque Secreto".
PD: Cabe anotar que la extension CURL del php , debe estar activada y pues que lo pueden ver en su host con un simple archivo.php que tenga el codigo :
<?php
phpinfo() ;
?>.

Comentarios

  • editado 5:10
    nojoda brother se sobro con este cod esta excelente saludos y q tenga exitos Ducales las del toque secreto :-D
  • editado 5:10
    ducales escribió : »
    en mis ya conocidas , eternas ,largas y grandiosas busquedas en internet de problemas que generalmente no tienen solucion y qe me toca hacer franskentein de ellas para lograr el objetivo y qe como he dicho no se COMO CARAJOS LAS ENCUENTRO , me tope con el siguiente problema .

    Necesitaba mostrar la trm del dia para una paginilla que ando haciend por ahi y pues buscando en internet me di cuenta que la gente que preguntaba jamas colocaba la soucion y que pues no existia ninugn plugin o codigo libre que permitiera hacerlo asi que me di a la tarea de hacerlo yo mismo con codigos de cosas que me pudieran servir.

    Lo primera era ver donde carajos encontraba la trm del dia en colombia y pues lo unico que encontre asi como que fuera la fuente de todo poder era pues el mismo banco de la republica , usmeando pues me di cuenta qe ha existia una zona para mostrar la trm de cualquier dia en un estado de tiempo y mirando codigos fuente pues llegue a este pequeña direccion que lograba mostrar una respuesta del servidor jsp del banco de la republica .

    bueno ya tenia de donde sacar la trm ahora solo faltaba tomar el numero y mostrarlo . pues buscando en internet llegue a este foro donde preguntaban como tomar strings del codigo de una pagina , y encontre este codigo :

    <?php
    $url="http://steamcommunity.com/id/vancete/stats/TF2";
    $ch = curl_init();

    curl_setopt ($ch, CURLOPT_URL,$url);
    curl_setopt ($ch, CURLOPT_HEADER, 0);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    $page = trim(curl_exec($ch));


    $pos1=strpos($page,"Accumulated Points:");
    $pos1=strpos($page,'whiteText">',$pos1);
    $pos1=$pos1+11;

    $pos2=strpos($page,"</span>",$pos1);

    $puntuacion=substr($page,$pos1,$pos2-$pos1);
    echo "puntuacion :".$puntuacion;
    ?>


    modificando entonces el codigo quedaria de esta forma :

    <?php
    $url="http://dportal.banrep.gov.co/j2ee/encuesta/jsp/trm_del_dia.jsp";
    $ch = curl_init();

    curl_setopt ($ch, CURLOPT_URL,$url);
    curl_setopt ($ch, CURLOPT_HEADER, 0);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    $page = trim(curl_exec($ch));


    $pos1=strpos($page,'<B>');

    $pos1=$pos1;

    $pos2=strpos($page,"</B>",$pos1);

    $puntuacion=substr($page,$pos1,$pos2-$pos1);
    echo "TRM :".$puntuacion;
    ?>

    y asi pues qeuda la trm.

    pues no se si sea de ayuda para alguien pero la verdad me costo algo de trabajo encontrarla y hace unos dias jure solemnemente mostrar codiguillos o programillas que hayan resuelto dudas mias y de amigos y compartirlas con ustedes .
    Espero que en algun momento de la vida cuando les ocurran momentos como los mios donde no sabes que carajos hacer y esta sea uno de ellos encuentren la solucion pronto con este script.

    saludos

    y Exitos la Suerte es para Tontos.

    ||Do0kK|em4n|| = Ducales = "El del Toque Secreto".
    PD: Cabe anotar que la extension CURL del php , debe estar activada y pues que lo pueden ver en su host con un simple archivo.php que tenga el codigo :
    <?php
    phpinfo() ;
    ?>.
    Hola!!!, pues que buen codigo nos ha dejado, pero resulta que intenté hacer operaciones con la TRM que me daba a Diario y no funcionaba, despues de verificar arto rato viendo como usted hizo las cosas encontré esto que de pronto les sirva a varios de los que han tomado este codigo y aun no han podido hacer operaciones matematicas con el valor $puntuacion.

    Entonces, cuando entras el codigo aparece la TRM en Negrita EJ: 2221.27, como aparece codificada, aunque no la queramos con negrita, siempre va a aparecer!!!, el codigo que desarrolle es el siguiente.

    $trm_final=$puntuacion;
    $trm_final = str_replace( "<B>", "", $trm_final );

    ya con el valor $trm_final pueden hacer operaciones matematicas.
  • editado 5:10
    Hola amigos tengo un problemita, tal vez me puedan ayudar

    pues quiero sacar la TRM para hacer operaciones de calculos pero no por php sino por javascript. Logré obtener este valor, de paginas como colombia.com o CurrencySource.com. Lo que pasa es que el valor de la TRM por esas paginas las actualizan muy tarde como a las dos de la tarde, y la TRM se puede saber como a las 5 a 6 de la tarde por ejemplo en esta pagina

    la gracia es que la trm coincida a la del banco de la republica la que ustedes estan usando. por que por un largo periodo de tiempo no coinciden.

    aqui tambien se puede ver la trm real

    http://investigaciones.bancolombia.com/espanol/indicadores/economicosHijos_ext.asp?id=49

    aqui hay dos codigos que muestran la trm en javascript, para operar el de colombia.com hay que hacer una cadena para que sea operable ya que ese formato no funciona para calculos, este codigo solo muestra valores diarios

    <script type="text/javascript" language="JavaScript" src="http://www.CurrencySource.com/scripts/calculator.js"></script>
    <script>
    trm = rate[13];
    document.write(trm + "<br>");
    </script>



    <script src="http://www.colombia.com/includes/2007/enlaces/actualidad_indicadores.js"></script>
    <script>
    trm = rate[13];
    document.write(IndDolTRM + "<br>");
    </script>

    lo que quiero, es saber ya como ustedes pueden obtenerla en php, np hay una manera que ese codigo genere un archivo permanentemente, un archivo .js donde este la variable TRM, y este archivo este subido en internet?
  • editado 5:10
    ducales escribió : »
    en mis ya conocidas , eternas ,largas y grandiosas busquedas en internet de problemas que generalmente no tienen solucion y qe me toca hacer franskentein de ellas para lograr el objetivo y qe como he dicho no se COMO CARAJOS LAS ENCUENTRO , me tope con el siguiente problema .

    Necesitaba mostrar la trm del dia para una paginilla que ando haciend por ahi y pues buscando en internet me di cuenta que la gente que preguntaba jamas colocaba la soucion y que pues no existia ninugn plugin o codigo libre que permitiera hacerlo asi que me di a la tarea de hacerlo yo mismo con codigos de cosas que me pudieran servir.

    Lo primera era ver donde carajos encontraba la trm del dia en colombia y pues lo unico que encontre asi como que fuera la fuente de todo poder era pues el mismo banco de la republica , usmeando pues me di cuenta qe ha existia una zona para mostrar la trm de cualquier dia en un estado de tiempo y mirando codigos fuente pues llegue a este pequeña direccion que lograba mostrar una respuesta del servidor jsp del banco de la republica .

    bueno ya tenia de donde sacar la trm ahora solo faltaba tomar el numero y mostrarlo . pues buscando en internet llegue a este foro donde preguntaban como tomar strings del codigo de una pagina , y encontre este codigo :

    <?php
    $url="http://steamcommunity.com/id/vancete/stats/TF2";
    $ch = curl_init();

    curl_setopt ($ch, CURLOPT_URL,$url);
    curl_setopt ($ch, CURLOPT_HEADER, 0);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    $page = trim(curl_exec($ch));


    $pos1=strpos($page,"Accumulated Points:");
    $pos1=strpos($page,'whiteText">',$pos1);
    $pos1=$pos1+11;

    $pos2=strpos($page,"</span>",$pos1);

    $puntuacion=substr($page,$pos1,$pos2-$pos1);
    echo "puntuacion :".$puntuacion;
    ?>


    modificando entonces el codigo quedaria de esta forma :

    <?php
    $url="http://dportal.banrep.gov.co/j2ee/encuesta/jsp/trm_del_dia.jsp";
    $ch = curl_init();

    curl_setopt ($ch, CURLOPT_URL,$url);
    curl_setopt ($ch, CURLOPT_HEADER, 0);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    $page = trim(curl_exec($ch));


    $pos1=strpos($page,'<B>');

    $pos1=$pos1;

    $pos2=strpos($page,"</B>",$pos1);

    $puntuacion=substr($page,$pos1,$pos2-$pos1);
    echo "TRM :".$puntuacion;
    ?>

    y asi pues qeuda la trm.

    pues no se si sea de ayuda para alguien pero la verdad me costo algo de trabajo encontrarla y hace unos dias jure solemnemente mostrar codiguillos o programillas que hayan resuelto dudas mias y de amigos y compartirlas con ustedes .
    Espero que en algun momento de la vida cuando les ocurran momentos como los mios donde no sabes que carajos hacer y esta sea uno de ellos encuentren la solucion pronto con este script.

    saludos

    y Exitos la Suerte es para Tontos.

    ||Do0kK|em4n|| = Ducales = "El del Toque Secreto".
    PD: Cabe anotar que la extension CURL del php , debe estar activada y pues que lo pueden ver en su host con un simple archivo.php que tenga el codigo :
    <?php
    phpinfo() ;
    ?>.

    Sin duda este es un excelente codigo me ayudo muchisimo, por tal motivo quiero hacer mi pequeño aporte.

    Realizando pruebas con la URL del banco de la republica, este no se encuentra disponible. Pero existe una pagina en donde la TRM siempre estara disponible y de ahi podemos utilizar este codigo para obtener la TRM y calcular lo que necesitemos. Aqui va mi aporte y espero que les ayude. :cool:

    function trm()
    {
    $url="Indicadores Económicos Dolar Euro UVR DTF Petroleo IGBC Cafe";
    $ch = curl_init();
    curl_setopt ($ch, CURLOPT_URL,$url);
    curl_setopt ($ch, CURLOPT_HEADER, 0);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    $page = trim(curl_exec($ch));
    //echo $page;
    $pos1=strpos($page,':</b>');
    $pos1=$pos1;
    $pos2=strpos($page,"</font><br>",$pos1);
    $puntuacion=substr($page,$pos1,$pos2-$pos1);
    $puntuacion=str_replace(':','',$puntuacion);
    $puntuacion=str_replace('$','',$puntuacion);
    $puntuacion=str_replace('</b> ','',$puntuacion);
    $puntuacion=str_replace('<br>','',$puntuacion);
    $puntuacion=trim($puntuacion);
    "TRM :".$puntuacion;

    return $puntuacion;
    }
  • editado 5:10
    Tomando parte del aporte de GILBERTOMEJIAC, pero usandolo en php, sería algo más o menos así:
    [highlight=php]
    function getTRM(){
    $f=@fopen(";http://www.colombia.com/includes/2007/enlaces/actualidad_indicadores.js","r";);
    if($f){
    $line = fread($f, 1024);
    $dollar = (preg_match('/"[0-9-.,]+/i',$line,$match))? $match[0] : 0;
    $dollar = str_replace('"','',str_replace(',','.',str_replace('.','',$dollar)));
    return $dollar;
    }
    return 0;
    }
    [/highlight]
  • editado 5:10
    No entiendo, porque en la ExpReg, haces que encuentre las comillas dobles, para después, en la siguiente linea lo elimines. XD

    Debería ser así,
    $sURL = 'http://www.colombia.com/includes/2007/enlaces/actualidad_indicadores.js';
    	    $sOpen = @fopen($sURL, "r");
    	    if( $sOpen ){
    	        $sLinea = fread($sOpen, 1024);
    	        $sDolar = (preg_match('/[0-9-.,]+/',$sLinea, $sMatch))? $sMatch[0] : 0;
    	        print "$sDolarn";
    	    }
    
    Resultado,
    [email protected]:~/Escritorio$ php PoC.php
    	1.863,03
    
  • editado 5:10
    Gracias por la correción, pero al final es necesario hacer uso de los reemplazos para poder trabajar en php con la cifra, no solo mostrarla, así que aplicando tu correción, sería asi:

    Tomando parte del aporte de GILBERTOMEJIAC, pero usandolo en php, sería algo más o menos así:
    [highlight=php]
    function getTRM(){
    $f=@fopen(";http://www.colombia.com/includes/2007/enlaces/actualidad_indicadores.js","r";);
    if($f){
    $line = fread($f, 1024);
    $dollar = (preg_match('/[0-9-.,]+/i',$line,$match))? $match[0] : 0;
    $dollar = str_replace(',','.',str_replace('.','',$dollar));
    return $dollar;
    }
    return 0;
    }
    [/highlight]
  • editado 5:10
    Mi versión basada en este foro (2013):

    Versión1 :
    [PHP]<?php
    function trm() {
    $url = "http://d o l a r.w i l k i n s o n p c.com.co/dolar-cop-usd-1.html";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $page = trim(curl_exec($ch));
    //echo $page;
    $pos1 = strpos($page, "$");
    $pos2 = strpos($page, "</f");
    return substr($page, $pos1, $pos2 - $pos1);
    }
    ?>[/PHP]

    Versión 2:
    [PHP]<?php
    function trm() {
    $url = "http://www.c o l o m b i a.com/includes/2007/enlaces/actualidad_indicadores.js";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $search = array("var ", " =", "r");
    $replace = array("$indicadores =", ";");
    $page = str_replace($search, $replace, trim(curl_exec($ch)));
    eval($page.";");
    // echo $page;
    return $indicadores;
    }
    ?>[/PHP]

    PD: Retirar espacios.
  • editado 5:10
    Buenos días,
    En caso de que lo requieran les cuento que la superintenedencia financiera de colombia www.superfinanciera.gov.co ha habilitado un web service para consumir la TRM del dia, dejan codigo en java y .net, en esta url está el manual :
    https://www.superfinanciera.gov.co/descargas?com=institucional&name=pubFile1016117&downloadname=20151228manualserviciowebtrm.pdf

    a continuación cito la noticia:


    [FONT=Arial, Helvetica, sans-serif]Superfinanciera implementa servicio de consulta en línea de la TRM
    [/FONT][FONT=Arial, Helvetica, sans-serif][/FONT]


    [FONT=Arial, Helvetica, sans-serif](Superfinanciera, Comunicado - 12/28/2015)[/FONT]


    [FONT=Arial, Helvetica, sans-serif]La Superintendencia Financiera puso a disposición el servicio de consulta en línea de la tasa representativa del mercado (TRM) en forma automática, por intermedio de un Web Services, a través del cual las entidades o las personas naturales interesados podrán obtener el valor de la TRM para la fecha actual o para una fecha en particular. Para poder acceder a la herramienta, se deberán seguir las instrucciones del Manual de Consumo. Adicionalmente, se entregan códigos fuente en Java y .Net con el objetivo de realizar pruebas de consumo del servicio. Quien consuma dicho servicio deberá adecuar el código suministrado o crear uno nuevo en caso de necesitar funcionalidades propias o en caso de consumir el servicio con otro lenguaje de programación. El certificado digital necesario para consumir el servicio se puede descargar del sitio web de la Superfinanciera.[/FONT]

  • editado 5:10
    que significa TRM? no lo encuentro.
  • editado 5:10
    Les dejo esto que encontré hoy y funciono sin problemas a la fecha.

    https://github.com/garrapato/TRM

    Requiere de una librería https://sourceforge.net/projects/nusoap/ colocarla en la ubicación que lo requiere el script y listo.

    Saludos.
    <?php
    /**
    * Created by PhpStorm.
    * User: garrapato
    * Date: 26/08/14
    * Time: 06:41
    */
    require_once('lib/nusoap/nusoap.php');
    date_default_timezone_set('America/Mexico_City');
    $oSoapClient = new nusoap_client('http://obiee.banrep.gov.co/analytics/saw.dll?wsdl', 'wsdl');
    if ($sError = $oSoapClient->getError()) {
    echo "No se pudo realizar la operación [" . $sError . "]";
    die();
    }
    $aParametros = array('name' => 'publico', 'password'=> 'publico');
    $sessionID = $oSoapClient->call("logon", $aParametros, "", "", "", "", "rpc", "http://schemas.xmlsoap.org/soap/encoding/", "encoded");
    // Alguno de los dos parámetros (reportPath o reportXml) debe ser diferente de null
    $reportRef = array (
    // Historico para un rango de fechas, como pasar el rango?, si no se pasa el rango funciona como el historico
    'reportPath' => '/shared/Consulta Series Estadisticas desde Excel/1. Tasa de Cambio Peso Colombiano/1.1 TRM - Disponible desde el 27 de noviembre de 1991/1.1.3 Serie historica para un rango de fechas dado',
    'reportXml' => null
    );
    $xmlOpts = array (
    'async' => 'false', // Importante, debe ser false
    'maxRowsPerPage' => '100',
    'refresh' => 'true',
    'presentationInfo' => 'true'
    );
    $aParametros = array(
    'report' => $reportRef,
    'outputFormat' => 'SAWRowsetData',
    'executionOptions' => $xmlOpts,
    $sessionID
    );
    $query = $oSoapClient->call("executeXMLQuery", $aParametros, "", "", "", "", "rpc", "http://schemas.xmlsoap.org/soap/encoding/", "encoded");
    $xml = new SimpleXMLElement($query, 0, false);
    //var_dump($xml);
    $fecha=(string)$xml->Row[0]->Column1;
    $tc=(string)$xml->Row[0]->Column2;
    $oSoapClient->call("logoff", $sessionID, "", "", "", "", "rpc", "http://schemas.xmlsoap.org/soap/encoding/", "encoded");
    // Existe alguna falla en el servicio?
    if ($oSoapClient->fault) { // Si
    echo 'No se pudo completar la operación';
    die();
    } else { // No
    $sError = $oSoapClient->getError();
    // Hay algun error ?
    if ($sError) { // Si
    echo 'Error:' . $sError;
    die();
    }
    echo "<!DOCTYPE html>";
    echo "<html>";
    echo "<head>";
    echo '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">';
    echo "<title>Tipo de Cambio</title>";
    echo "</head>";
    echo "<body>";
    echo "Fecha: $fecha<br/>";
    echo "Tipo de cambio: $tc<br/>";
    echo "</body>";
    echo "</html>";
    }
    ?>
Accede o Regístrate para comentar.