Mostrando entradas con la etiqueta web server. Mostrar todas las entradas
Mostrando entradas con la etiqueta web server. Mostrar todas las entradas

miércoles, 22 de enero de 2025

Crear una API de Python desde zero - Parte 1

Para poder interactuar con algunas APIs que usan Python como yfinance tendrás que crearte tu entorno de Python en tu servidore web. En este artículo voy a detallar los pasos para instalar Python, crear un entorno virtual y hacer una primera 

El primer paso es instalar el software necesario: 

# sudo apt-get update
# sudo apt-get install -yq git supervisor python python3-pip python3-distutils
# sudo apt-get install build-essential libssl-dev libffi-dev python3-dev

Después de un rato instalando y configurando componentes, se completará la instalación instalando un entorno virtual y tambien instalaremos la libreria de yfinance que usaremos más adelante.  

# sudo pip install --upgrade pip venv
# sudo pip install yfinance


El siguiente paso es crear un Entorno Virtual sobre el que empezar a trabajar. 

Crea una carpeta en la que vas a dejar los entornos: 

# mkdir entornos
# cd entornos

Una vez dentro de la carpeta, puedes crear un entorno ejecutando el comando: 
# python3 -m venv mi_entorno

Este comando crea un nuevo directorio que ya tiene algo de contenido: 






Para usar este entorno es necesario activarlo, algo que se puede hacer con el comando que llama al script de activación: 

# source mi_entorno/bin/activate

Una vez estas dentro de la línea de comando puedes empezar a trabajar en él. 

(mi_entorno) usuario@instance-1:~/entornos$ nano hola.py 

Dentro del editor nano añade una única linia:
 
print("Hola Mundo!")


Y cierra nano apretando Ctrl+X y guardando el contenido. Despues podrás ejecutar el programa: 

(mi_entorno) usuario@instance-1:~/entornos$ python hola.py

Ahora el siguiente paso es crear una API web, para ello usaremos el framework Flask . Flask es un entorno ligero y flexible que facilita la creación de aplicaciones webs y APIs, provee herramientas y librerias que permiten gestionar las peticiones HTTP, el enrutado entre otras tareas.
Así pues, el siguiente paso es instalar Flask: 

(mi_entorno) usuario@instance-1:~/entornos$ pip install flask 




Con esto ya podemos empezar a crear nuestra aplicación. Como ejemplo, vamos a crear una aplicación web que consulta el valor de una acción cualquier, por ejemplo Para ello volvemos usar el editor nano y creamos un fichero que llamaremos api.py : 

(mi_entorno) usuario@instance-1:~/entornos$ nano api.py

Y copiaremos el siguiente código de ejemplo que consulta el valor de Alphabet Inc:


from flask import Flask, jsonify
import yfinance as yf

app = Flask(__name__)

def obtener_precio(ticker):
    try:
        bbva = yf.Ticker(ticker)
        info = bbva.info
        precio_actual = info.get('regularMarketPrice')
        if precio_actual is None:
            precio_actual = info.get('previousClose')
            if precio_actual is None:
                return {"precio": "Precio no disponible"}
            else:
                return {"precio": precio_actual, "tipo": "Precio de cierre anterior"}
        return {"precio": precio_actual, "tipo": "Precio actual"}
    except Exception as e:
        print(f"Error al obtener datos: {e}")
        return {"error": "Error al obtener el precio"}

@app.route('/precio')
def obtener_precio_ruta():
    precio = obtener_precio("GOOG")
    return jsonify(precio) # Devuelve un JSON

if __name__ == '__main__':
    app.run(debug=True)

Con el código guardado, procedemos a ponerlo en marcha llamando al fichero: 

(mi_entorno) usuario@instance-1:~/entornos$ python api.py
Y vemos que este arranca y crea un servicio web que empieza a escuchar por el puerto 5000:



Si lanzamos una consulta al servicio usando el navegador de la línea de comando curl veremos que si esta funcionando como esperamos: 

# curl http://127.0.0.1:5000/precio



En los siguiente artículos modificaremos la API para que pueda recibir el ticker como argumento, publicaremos la api como un servicio web de producción y crearemos una página web que pueda utilizar esta API. 

Enlaces: 





miércoles, 25 de enero de 2017

Publicar un phpinfo

Para comprobar que hemos instalado el PHP o hemos habilitado los módulos de forma correcta, la manera más sencilla es publicar una pagina PHP con la función PHPINFO .

Una página con phpinfo() nuestra toda la información PHP de nuestro servidor.

La información que muestra es:

  • La información de la compilación PHP y sus extensiones
  • La versión de PHP
  • La información del servidor y del entorno. 
  • El entorno de PHP.
  • La información del OS y paths
  • Encabezados HTTP
  • La licencia de PHP

Como crear una pagina phpinfo 

1. Crear un archivo de texto plano y guardarlo con el nombre phpinfo.php.
2. El archivo debe contener el siguiente código: 
<?php
phpinfo();
?>
3.  Subir este archivo a una ubicación de nuestro servidor.
4. Desde cualquier navegador ir a la pagina phpinfo.php que acabamos de subir. Y veremos algo tal que así:

jueves, 12 de febrero de 2015

Como distribuir Apps de iOS en un servidor web - OTA (Over The Air)


Esta semana me han pedido como podríamos distribuir una aplicación de iOS en un servidor web nuestro, firmada con una licencia Enterprise para distribución interna.

Que necesitamos:
- Una licencia de iOS Developer Enterprise, que cuesta unos 299€
https://developer.apple.com/programs/ios/enterprise/
- Un certificado para la distribución iOS Distribution.
- Un App ID para tu aplicación.
- Un Provisioning Profile para empaquetar tu aplicación.
- Un servidor web con certificado SSL firmado por una entidad de confianza.


Crear el .IPA
Todo el proceso de crear los certificados y firmar la aplicación están detallados en el siguiente link, si hace falta más información publicaré alguna otra entrada:
http://johannesluderschmidt.de/provision-ios-ipa-app-for-in-house-enterprise-distribution/2993/

Con todo el perfil de distribución instalado en un Xcode, el siguiente paso es archivar el proyecto iOS:

1. Asegurarnos que en los Build Settings de nuestro proyecto estamos usando nuestro certificado y el provisioning profile que hemos generado para la App.

2. En el menu de Xcode seleccionar Product -> Destination -> iOS Device


3. En el menú de Xcode seleccionar Product -> Archive

4. En el Organizar , en la pestaña de Archives seleccionar Export...



5. En el asistente de exportación indicar la opción "Save for Enterprise Deployment"


6. Seleccionar el Development Team que haya firmado el Provisioning Profile que hemos creado para esta App.

7. Y en la última ventana de Summary ya podemos hacer el Export del proyecto a un .IPA , indicando en que carpeta queremos guardar la App.




Distribuir la App
Una vez tenemos el .IPA el siguiente paso es publicarlo en nuestro servidor web. En versiones anteriores del Xcode, al hacer este paso generaba también el archivo .plist que incluía la información de la App para su instalación, pero a partir del Xcode 6 parece que hay que crear este archivo manualmente. Desconozco si han discontinuado esta función o es algo que Apple vaya a arreglar más adelante.

IMPORTANTE: Si estas intentando publicar la aplicación en un IIS, asegurate de incluir los tipos MIME de los archivos. En la consola de gestión de IIS, clicar con el botón derecho sobre el servidor ir a Propiedades, y dentro de propiedades clicar sobre Tipos MIME ... y añadir los dos tipos que vamos a agregar:

.IPA   - application/octet-stream 
.PLIST -  text/xml

El primer paso para publicar el .IPA es generar el archivo .plist de nuestra APP. Para el archivo necesitamos los siguientes datos:
- URL donde esta el .IPA ( siempre con https:// )
- Bundle ID del proyecto
- Versión que hemos indicado en el Xcode
- Título de la aplicación

Generamos un archivo miapp.plist ( el nombre del archivo tiene que ser el mismo que el nombre del .ipa) .
El código del .plist es el siguiente:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>items</key>
        <array>
                <dict>
                        <key>assets</key>
                        <array>
                                <dict>
                                        <key>kind</key>
                                        <string>software-package</string>
                                        <key>url</key>
                                        <string>[URL del.IPA]</string>
                                </dict>
                        </array>
                        <key>metadata</key>
                        <dict>
                                <key>bundle-identifier</key>
                                <string>[Bundle ID de nuestra APP]</string>
                                <key>bundle-version</key>
                                <string>[versión de la App]</string>
                                <key>kind</key>
                                <string>software</string>
                                <key>title</key>
                                <string>[Título de la APP]</string>
                        </dict>
                </dict>
        </array>
</dict>
</plist>
Y en nuestra web tenemos que incluir un link a este archivo .plist con el siguiente formato:

<a href="itms-services://?action=download-manifest&url=[URL del .plist]">Instala mi fabulosa iOS APP</a>

Con el link publicado en nuestra web, podemos entrar desde cualquier dispositivo iOS a la web donde tenemos publicado el enlace, al hacer click sobre él nos mostrara una advertencia indicándonos si deseamos instalar la Aplicación. 
La aplicación se instalara, pero no avisará de que se haya completado el proceso, si vamos a la Home, veremos que ya tenemos el icono de la aplicación. Al tratar de iniciarlo por primera vez nos advertirá "Desarrollador no fiable" y si deseamos confiar en el equipo de desarrollo de nuestro certificado. 

Al clicar sobre confianza, ya no volverá a mostrar de nuevo esta advertencia.


Links:
https://longtrieuquang.wordpress.com/2014/08/01/how-to-distribute-your-ios-app-ota-with-enterprise-account/
http://stackoverflow.com/questions/8881609/ios-distribution-parameters-in-itms-services-protocol-link-for-plist
http://stackoverflow.com/questions/25910387/xcode-6-save-for-enterprise-deployment-does-not-create-plist-for-ipa-anymore