新しい投稿

検索

記事
· 2025年1月8日 4m read

Creando un cliente REST para obtener canciones de la API REST de Spotify - Parte 1: Comprobad el token

Link de Git: https://github.com/ecelg/InterSystems-IRIS-as-a-Spotify-REST-client

 

Recientemente se me ocurrió una idea: ¿cómo puedo poner mi lista de reproducción en IRIS? 🧐

Al mismo tiempo, me dijeron que debía pagar mi suscripción de Spotify 💸💸... oooh... ¿y si obtengo algunos datos de la API de Spotify? Así que empecé a investigar sobre eso.

Como en la mayoría de los desarrollos, comencemos con la documentación de la API: https://developer.spotify.com/documentation/web-api

Para obtener los datos, se requiere solicitar un token de acceso en la URL del endpoint de token. 🧐

curl -X POST "https://accounts.spotify.com/api/token" \
     -H "Content-Type: application/x-www-form-urlencoded" \
     -d "grant_type=client_credentials&client_id=your-client-id&client_secret=your-client-secret"

Pero antes de eso, debéis comprobar vuestro client_id y client_secret en el Dashboard

creando una aplicación.

entoces

comprobad la api

comprobad la configuración

copiad el client_id y client_secret

 


Vale, todo está listo 😀 Vamos con ello!!!!!😁

1. Configurad una clase Persistent para almacenar la información de la API.

 

sustituir el código como en el siguiente y guardad

Class rest.class.apiinfo Extends (%Persistent, %JSON.Adaptor)
{

Property apiname As %String;
Property clientid As %String(%JSONFIELDNAME = "client_id");
Property clientsecret As %String(%JSONFIELDNAME = "client_secret");
Property granttype As %String(%JSONFIELDNAME = "grant_type");
Property tokentype As %String(%JSONFIELDNAME = "token_type");
Property accesstoken As %String(%JSONFIELDNAME = "access_token", MAXLEN = 200);
Property expiresin As %String(%JSONFIELDNAME = "expires_in");
Property refreshtoken As %String(%JSONFIELDNAME = "refresh_token", MAXLEN = 200);
Property authurl As %String(MAXLEN = 100);
Property authheader As %String(MAXLEN = 100);
Property apiurl As %String(MAXLEN = 100);
Property refreshbefore As %String;
Property updateat As %String;
ClassMethod checkRowid(apiname As %String = "") As %Integer [ Language = objectscript ]
{
	//w ##class(rest.class.apiinfo).checkRowid("Spotify")
	set rtn=0
	set rowid=""
	&sql(select id into :rowid from rest_class.apiinfo where apiname=:apiname )
	//w rowid,!
	if rowid'="" set rtn=rowid
	return rtn
}
}

 

 


2. Insertad la información de la API en la tabla

insertad la información de la api en la tabla

ejemplo SQL

insert into  rest_class.apiinfo
(apiname, apiurl, authurl, clientid, clientsecret, granttype, authheader)
values
('Spotify', 'https://api.spotify.com/v1', 'https://accounts.spotify.com/api/token', 'b43bf136********************', '45ffde***************', 'client_credentials', 'application/x-www-form-urlencoded')

verificadlo

SELECT
ID, accesstoken, apiname, apiurl, authheader, authurl, clientid, clientsecret, expiresin, granttype, refreshbefore, refreshtoken, tokentype, updateat
FROM rest_class.apiinfo

 


3. Configurad un cliente REST para comprobar el token.

Parece que hay varias opciones

Opción 1

Creando operaciones REST en Producción, pero ¿cómo insertar el encabezado "Content-Type: application/x-www-form-urlencoded"? 😓 Dejadme investigar más... Usando el adaptador HTTP Outbound, ok... parece que... necesito revisar más... Usando la respuesta HTTP... ooo lo siento... realmente no lo entiendo porque no hay un ejemplo paso a paso para mí... me rindo. 😭

Opción 2

Python request, parece mucho más fácil de entender, empecemos con la opción 2.

 

3a. Install the requests library

Si necesitáis configurar vuestro propio Python para IRIS después de la versión 2024.3, podéis consultar la guía Flexible Python Runtime para IRIS en Windows Server.

En PowerShell, escribid lo siguiente para instalar la biblioteca requests:

python -m pip install requests

En PowerShell, escribid lo siguiente para instalar la biblioteca iris:

python -m pip install iris

 

3b. Escribid una clase %RegisteredObject para comprobar el token.

Crejad la carpeta utli dentro de la carpeta rest.

cread la clase requestUtli.cls 

escribid la class method checkoutToken 

Class rest.utli.requestUtli Extends %RegisteredObject
{

ClassMethod checkoutToken(apiname = "", withgrandtype = 1) As %String [ Language = python ]
{
	#w ##class(rest.utli.requestUtli).checkoutToken("Spotify")
	import requests
	import json
	import iris
	
	# get the apiinfo object by apiname
	rowid=iris.cls('rest.class.apiinfo').checkRowid(apiname)
	a=iris.cls('rest.class.apiinfo')._OpenId(rowid)
	
	# parameter perparation
	api_baseurl=a.authurl
	params=""
	if withgrandtype==1:
		#print ('grandtype ='+a.granttype)
		params="grant_type="+a.granttype+"&client_id="+a.clientid+"&client_secret="+a.clientsecret
	else:
		#print ('without grandtype')
		params="client_id="+a.clientid+"&client_secret="+a.clientsecret
	contenttype=a.authheader
	headers={"Content-Type":contenttype}
	api_url=api_baseurl+"?"+params
	#print(api_url)
	del a
	
	# post it
	response = requests.post(api_url,headers=headers, verify=False)
	#print(response)
	if response.status_code==200:
		return json.dumps(response.json())
	else:
		return response.status_code
}

}

Guardad el código

 


4. Abrid una terminal para probar si está funcionando o no.

Ejecutad el siguiente comando para realizar la prueba.

w ##class(rest.utli.requestUtli).checkoutToken("Spotify")

¡Síii! ¡El token se ha verificado correctamente! 😁


ディスカッション (0)1
続けるにはログインするか新規登録を行ってください
記事
· 2025年1月8日 3m read

¿Por qué son importantes Docker, IPM y ObjectScript Quality?

¡Hola, compañeros desarrolladores en InterSystems IRIS!

A menudo me preguntan, especialmente en relación con los bonus técnicos que incentivamos en cada concurso de Open Exchange, por qué siempre damos bonus por Docker, IPM y por aprobar ObjectScript Quality.

En realidad, es muy fácil de responder.

7 Life Hacks Guaranteed To Make Your Life Easier - everymum

¿Por qué Docker?

Docker aumenta la mantenibilidad y las oportunidades de colaboración para vuestro proyecto. De hecho, si está dockerizado, cualquiera (además del desarrollador inicial) puede configurar el entorno de desarrollo del proyecto y asegurarse de que hace lo que promete. Es fácil realizar cambios para corregir un problema o añadir una nueva funcionalidad. Podéis ver más detalles en el artículo sobre el uso de Docker con InterSystems IRIS. Todos los templates básicos de IRIS en Open Exchange incluyen Docker.

Docker es una herramienta gratuita y se puede instalar tanto en plataformas Mac como Windows (las más comunes entre los desarrolladores).

¿Por qué IPM? 

Si vuestra solución IRIS no es algo puramente basado en Python o ODBC/JDBC, sino que contiene recursos de interoperabilidad y/o ObjectScript, seguro que tendréis la pregunta de cómo terminará vuestra solución en el servidor IRIS de vuestro cliente. Lo ideal sería con una mínima intervención manual, ya sea por parte del cliente o de un desarrollador (si es una herramienta para desarrolladores). La solución es un conjunto de instrucciones que debe seguir el cliente, que puede contener varios pasos manuales que se realicen sin problema. El éxito de la correcta instalación de vuestro producto depende en gran medida de la cantidad de pasos que tengáis en las instrucciones de instalación.

En este caso, IPM es ideal, ya que minimiza el procedimiento de instalación a un solo comando, "install package-name," que el cliente ejecuta en un namespace de destino. Además, IPM no solo es útil para el cliente, sino también para el propio desarrollador, por ejemplo, en un procedimiento CI/CD o/and en una pipeline de pruebas unitarias. Podéis aprender más sobre IPM: IPM, documentación y el primer artículo sobre IPM, videos.

IPM es gratuito y está siendo activamente soportado por el equipo de InterSystems dirigido por @Timothy Leavitt.

¿Por qué ObjectScript Quality?

El lenguaje ObjectScript, aunque es compilado, aún permite errores evidentes y puede causar problemas si no se siguen ciertas pautas. La solución para esto es una herramienta linter que analiza el código de ObjectScript en función de un conjunto de reglas, proporcionadas por la herramienta ObjectScript Quality de Lite Solutions.

Para que vuestro código público de ObjectScript sea analizado automáticamente, solo tenéis que añadir un archivo. Después de eso, el análisis de vuestro código será reportado aquí. Además, podéis ver más detalles en este artículo.

El análisis de calidad de ObjectScript es gratuito para el código público de ObjectScript.

¡Eso es todo!

¡Felices codificaciones y felices fiestas!

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください
記事
· 2025年1月8日 1m read

What Version is My Image?

If you want to find out what exact version your Docker image is (and since the latest image tagging scheme you cannot just rely on the image tag; and assuming you don't want to actually run it just in order to find out) you can run this docker command:

docker inspect containers.intersystems.com/intersystems/irishealth:latest-preview --format '{{ index .Config.Labels "com.intersystems.platform-version" }}'

(of course adapt the image you are referring to)

And the output will be, for example:

2025.1.0L.152.0

I found this useful for example to compare what version I am running vs. other possible available versions. This would be important with minor maintenance releases of EM versions, and, like in my example above, with Developer Preview releases.

Note this docker inspect command is a similar approach as @Dmitry Maslennikov shared here to get the default ports the container uses, and inline with the documentation referring to discovering image defaults (like in Dmitry's case).

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください
記事
· 2025年1月8日 4m read

Configuration d'un client OAuth2 pour les appels iris-http-calls à Epic on FHIR

Il y a environ un mois, j'ai commencé à travailler sur l'utilisation du logiciel Epic on FHIR.

Création d'une paires de clés publiques-privées

mkdir /home/ec2-user/path_to_key
openssl genrsa -out ./path_to_key/privatekey.pem 2048

Pour les applications back-end, vous pouvez exporter la clé publique vers un certificat X.509 encodé en base64 intitulé publickey509.pem à l'aide de la commande ci-dessous...

ディスカッション (0)0
続けるにはログインするか新規登録を行ってください
記事
· 2025年1月7日 3m read

第六十八章 打印机 - 在 UNIX® 上指定打印机

第六十八章 打印机 - 在 UNIX® 上指定打印机

要在 UNIX 设备名称为 /dev/tty06 的终端上打开 I/O 设备,请输入以下命令

   OPEN "/dev/tty06"

UNIX 系统上,打印机由 OPEN 命令上的名称标识,并在 tty 设备上作为“字符特殊”文件处理。因此,支持的 OPENUSE 命令参数与终端 I/O 相同, 而不是顺序文件 I/O 的参数。

UNIX 上,OPEN 支持大多数终端 I/O 关键字参数,如终端 I/O 中所述。

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください