Servicio Web de la NASA - Astronomy Picture of the Day (imagen astronómica del día, APOD)

Índice

Introducción:

Hoy en día podemos encontrar una gran cantidad de servicios web o APIs en toda Internet, muchas empresas importantes nos permiten acceder a sus cientos de datos, con el fin de que nosotros los desarrolladores podamos usarlos.

Hoy usaremos el servicio de la NASA , "Imagen Astronómica Del Día", también conocido por sus siglas en ingles como "APOD".



APOD es un servicio que nos provee una imagen astronómica diaria, ademas de la imagen, nos proporciona una breve descripción de esta, pero hoy nos centraremos en la imagen.

En el día de hoy crearemos un pequeño programa con el lenguaje de programación Python y haremos uso de la librería requests para hacer la petición a los servidores de la NASA. Si aun no tienes la librería requests, puedes descargarla ingresando al siguiente enlace: Descargar Liberia Requests
El programa que crearemos, le pedirá una entrada al usuario, la cual sera la fecha de la imagen que desea, luego de esto el programa buscara la imagen y luego la descargara en nuestro ordenador.

Proyecto ApodPy

Al programa de hoy lo e bautizado como "Proyecto ApodPy", no es un buen nombre pero solo es una prueba.


A continuación te enseñare el código de nuestro programa:


#Importamos la librería Requests para hacer peticiones a servidores
import requests
import webbrowser

#Le pedimos al usuario que introduzca una fecha con el formato Año-Mes-Día
date = input("introduzca una fecha con el formato Año-Mes-Día (Ej: 2008-04-05): ")

#Parámetros que le pasaremos a la petición
params = {'api_key':'DEMO_KEY',
   #Date es la fecha de la imagen que nos devolverá el servidor la cual descargaremos
   'date': date}
print("Obteniendo imagen astronomica de la fecha ", params['date'])

#Creamos una conexión con los servidores de la NASA
response = requests.get('https://api.nasa.gov/planetary/apod?', params=params)

#Obtenemos la respuesta del servidor en un formato json
responseJSON = response.json()

#En ocasiones en vez de darnos una imagen nos dan un vídeo
#Por ello comprobaremos que la respuesta sea una imagen
#Si la respuesta no es una imagen se nos abrirá una pestaña en nuestro navegador con el link del vídeo
if responseJSON['media_type'] == "image":
 #Enviamos una petición a la url que nos devuelve https://api.nasa.gov/planetary/apod?
 responseIMG = requests.get(responseJSON['url'])

 #Luego iteramos la respuesta y le escribimos en un fichero de formato jpg con escritura Binaria
 with open('apod-'+params['date']+'.jpg', 'wb') as img:
  for x in responseIMG.iter_content():
   img.write(x)
  print("n Imagen apod-"+params['date']+".jpg descargado correctamente.")
  img.close()

#Como ya mencione si la respuesta no es una imagen se abrirá una pestaña en nuestro navegado con el video
#Si quieres puedes hacer lo mismo que lo de la imagen, descargar el vídeo, simplemente repite el procedimiento de arriba
else:
 webbrowser.opne_new_tab(responseJSON['url'])



El código es corto y fácil de entender, se ve algo cargado pero es por los comentarios, si quieres verlo mejor, puedes verlo en mi repositorio de GitHub: Proyecto ApodPy.py.


Lo primero que hace el programa es importar los modulo necesarios que en este caso son requests y webbrowser. Luego de esto pedimos una entrada la cual sera fecha de la imagen que deseamos obtener, esta fecha la guardamos en una variable con el identificador date. Luego declaramos una variable con el identificador params,esta variable almacenara un diccionario con dos elementos, estos 2 elementos serán los parámetros de nuestra petición, el primero sera api_key, al cual le daremos el valor de DEMO_KEY, el segundo seria la fecha de la imagen que deseamos obtener. Luego hacemos la petición a "https://api.nasa.gov/planetary/apod?", aquí mismo le decimos que los parámetros serán los elementos del diccionario params. Luego declaramos una variable con el identificador responseJSON, la cual almacenara la respuesta dada por el servidor en formato JSON. Luego de todo esto empezamos con el proceso de extraer la URL de la imagen y almacenarla en el directorio actual en donde se ejecuta el programa.


Antes de ejecutar el programa, quiero advertirles que el servicio nos permite usar la clave "DEMO_KEY" para probar la API antes de tener que registrarnos para una clave real, "DEMO_KEY" tiene bastantes limitaciones: no más de 30 peticiones por hora y un máximo de 50 por día, por lo tanto, si tienes planeado hacer más de 50 peticiones por día. ya sea que quieres hacer un proyecto comercial, te recomiendo conseguir una "API_KEY", la cual puedes conseguir registrándote en el siguiente enlace: Get Your API Key.


Resultado del Proyecto ApodPy:

Momento de ejecutar nuestro "Proyecto ApodPy", al ejecutar, nos deberia aparecer algo como esto:

Yo colocare la fecha de hoy, la cual es "2017-10-10". Quiero dejar en claro en que podemos colocar cualquier fecha, aparir de la primera publicación el 16 de junio de 1995 hasta la fecha actual.

Luego de introducir la fecha, el programa empezara a hacer la petición y posteriormente, descargar la imagen el en directorio actual del programa.


Ese seria el resultado, la imagen se descargo correctamente, y la podemos ver en el directorio, a continuación te muestro la imagen que el programa descargo por mi:


Hermoso ¿Verdad?.

Si tienes ganas de saber más acerca de este servicio, y conocer otros servicios web de la NASA, te sugiero que visites el sitio oficial de NASA Open APIs.

Eso a sido todo de mi parte por el dia de hoy, si quedaste con alguna duda, déjamela saber en los comentarios, comparte tu experiencia de este "Proyecto ApodPy" con nosotros. Mi nombre es Luis, y fue un placer compartir mis conocimientos con ustedes :D.
  1. Antonio Jesús dice:

    Espectacular: lo que estás compartiendo de Python y sus resultados tal como la foto. Muchas gracias Luis Salcedo.
    Un saludo desde Medellín, Antioquia, Colombia.

  2. Raul C dice:

    Gran idea, muchas gracias, estupendo blog!

    1. Luis Salcedo dice:

      Gracias Raul, es bueno saber que ayudamos a las personas compartiendo lo que sabemos 😀

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir
White Monkey