Jump to content

[TOPIC: topicViewTemplate]
[GLOBAL: userSmallPhoto]
Photo

Internet... necesito un pequeño empujón
Started by visstaralax May 09 2017 07:19 AM

28 replies to this topic
[TOPIC CONTROLS]
Page 1 of 2 1 2
This topic has been archived. This means that you cannot reply to this topic.
[/TOPIC CONTROLS]
[modOptionsDropdown]
[/modOptionsDropdown]
[reputationFilter]
[TOPIC: post.html]
#1

visstaralax

[GLOBAL: userInfoPane.html]
visstaralax
  • Enthusiast

  • 39 posts
  • Corona SDK

¡Buenas!

 

Estoy investigando acerca de como conectar una aplicación con un servidor. La idea sería actualizar una aplicación de carácter informativo para que uno pueda ver una página con texto que puede cambiar.

 

Supongo que hay diferentes maneras de mostrar el texto, por ejemplo con una base de datos con los campos de texto, y sólo sería cuestión de seleccionar el texto deseado.

 

Incluso, he pensado que se podría mostrar una imagen (como por ejemplo un calendario planificado) y se podría visualizar en la aplicación, dando la dirección donde se almacena la foto.

 

Estoy bastante perdido con el tema. Conozco un poco el tema del GET y del POST, pero no se que librerías investigar de Corona SDK, si Network o Socket...

 

Sólo necesito un empujón para encaminar mi investigación. Todo el trabajo bruto lo tengo que hacer yo.

 

Gracias de antemano y saludos!!



[TOPIC: post.html]
#2

visstaralax

[GLOBAL: userInfoPane.html]
visstaralax
  • Enthusiast

  • 39 posts
  • Corona SDK

Bueno, tengo algún avance, la búsqueda ha resultado precisa jajajaja:

 

local function networkListener( event )
    if ( event.isError ) then
        print( "Network error - download failed: ", event.response )
    elseif ( event.phase == "began" ) then
        print( "Progress Phase: began" )
    elseif ( event.phase == "ended" ) then
        print( "Displaying response image file" )
        myImage = display.newImage( event.response.filename, event.response.baseDirectory, 60, 40 )
        myImage.alpha = 0
        transition.to( myImage, { alpha=1.0 } )
    end
end


local params = {}
params.progress = true


network.download(
    "http://docs.coronalabs.com/images/simulator/image-mask-base2.png",
    "GET",
    networkListener,
    params,
    "helloCopy.png",
    system.TemporaryDirectory
)

He probado esto y funciona perfectamente! Se muestra la imagen en el simulador! Seguiré investigando, y si veo avances, los dejaré aquí por si a alguien lo necesita!

 

Entiendo que lo que hace es crear un archivo temporal que se llama helloCopy.png, no? Y el método de transferencia de datos es GET.

 

¿Y para simplificar el trabajo para no usar PHP (no se como funciona el lenguaje), debería tener un documento de texto almacenado en algún sitio, descargarlo, leerlo y mostrarlo, no?

 

Saludos!



[TOPIC: post.html]
#3

miguel68

[GLOBAL: userInfoPane.html]
miguel68
  • Observer

  • 20 posts
  • Corona SDK

Hola, no es necesario del todo que descargues la imagen, puedes cargarla desde una URL remota de manera dinamica, puedes obtener todo el articulo como json mediante una petición GET/POST y con ello crear la pagina del articulo en corona :D



[TOPIC: post.html]
#4

visstaralax

[GLOBAL: userInfoPane.html]
visstaralax
  • Enthusiast

  • 39 posts
  • Corona SDK

Gracias por tu respuesta! No he terminado de entender lo que me quieres decir. Lo de la imagen dinámica, creo que te entiendo; pero de todas formas, la imagen .png es temporal, y por lo tanto se borrará después, aún así lo investigaré. También estoy mirando lo de json, tal y como tu dices.

 

Saludos!



[TOPIC: post.html]
#5

miguel68

[GLOBAL: userInfoPane.html]
miguel68
  • Observer

  • 20 posts
  • Corona SDK

Animo, cualquier duda aqui estamos :D



[TOPIC: post.html]
#6

visstaralax

[GLOBAL: userInfoPane.html]
visstaralax
  • Enthusiast

  • 39 posts
  • Corona SDK

Alguien sería tan amable de explicarme que es el json, y que relacion tiene con internet? Veo que tiene que ver con algún tipo de codificación y a la vez también con php, es decir, con base de datos. ¿Eso quiere decir que si hago alguna llamada en alguna base de datos, estoy obligado a usar estos protocolos? Gracias de antemano!

[TOPIC: post.html]
#7

visstaralax

[GLOBAL: userInfoPane.html]
visstaralax
  • Enthusiast

  • 39 posts
  • Corona SDK

He encontrado esta pagina y lo explica bastante bien:

https://geekytheory.com/json-i-que-es-y-para-que-sirve-json/

[TOPIC: post.html]
#8

miguel68

[GLOBAL: userInfoPane.html]
miguel68
  • Observer

  • 20 posts
  • Corona SDK

Basicamente es una notación para transportar datos en tu articulo se explica bien, te sirve para enviar datos de corona a tu server y viceversa :D 



[TOPIC: post.html]
#9

visstaralax

[GLOBAL: userInfoPane.html]
visstaralax
  • Enthusiast

  • 39 posts
  • Corona SDK

Ya estoy entendiendo como funciona! Que alegría! Pero ahora viene una gran duda, si desde Corona Sdk quiero cambiar el contenido de la base de datos, como por ejemplo borrar usuarios, como lo hago? Acepta codigo PHP? O la gestion se hace con Lua dentro de Corona?
Gracias en serio!

[TOPIC: post.html]
#10

miguel68

[GLOBAL: userInfoPane.html]
miguel68
  • Observer

  • 20 posts
  • Corona SDK

Si se puede solo necesitas en tu server crear una api CRUD ( create,replace,update,delete ) con urls que respondan a la accion que buscas, ejemplo midominiio.com/delete/userid y hacer las request a esas direcciones desde corona  :D si quieres preguntarme tus dudas puedes mandarme mails directos a mi correo miguel@xpc.mx o puedes buscarme en facebook como miguestachaser :D

 

 

Saludos!



[TOPIC: post.html]
#11

ingediegomoran

[GLOBAL: userInfoPane.html]
ingediegomoran
  • Observer

  • 1 posts
  • Corona SDK

Hola que tal. 

Mi nombre es diego, actualmente en mi trabajo estoy en un proyecto el cual es desarrollar una aplicación móvil y que esta misma tenga acceso a base de datos alojada en un servidor web. De esta forma las modificaciones que se hagan a esa base de datos se visualicen en la aplicación móvil, y si se realizan cambios desde la aplicación se visualicen en la base de datos. 

Soy nuevo en esto de desarrollo para móviles, supe del SDK de corona y ahora estoy aprendiendo poco a poco, pero tengo duda si se puede realizar lo que he comentado y si se puede hacer con la versión gratuita de corona labs o tengo que comprar enterprise.

 

Me encantaría que me puedan responder y ayudar, les estaré muy agradecido. 

Saludos



[TOPIC: post.html]
#12

miguel68

[GLOBAL: userInfoPane.html]
miguel68
  • Observer

  • 20 posts
  • Corona SDK

Hola ya te respondí por correo, creo que sera mas facil :D 



[TOPIC: post.html]
#13

visstaralax

[GLOBAL: userInfoPane.html]
visstaralax
  • Enthusiast

  • 39 posts
  • Corona SDK

Precisamente lo que yo necesito es lo que Diego ha preguntado. Estoy investigando para saber como funciona cada detalle del proceso.

Por ejemplo, json es una sintaxis de datos, que es manipulado con javascript. Corona SDK solo tiene funciones dede codificación de sintaxis y descodificación para poder visualizar los datos.

Yo de momento desconozco como añadir o eliminar registros a la base de datos desde la aplicación Android, mediante un formulario. Pero una vez tenga un poco de información, investigaré la manera de realizarlo.

No se si es necesario tener paginas con scripts para dicha tarea.

Voy a escribir un poco de metacodigo, a ver si voy bien encaminado:

Envio de datos:

Introduccion datos —> codificacion json —> script web

Y si quisiera hacer un filtro en la.base de datos del estilo sql?

[TOPIC: post.html]
#14

miguel68

[GLOBAL: userInfoPane.html]
miguel68
  • Observer

  • 20 posts
  • Corona SDK

Hola Necesitas usar una api rest para esas cosas, puedes contactarme a mi correo o mi facebook y puedo darte información mas facilmente :D



[TOPIC: post.html]
#15

visstaralax

[GLOBAL: userInfoPane.html]
visstaralax
  • Enthusiast

  • 39 posts
  • Corona SDK

Una pregunta, si mi servidor tiene una base de datos de php y mysql, tengo algún incoveniente para seguir con todo esto? En realidad en una base de datos se puede extraer datos con cualquier sintaxis no?

[TOPIC: post.html]
#16

visstaralax

[GLOBAL: userInfoPane.html]
visstaralax
  • Enthusiast

  • 39 posts
  • Corona SDK

[TOPIC: post.html]
#17

visstaralax

[GLOBAL: userInfoPane.html]
visstaralax
  • Enthusiast

  • 39 posts
  • Corona SDK

De momento ya tengo el nombre, usuario y contraseña de mi base de datos PHP.

 

Para que Corona sdk se pueda entender con la información recibida, debería enviar los datos de la database en json, y según la documentación de la página de PHP debería codificar así:

<?php
$json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';

var_dump(json_decode($json));
var_dump(json_decode($json, true));

?>

Pero creo que esto sería en el caso de que fuera una pagina html, no para lo que quiero yo.

 

Madre mía... que caos!



[TOPIC: post.html]
#18

visstaralax

[GLOBAL: userInfoPane.html]
visstaralax
  • Enthusiast

  • 39 posts
  • Corona SDK

Por ejemplo, dado este código:

 

local function networkListener( event )


    if ( event.isError ) then
        print( "Network error: ", event.response )
    else
        print ( "Upload complete!" )
    end
end


local headers = {}
 
headers["Content-Type"] = "application/json"
headers["X-API-Key"] = "13b6ac91a2"
 
local params = {}
params.headers = headers


-- Tell network.request() to get the request body from a file:
params.body = {
    filename = "object.json",
    baseDirectory = system.DocumentsDirectory        
}
 
network.request( "http://127.0.0.1/restapi.php", "POST", networkListener, params )

Que debería poner en "headers"? Aquí pone applocation/json, pero creo que es una respuesta genérica. ¿Qué debería poner?

 

Gracias!

 



[TOPIC: post.html]
#19

miguel68

[GLOBAL: userInfoPane.html]
miguel68
  • Observer

  • 20 posts
  • Corona SDK

Hola si estan bien los headers asi :3 y si necesitas que tu server responda como json para que corona pueda manipular los datos, de corona hacia tu server puedes manejar incluso peticiones GET o POST sin problemas :)

 

Suerte



[TOPIC: post.html]
#20

visstaralax

[GLOBAL: userInfoPane.html]
visstaralax
  • Enthusiast

  • 39 posts
  • Corona SDK

¿Y si ahora quisiera introducir más registros por ejemplo en una tabla de mi database en la dirección: "Amigos/Barcelona/Barrio1"?

¿En este caso como se tendría que hacer para acceder?

 

¿Por que el objeto que se envia es .json? ¿Debería hacer una pagina con código php para decodificar el json?



[TOPIC: post.html]
#21

miguel68

[GLOBAL: userInfoPane.html]
miguel68
  • Observer

  • 20 posts
  • Corona SDK

Pues necesitarías usar un framework php como Slime/CodeIgniter/Laravel etc que te manejen ese tipo de rutas por ejemplo:

http://midominio.com/amigos/{valor1}/{valor2}/{valor3} y cosas de ese estilo, realmente no es tan complicado usando una herramienta de estas.

 

Haces tu proceso de insert/update/delete con php y simplemente respondes con un echo ya sea un simple texto ok/error o un json con información detallada para que corona sepa que sucedió.

 

Te recomiendo manejar un sistema de Tokens para la seguridad de tu sitio.



[TOPIC: post.html]
#22

visstaralax

[GLOBAL: userInfoPane.html]
visstaralax
  • Enthusiast

  • 39 posts
  • Corona SDK

Gracias por las contestaciones Miguel68!

 

He encontrado este codigo para hacer una REST Api:

 

<?php


// get the HTTP method, path and body of the request
$method = $_SERVER['REQUEST_METHOD'];
$request = explode('/', trim($_SERVER['PATH_INFO'],'/'));
$input = json_decode(file_get_contents('php://input'),true);


// connect to the mysql database
$link = mysqli_connect('localhost', 'user', 'pass', 'dbname');
mysqli_set_charset($link,'utf8');


// retrieve the table and key from the path
$table = preg_replace('/[^a-z0-9_]+/i','',array_shift($request));
$key = array_shift($request)+0;


// escape the columns and values from the input object
$columns = preg_replace('/[^a-z0-9_]+/i','',array_keys($input));
$values = array_map(function ($value) use ($link) {
  if ($value===null) return null;
  return mysqli_real_escape_string($link,(string)$value);
},array_values($input));


// build the SET part of the SQL command
$set = '';
for ($i=0;$i<count($columns);$i++) {
  $set.=($i>0?',':'').'`'.$columns[$i].'`=';
  $set.=($values[$i]===null?'NULL':'"'.$values[$i].'"');
}


// create SQL based on HTTP method
switch ($method) {
  case 'GET':
    $sql = "select * from `$table`".($key?" WHERE id=$key":''); break;
  case 'PUT':
    $sql = "update `$table` set $set where id=$key"; break;
  case 'POST':
    $sql = "insert into `$table` set $set"; break;
  case 'DELETE':
    $sql = "delete `$table` where id=$key"; break;
}


// excecute SQL statement
$result = mysqli_query($link,$sql);


// die if SQL statement failed
if (!$result) {
  http_response_code(404);
  die(mysqli_error());
}


// print results, insert id or affected row count
if ($method == 'GET') {
  if (!$key) echo '[';
  for ($i=0;$i<mysqli_num_rows($result);$i++) {
    echo ($i>0?',':'').json_encode(mysqli_fetch_object($result));
  }
  if (!$key) echo ']';
} elseif ($method == 'POST') {
  echo mysqli_insert_id($link);
} else {
  echo mysqli_affected_rows($link);
}


// close mysql connection
mysqli_close($link);

No estoy muy seguro como funciona, pero lo iré investigando.

Si en un supuesto caso, esto funcionara. ¿Tendría que subir el fichero en extensión php en el servidor?

 

¿Alguna suggerencia?



[TOPIC: post.html]
#23

visstaralax

[GLOBAL: userInfoPane.html]
visstaralax
  • Enthusiast

  • 39 posts
  • Corona SDK

Mirando un videotutorial por internet he encontrado algo que funciona:

 

local json = require( "json" )
local mime = require( "mime" )
local function handleResponse( event )
    if not event.isError then
        local response = json.decode( event.response )
        print( event.response )
    else
        print(event.response)
    end
    return
end

local headers = {}
headers["Authentication"] = mime.b64("*************")


local params = {}
params.headers = headers


network.request( "http://www.************.es/index.php", "GET", handleResponse, params )

Esta es la aplicacion base para Corona sdk. Mientras que en el servidor hay una pagina PHP con el siguiente código:

 

<?php
$host="*****.****.**";           
$username="********";
$password="********";  
$db_name="*********"; 
$con=mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name") or die ("cannot select DB");
$sql = "select * from user";
$result = mysql_query($sql);
$json = array();
$count=0;
if(mysql_num_rows($result)){
while($row=mysql_fetch_row($result)) {
$count = $count+1;
$json[$count]=$row;
}
}
mysql_close($db_name);
echo json_encode($json);
?>

Si alguien supiera como puedo hacer más funciones o búsquedas. Para mi ver que me devuelve mi lista de usuarios y contraseñas ya es increible, jeje...

 

Obviamente con esto solo puedo hacer una consulta, y me gustaría hacer filtros sql, insertar datos... etc.
Por ejemplo, mi idea sería enviar los datos de la $sql para poder decidir que quiero ver, y así mismo, enviar tambien el nombre de la tabla.

 

Gracias de antemano!!!



[TOPIC: post.html]
#24

miguel68

[GLOBAL: userInfoPane.html]
miguel68
  • Observer

  • 20 posts
  • Corona SDK

Si necesitar montar un sitio php en un server, pues yo te insistiria en que uses un framework, pero si quieres usar php puro pues necesitas ya sea crear un switch para filtrar las peticiones o crear varios archivos .php que se encarguen de las diferentes funciones que quieras hacer.



[TOPIC: post.html]
#25

visstaralax

[GLOBAL: userInfoPane.html]
visstaralax
  • Enthusiast

  • 39 posts
  • Corona SDK

La idea del REST API en realidad me gusta, pero he hecho varias pruebas con el framework Slim y he tenido problemas de instalación. He estado probando un proyecto que se llama AUTOMATIC API REST, pero me faltan conocimientos para entenderlo, ya que solo pude visualizar el contenido de las tablas, nada más.

 

Pero yo tengo una pregunta, en el framework tambien hay que picar código no? Qué diferencia hay entre el PHP puro y duro? Debería utilizar Apache?

 

Y otra pregunta, crees que podría enviar datos dentro de network.request después del link? Ejemplo:

network.request( "http://www.paginadeprueba.es/index.php?tabla=usuario&texto=blabla", "GET", handleResponse, params )

, y recibirlas en la pagina php? como variables &tabla y &texto.

 

Saludos :)

 

Edit: Solo quería decir que ya está resuelto, con la instruccion $_GET(tabla)




[topic_controls]
Page 1 of 2 1 2
 
[/topic_controls]