Closed fmarz96 closed 2 years ago
Hola Franco, ¿cómo estas?
Perdon la demora en responder, recien veo el issue. Sabes que otra persona también tuvo problemas para hacer peticiones a la API desde AJAX (https://github.com/Castrogiovanni20/api-dolar-argentina/issues/5). Actualmente la API es consumida de diferentes backend hechos en JavaScript, Java, PHP, C++ y en el único caso que rechaza las peticiones es con AJAX, es raro. Yo había hecho algunas modificaciones para permitir CORS, pero no funcionó. Voy a seguir investigando para ver si lo puedo solucionar. Te mantengo al tanto.
Con respecto a si el servidor se da de baja o hay algún problema, lo que podrias hacer es consumir el siguiente XML: https://www.dolarsi.com/api/dolarSiInfo.xml
Sobre los cursos de JS te recomiendo las webs:
Gracias!
Ramiro
Hola!
Ya vi el mail pero me parece que corresponde seguir por acá. Había visto el otro issue, y ese fue el código que utilicé de base para armar mi request. Yo, en particular, tengo mi front con jQuery y Vue, y el backend lo tengo en Laravel. Por otro lado, te agradezco por pasar el xml, y por los links de los cursos!
Gracias a vos! Franco.
Hola!
Al final pude resolverlo, pero usando PHP. Te paso el código que usé, quizás sirve para alguna otra oportunidad.
$responseHeroku = Http::get('https://api-dolar-argentina.herokuapp.com/api/dolaroficial'); if($responseHeroku->successful()){ $dolarOficialVenta = $responseHeroku['venta']; } else { $guzzleClient = new Client(); $response = $guzzleClient->get('https://www.dolarsi.com/api/dolarSiInfo.xml'); $body = $response->getBody(); $body->seek(0); $size = $body->getSize(); $file = $body->read($size); $xml = simplexml_load_string($file); $json = json_encode($xml); $array = json_decode($json, TRUE); $dolarOficial = $array["Dolar"]["casa344"]; $dolarOficialVenta = $dolarOficial["venta"]; }
Muchas gracias por desarrollar la api. Saludos! Franco.
@fmarziano96 buenisimo! Yo sigo viendo como permitir peticiones de Ajax. Aviso cualquier novedad.
Saludos!
Buenos días! vengo siguiendo este proyecto y estoy muy interesado. sinceramente tengo 0 de programación. quisiera usarlo en el header de un WORDPRESS.
es muy difícil poder implementarlo sin ser programador en un sitio web este proyecto?
@Castrogiovanni20 Buenas, para solucionas problemas de CORS en tus consumidores. Deberias responder el header Access-Control-Allow-Origin : *
desde el server y los browsers dejarian de chillar.
Saludos
Gracias por la data @kevinvarela! Lo voy a agregar. Abrazo
Hola, conseguí la solución al error del cors. primero agregue la npm cors
y cambie el file index .js que primero este el cors y luego el router
`const express = require('express') const helmet = require('helmet') const bodyParser = require('body-parser') const cors = require('cors') const router = require('./routes/router') const PORT = process.env.PORT || 7070 const app = express();
app.get('/', async (req, res) => { try { res.send("API para obtener las cotizaciones de los distintos tipos de dolar y riesgo pais. La documentacion la podes encontrar en https://github.com/Castrogiovanni20/api-dolar-argentina") } catch(e) { console.log(e) res.send(500); } })
// Settings app.set('port', PORT);
app.use(helmet()) app.use(bodyParser.urlencoded({ extended: false })); app.use(bodyParser.json());
// Configurar cabeceras y cors app.use(cors({ origin: '*' }));
// change route app.use('/', router)
// Starting the server app.listen(app.get('port'), () => { console.log('Server running on port ' + PORT) });`
Gracias @delbit!
De nada, los que si note es que solo funciona con $.getJson para javascript, pero ya no da errores de CORS. Saludos.
Caaaaaaaaaaapos ambos @Castrogiovanni20 y @delbit Justo estoy haciendo un curso de React/Node/Express y me viene increible el proyecto Gracias !!
Buenas! perdon que re abra este hilo. Yo estoy intentando hacer uso de la API en un proyecto hecho en VUE, y las peticiones por AXIOS, pero me esta dando tambien error de CORS. De lado de cliente como se puede solventar este tema?
Gracias!
Buenas! perdon que re abra este hilo. Yo estoy intentando hacer uso de la API en un proyecto hecho en VUE, y las peticiones por AXIOS, pero me esta dando tambien error de CORS. De lado de cliente como se puede solventar este tema?
Gracias!
Prueba a ver si con esta copia con la modificación te funciona, subo el repo para que puedas hacer un fork. https://apiarg.herokuapp.com/api/
Funciono esta URL que me dejaste perfectamente. Esta url estará siempre activa o hay que pasarla a otro lado? Asi como me la pasaste reemplace y me trajo lo datos perfectamente sin haber error de CORS.
Funciono esta URL que me dejaste perfectamente. Esta url estará siempre activa o hay que pasarla a otro lado? Asi como me la pasaste reemplace y me trajo lo datos perfectamente sin haber error de CORS.
Hasta ahora no la he dado de baja, pero es un heroku free así que no se si se caiga en algún momento. En mi repo subí el fork con la corrección, seria cuestion de deploy en tu heroku.
Si sirve de ayuda, esto es un pequeñisimo api gateway para poder hacer consultas XHR a la api de dolarsi.com sin problema de CORS:
Endpoint
GET https://walo.in/dolar.php
Ejemplo:
const valoresDolar = fetch('https://walo.in/dolar.php')
.then(r => r.json());
Ejemplo de response:
[
{
"casa": {
"compra": "103,22",
"venta": "109,22",
"agencia": "349",
"nombre": "Dolar Oficial",
"variacion": "0,10",
"ventaCero": "TRUE",
"decimales": "2"
}
},
{
"casa": {
"compra": "206,00",
"venta": "209,00",
"agencia": "310",
"nombre": "Dolar Blue",
"variacion": "-0,24",
"ventaCero": "TRUE",
"decimales": "2"
}
},
{
"casa": {
"compra": "No Cotiza",
"venta": "0",
"agencia": "311",
"nombre": "Dolar Soja",
"variacion": "0",
"ventaCero": "TRUE",
"decimales": "3"
}
},
{
"casa": {
"compra": "195,45",
"venta": "212,88",
"agencia": "312",
"nombre": "Dolar Contado con Liqui",
"variacion": "2,49",
"ventaCero": "TRUE",
"decimales": "2"
}
},
{
"casa": {
"compra": "200,610",
"venta": "200,090",
"agencia": "313",
"nombre": "Dolar Bolsa",
"variacion": "0,170",
"ventaCero": "TRUE",
"decimales": "3"
}
},
{
"casa": {
"compra": "9.852,070",
"venta": "0",
"agencia": "399",
"nombre": "Bitcoin",
"variacion": "-100,00",
"ventaCero": "TRUE",
"decimales": "3"
}
},
{
"casa": {
"nombre": "Dolar turista",
"compra": "No Cotiza",
"venta": "180,21",
"agencia": "406",
"variacion": "0,10",
"ventaCero": "TRUE",
"decimales": "2"
}
},
{
"casa": {
"compra": "102,57",
"venta": "110,11",
"agencia": "302",
"nombre": "Dolar",
"decimales": "3"
}
},
{
"casa": {
"nombre": "Argentina",
"compra": "1.888,00",
"venta": "1,29",
"mejor_compra": "True",
"mejor_venta": "False",
"fecha": "05\/05\/15",
"recorrido": "16:30",
"afluencia": {},
"agencia": "141",
"observaciones": {}
}
}
]
Codigo fuente de ese script:
<?php
if (array_key_exists('HTTP_ORIGIN', $_SERVER)) {
$origin = $_SERVER['HTTP_ORIGIN'];
} else if (array_key_exists('HTTP_REFERER', $_SERVER)) {
$origin = $_SERVER['HTTP_REFERER'];
} else {
$origin = $_SERVER['REMOTE_ADDR'];
}
header("Content-type: application/json");
header("Access-Control-Allow-Credentials: true");
header("Access-Control-Allow-Headers: Authorization, Origin, X-Requested-With, Content-Type, Accept, X-Origen");
header("Access-Control-Allow-Origin: " . $origin);
$arrContextOptions=array(
"ssl"=>array(
"verify_peer"=>false,
"verify_peer_name"=>false,
),
);
echo file_get_contents('https://www.dolarsi.com/api/api.php?type=valoresprincipales', false, stream_context_create($arrContextOptions));
Hola @Castrogiovanni20 @guidospadavecchia ! Cómo va? Tengo que hacer, para un sitio web que estoy desarrollando, conversión de dólares a pesos. Es por ello que estoy decidido a usar esta api. No la tengo muy clara con interacción con APIs. Mientras vayan leyendo, se irán dando cuenta. Dado que quiero hacer get de ajax a https://api-dolar-argentina.herokuapp.com/api/dolaroficial, quería consultarles si piensan dar de baja en algún momento el sitio en heroku o cómo puedo hacer yo para que, si ustedes lo dan de baja, el sitio que estoy haciendo pueda seguir andando sin problemas. Mi última pregunta es por cursos o enlaces que tengan para mejorar mis conocimientos de JS, y de distintos/as frameworks o librerías(React, Node, Express, ES6, etc). Para seguir aprendiendo.
UPDATE: Estoy haciendo get request a la url que está arriba. Mi problema es que me aparece este error en consola: Access to XMLHttpRequest at 'https://api-dolar-argentina.herokuapp.com/api/dolaroficial' from origin has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.
El código que estoy usando para hacer la request es el siguiente:
$.ajax({ url: "https://api-dolar-argentina.herokuapp.com/api/dolaroficial", type: "GET", dataType: "json", contentType: 'application/json', success: function(data) { console.log(data); } });
Alguna idea de lo que podría estar pasando? Lo estoy probando local primero, pero también probé en Codepen y JSFiddle.
Muchas gracias por todo! Saludos.