Skip to content

Instantly share code, notes, and snippets.

@jmcalvomartin
Last active September 7, 2020 21:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jmcalvomartin/644396e220b69f869b9853f8b00b7037 to your computer and use it in GitHub Desktop.
Save jmcalvomartin/644396e220b69f869b9853f8b00b7037 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## La estación internacional con Python "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Vamos a conocer la ISS\n",
"* La Estación Espacial Internacional es una gran nave espacial en órbita alrededor de la Tierra. Sirve como hogar donde viven tripulaciones de astronautas y cosmonautas. \n",
"* La estación espacial es también un laboratorio científico único. Varias naciones trabajaron juntas para construir y usar la estación espacial. La estación espacial está hecha de piezas ensambladas en el espacio por astronautas. \n",
"* Orbita la Tierra a una altitud promedio de aproximadamente 250 millas. Viaja a 17.500 mph. Esto significa que orbita la Tierra cada 90 minutos. \n",
"* La NASA está utilizando la estación espacial para aprender más sobre la vida y el trabajo en el espacio. Estas lecciones permitirán enviar a los humanos al espacio más lejos que nunca.\n",
"\n",
"La primera pieza de la Estación Espacial Internacional se lanzó en noviembre de 1998. Un cohete ruso lanzó el módulo de control ruso Zarya (zar EE uh). Aproximadamente dos semanas después, el transbordador espacial Endeavour se encontró con Zarya en órbita. El transbordador espacial transportaba el nodo de la Unidad de Estados Unidos. La tripulación adjuntó el nodo Unity a Zarya.\n",
"\n",
"La estación espacial tiene el volumen de una casa de cinco habitaciones o dos aviones Boeing 747. Es capaz de soportar una tripulación de seis personas, más visitantes. En la Tierra, la estación espacial pesaría casi un millón de libras. Medida desde los bordes de sus paneles solares, la estación cubre el área de un campo de fútbol. Incluye módulos de laboratorio de Estados Unidos, Rusia, Japón y Europa."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## El Objetivo de nuestra práctica\n",
"El objetivo es estudiar algunos aspectos de la estación internacional a tiempo real usandon la programación y las consultas a herramientas externas. \n",
"\n",
"Lo que haremos será contextualizar esta práctica en el ambito del espacio o directamente sobre la ISS (estación Internacional), para ello podemos usar la información aportada anteriormente en este documento.\n",
"Una vez que nuestros alumnos conocen el contexto de la práctica, debemos marcar el objetivo que podemos conseguir usando la programación en Python. \n",
"\n",
"Los objetivos serán 3:\n",
"* Podremos localizar con exactitud donde se encuentra la ISS en cada momento.\n",
"* Podremos saber cuantos astronautas van abordo de la ISS y sus nombres\n",
"* Podremos saber cuando pasará exactamente por un lugar que nosotros le marquemos.\n",
"\n",
"Para realizar este objetivo usaremos la web http://www.open-notify.org la cual tiene una ***API*** donde podemos obtener estos datos.\n",
"Si lo alumnos no saben lo que es una ***API*** podemos explicarselo aquí https://www.xataka.com/basics/api-que-sirve \n",
"Esta API nos devolverá los datos de respuesta en un formato llamado ***JSON***. ***¿Que es JSON?***, https://www.json.org/json-es.html\n",
"Este formato JSON podremos gestionarlo perfectamente con Python como mostraremos más adelante."
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## El código de la practica\n",
"Lo primero que debemos hacer es importar las librerias necesarias para realizar el ejercicio\n",
"* ***urllib.request*** : para capturar datos desde una web\n",
"* ***json*** : necesaria para tratar los datos que recibimos que en este caso vienen en formato json\n",
"* ***folium*** : es una libreria de Python para dibujar mapas."
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import urllib.request as url\n",
"import json\n",
"import folium"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Lugar exacto de la ISS\n",
"* Usando url.Request llamamos a la Web para obtener la coordenadas de la ISS en este momento. Esto lo haremos con las dos primeras lineas\n",
"* Después leemos los datos en formato JSON usando el comando ***json.loads***\n",
"* Imprimimos los datos para verficarlos"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"1599500006\n",
"48.3707\n",
"166.3623\n"
]
}
],
"source": [
"ISS = url.Request(\"http://api.open-notify.org/iss-now.json\")\n",
"response_ISS = url.urlopen(ISS)\n",
"\n",
"ISS_obj = json.loads(response_ISS.read())\n",
"\n",
"print (ISS_obj['iss_position']['latitude'])\n",
"print (ISS_obj['iss_position']['longitude'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Mapa\n",
"Para dibujar nuestro mapa con las corrdenadas obtenidas en el código anterior, usaremos la libreria ***folium***. \n",
"Primero guardaremos los datos de latitud y longitud en dos variables llamadas lat y long"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {},
"outputs": [],
"source": [
"long=ISS_obj['iss_position']['longitude']\n",
"lat=ISS_obj['iss_position']['latitude']"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Dibujamos el mapa usando las variables anteriores (lat y long) y usamos las siguientes propiedades:\n",
"* ***zoom_starter*** : Nivel de zoom para cargar la previsualización del mapa\n",
"* ***tiles*** : Tipo de mapa, en este caso \"Vista Satélite\"\n",
"* ***Icon*** : Le damos un color al icono que nos marcará la posición de la ISS\n",
"* ***Marker*** : Ponemos el icono justo en esa posición y le colocamos la etiqueta (tooltip) de ISS"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div style=\"width:100%;\"><div style=\"position:relative;width:100%;height:0;padding-bottom:60%;\"><span style=\"color:#565656\">Make this Notebook Trusted to load map: File -> Trust Notebook</span><iframe src=\"about:blank\" style=\"position:absolute;width:100%;height:100%;left:0;top:0;border:none !important;\" data-html=PCFET0NUWVBFIGh0bWw+CjxoZWFkPiAgICAKICAgIDxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiAvPgogICAgCiAgICAgICAgPHNjcmlwdD4KICAgICAgICAgICAgTF9OT19UT1VDSCA9IGZhbHNlOwogICAgICAgICAgICBMX0RJU0FCTEVfM0QgPSBmYWxzZTsKICAgICAgICA8L3NjcmlwdD4KICAgIAogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vbGVhZmxldEAxLjYuMC9kaXN0L2xlYWZsZXQuanMiPjwvc2NyaXB0PgogICAgPHNjcmlwdCBzcmM9Imh0dHBzOi8vY29kZS5qcXVlcnkuY29tL2pxdWVyeS0xLjEyLjQubWluLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9qcy9ib290c3RyYXAubWluLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgc3JjPSJodHRwczovL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9MZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy8yLjAuMi9sZWFmbGV0LmF3ZXNvbWUtbWFya2Vycy5qcyI+PC9zY3JpcHQ+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vbGVhZmxldEAxLjYuMC9kaXN0L2xlYWZsZXQuY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vbWF4Y2RuLmJvb3RzdHJhcGNkbi5jb20vYm9vdHN0cmFwLzMuMi4wL2Nzcy9ib290c3RyYXAubWluLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL21heGNkbi5ib290c3RyYXBjZG4uY29tL2Jvb3RzdHJhcC8zLjIuMC9jc3MvYm9vdHN0cmFwLXRoZW1lLm1pbi5jc3MiLz4KICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgaHJlZj0iaHR0cHM6Ly9tYXhjZG4uYm9vdHN0cmFwY2RuLmNvbS9mb250LWF3ZXNvbWUvNC42LjMvY3NzL2ZvbnQtYXdlc29tZS5taW4uY3NzIi8+CiAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9Imh0dHBzOi8vY2RuanMuY2xvdWRmbGFyZS5jb20vYWpheC9saWJzL0xlYWZsZXQuYXdlc29tZS1tYXJrZXJzLzIuMC4yL2xlYWZsZXQuYXdlc29tZS1tYXJrZXJzLmNzcyIvPgogICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJodHRwczovL3Jhd2Nkbi5naXRoYWNrLmNvbS9weXRob24tdmlzdWFsaXphdGlvbi9mb2xpdW0vbWFzdGVyL2ZvbGl1bS90ZW1wbGF0ZXMvbGVhZmxldC5hd2Vzb21lLnJvdGF0ZS5jc3MiLz4KICAgIDxzdHlsZT5odG1sLCBib2R5IHt3aWR0aDogMTAwJTtoZWlnaHQ6IDEwMCU7bWFyZ2luOiAwO3BhZGRpbmc6IDA7fTwvc3R5bGU+CiAgICA8c3R5bGU+I21hcCB7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7Ym90dG9tOjA7cmlnaHQ6MDtsZWZ0OjA7fTwvc3R5bGU+CiAgICAKICAgICAgICAgICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwKICAgICAgICAgICAgICAgIGluaXRpYWwtc2NhbGU9MS4wLCBtYXhpbXVtLXNjYWxlPTEuMCwgdXNlci1zY2FsYWJsZT1ubyIgLz4KICAgICAgICAgICAgPHN0eWxlPgogICAgICAgICAgICAgICAgI21hcF9mNWRkYjIyZmE0ZDc0MWVlOWE5MWIyZGZlNTg5MDZlNyB7CiAgICAgICAgICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgICAgICAgICAgIHdpZHRoOiAxMDAuMCU7CiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiAxMDAuMCU7CiAgICAgICAgICAgICAgICAgICAgbGVmdDogMC4wJTsKICAgICAgICAgICAgICAgICAgICB0b3A6IDAuMCU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIDwvc3R5bGU+CiAgICAgICAgCjwvaGVhZD4KPGJvZHk+ICAgIAogICAgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImZvbGl1bS1tYXAiIGlkPSJtYXBfZjVkZGIyMmZhNGQ3NDFlZTlhOTFiMmRmZTU4OTA2ZTciID48L2Rpdj4KICAgICAgICAKPC9ib2R5Pgo8c2NyaXB0PiAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFwX2Y1ZGRiMjJmYTRkNzQxZWU5YTkxYjJkZmU1ODkwNmU3ID0gTC5tYXAoCiAgICAgICAgICAgICAgICAibWFwX2Y1ZGRiMjJmYTRkNzQxZWU5YTkxYjJkZmU1ODkwNmU3IiwKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBjZW50ZXI6IFs0OC4zNzA3LCAxNjYuMzYyM10sCiAgICAgICAgICAgICAgICAgICAgY3JzOiBMLkNSUy5FUFNHMzg1NywKICAgICAgICAgICAgICAgICAgICB6b29tOiAyLAogICAgICAgICAgICAgICAgICAgIHpvb21Db250cm9sOiB0cnVlLAogICAgICAgICAgICAgICAgICAgIHByZWZlckNhbnZhczogZmFsc2UsCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICk7CgogICAgICAgICAgICAKCiAgICAgICAgCiAgICAKICAgICAgICAgICAgdmFyIHRpbGVfbGF5ZXJfNTMwNjY5NTg5ZjNmNDQ1NmEwNDRmMjIxZmUxZjBiM2YgPSBMLnRpbGVMYXllcigKICAgICAgICAgICAgICAgICJodHRwczovL3N0YW1lbi10aWxlcy17c30uYS5zc2wuZmFzdGx5Lm5ldC90ZXJyYWluL3t6fS97eH0ve3l9LmpwZyIsCiAgICAgICAgICAgICAgICB7ImF0dHJpYnV0aW9uIjogIk1hcCB0aWxlcyBieSBcdTAwM2NhIGhyZWY9XCJodHRwOi8vc3RhbWVuLmNvbVwiXHUwMDNlU3RhbWVuIERlc2lnblx1MDAzYy9hXHUwMDNlLCB1bmRlciBcdTAwM2NhIGhyZWY9XCJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS8zLjBcIlx1MDAzZUNDIEJZIDMuMFx1MDAzYy9hXHUwMDNlLiBEYXRhIGJ5IFx1MDAyNmNvcHk7IFx1MDAzY2EgaHJlZj1cImh0dHA6Ly9vcGVuc3RyZWV0bWFwLm9yZ1wiXHUwMDNlT3BlblN0cmVldE1hcFx1MDAzYy9hXHUwMDNlLCB1bmRlciBcdTAwM2NhIGhyZWY9XCJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS8zLjBcIlx1MDAzZUNDIEJZIFNBXHUwMDNjL2FcdTAwM2UuIiwgImRldGVjdFJldGluYSI6IGZhbHNlLCAibWF4TmF0aXZlWm9vbSI6IDE4LCAibWF4Wm9vbSI6IDE4LCAibWluWm9vbSI6IDAsICJub1dyYXAiOiBmYWxzZSwgIm9wYWNpdHkiOiAxLCAic3ViZG9tYWlucyI6ICJhYmMiLCAidG1zIjogZmFsc2V9CiAgICAgICAgICAgICkuYWRkVG8obWFwX2Y1ZGRiMjJmYTRkNzQxZWU5YTkxYjJkZmU1ODkwNmU3KTsKICAgICAgICAKICAgIAogICAgICAgICAgICB2YXIgbWFya2VyX2U0N2M5NDgwM2Q4ZjRmZTI5Y2QzZDk3N2M2MzYzYWMxID0gTC5tYXJrZXIoCiAgICAgICAgICAgICAgICBbNDguMzcwNywgMTY2LjM2MjNdLAogICAgICAgICAgICAgICAge30KICAgICAgICAgICAgKS5hZGRUbyhtYXBfZjVkZGIyMmZhNGQ3NDFlZTlhOTFiMmRmZTU4OTA2ZTcpOwogICAgICAgIAogICAgCiAgICAgICAgICAgIHZhciBpY29uXzc0OTBiMzI2OWI2YzQ0NzU5MGIyZWU2YjhkMmI0NDAxID0gTC5Bd2Vzb21lTWFya2Vycy5pY29uKAogICAgICAgICAgICAgICAgeyJleHRyYUNsYXNzZXMiOiAiZmEtcm90YXRlLTAiLCAiaWNvbiI6ICJpbmZvLXNpZ24iLCAiaWNvbkNvbG9yIjogIndoaXRlIiwgIm1hcmtlckNvbG9yIjogInJlZCIsICJwcmVmaXgiOiAiZ2x5cGhpY29uIn0KICAgICAgICAgICAgKTsKICAgICAgICAgICAgbWFya2VyX2U0N2M5NDgwM2Q4ZjRmZTI5Y2QzZDk3N2M2MzYzYWMxLnNldEljb24oaWNvbl83NDkwYjMyNjliNmM0NDc1OTBiMmVlNmI4ZDJiNDQwMSk7CiAgICAgICAgCiAgICAKICAgICAgICAgICAgbWFya2VyX2U0N2M5NDgwM2Q4ZjRmZTI5Y2QzZDk3N2M2MzYzYWMxLmJpbmRUb29sdGlwKAogICAgICAgICAgICAgICAgYDxkaXY+CiAgICAgICAgICAgICAgICAgICAgIElTUwogICAgICAgICAgICAgICAgIDwvZGl2PmAsCiAgICAgICAgICAgICAgICB7InN0aWNreSI6IHRydWV9CiAgICAgICAgICAgICk7CiAgICAgICAgCjwvc2NyaXB0Pg== onload=\"this.contentDocument.open();this.contentDocument.write(atob(this.getAttribute('data-html')));this.contentDocument.close();\" allowfullscreen webkitallowfullscreen mozallowfullscreen></iframe></div></div>"
],
"text/plain": [
"<folium.folium.Map at 0x1e38bdb21c8>"
]
},
"execution_count": 6,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"m = folium.Map(location=[lat,long],zoom_start=2,tiles='Stamen Terrain')\n",
"icon=folium.Icon(color=\"red\")\n",
"folium.Marker([lat,long], tooltip=\"ISS\",icon=icon).add_to(m)\n",
"m"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Los astronautas\n",
"\n",
"En esta segunda parte de la practica usaremos la API para conocer el número de astronautas abordo de la ISS y sus nombres\n",
"\n",
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* Usando url.Request llamamos a la Web para obtener el número de astronautas y sus nombres de la ISS en este momento. Esto lo haremos con las dos primeras lineas\n",
"* Después leemos los datos en formato JSON usando el comando ***json.loads***\n",
"* Imprimimos el número de astronautas"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"3\n"
]
}
],
"source": [
"astros = url.Request(\"http://api.open-notify.org/astros.json\")\n",
"response_astros = url.urlopen(astros)\n",
"\n",
"astros_obj = json.loads(response_astros.read())\n",
"\n",
"print (astros_obj['number'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Ahora procedemos a sacar los nombres de los astronautas. Estos nombres están en formato **Lista** que forma la variable ***people*** por ese motivo usamos el comando ***json.dumps***\n",
"Utilizamos las siguientes propiedades:\n",
"* **indent** : Ponemos 3 para que marque un espacio de 3 en la sangría del margen\n",
"* **sort_keys** : Para su ordenación\n",
"* **separators** : Los caracteres de separación que usaremos entre la variable y el dato\n"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{\n",
" \"message\" = \"success\". \n",
" \"number\" = 3. \n",
" \"people\" = [\n",
" {\n",
" \"craft\" = \"ISS\". \n",
" \"name\" = \"Chris Cassidy\"\n",
" }. \n",
" {\n",
" \"craft\" = \"ISS\". \n",
" \"name\" = \"Anatoly Ivanishin\"\n",
" }. \n",
" {\n",
" \"craft\" = \"ISS\". \n",
" \"name\" = \"Ivan Vagner\"\n",
" }\n",
" ]\n",
"}\n"
]
}
],
"source": [
"astros_name = json.dumps(astros_obj, indent=3, sort_keys=True, separators =(\". \", \" = \"))\n",
"print(astros_name)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Mostrar los nombres de los astronautas usando un bucle\n",
"Para esto usamos un bucle FOR que nos permitirá sacar los datos de esa Lista de **json** e imprimirlos de uno en uno\n",
"En la ultima linea del bucle introducimos los datos en un array de Python para poder usarlo si fuese necesario (no es el caso de esta actividad)"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Chris Cassidy\n",
"Anatoly Ivanishin\n",
"Ivan Vagner\n"
]
}
],
"source": [
"astros_list=[]\n",
"for count,item in enumerate(astros_obj, start=0):\n",
" print (astros_obj['people'][count]['name'])\n",
" astros_list.append(astros_obj['people'][count]['name'])"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### ISS Predicción de Paso\n",
"\n",
"En este ultimo punto de la practica lo que haremos es facilitar un lugar de la tierra por medio de las coordenadas y ver en que momento o fecha la ISS pasará cerca de ese punto.\n",
"\n",
""
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"#### Cargamos las librerias que nos hacen faltan para gestionar el tiempo y las fechas"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [],
"source": [
"from datetime import datetime, timezone"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Usamos tres variables para mandarselas a nuestra API, ya que en esta ultima parte de la practica, nuestra consulta a la API necesita de valores para calcular la respuesta.\n",
"En este caso los valores introducidos son:\n",
"\n",
"* ***Latitud y Longitud*** : Del lugar donde queremos hacer la predicción de paso de la ISS\n",
"* ***n*** : Número de veces que queremos que nos diga en el paso por ese lugar"
]
},
{
"cell_type": "code",
"execution_count": 11,
"metadata": {},
"outputs": [],
"source": [
"# Latitud y Logitud de la Ciudad de Madrid (usada como ejemplo)\n",
"latitud=40.4\n",
"longitud=-3.7\n",
"n=5 #número de veces que pasará la ISS"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"* Usando url.Request llamamos a la Web para obtener la respuesta del paso de la ISS. Esto lo haremos con las dos primeras lineas\n",
"* Es importante destacar que dentro de la petición de la Web introducimos las tres variables anteriormente mencionadas (latitud, longitud y n)\n",
"* Después leemos los datos en formato JSON usando el comando ***json.loads***\n",
"* Imprimimos todos los datos, realmente la respuesta la obtenemos a partir de la variable ***response***"
]
},
{
"cell_type": "code",
"execution_count": 12,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'message': 'success', 'request': {'altitude': 100, 'datetime': 1599500116, 'latitude': 40.4, 'longitude': -3.7, 'passes': 5}, 'response': [{'duration': 431, 'risetime': 1599515475}, {'duration': 649, 'risetime': 1599521134}, {'duration': 614, 'risetime': 1599526972}, {'duration': 553, 'risetime': 1599532868}, {'duration': 597, 'risetime': 1599538715}]}\n"
]
}
],
"source": [
"Pass=url.Request('http://api.open-notify.org/iss-pass.json?lat={}&lon={}&n={}'.format(latitud,longitud,n))\n",
"response_Pass= url.urlopen(Pass)\n",
"\n",
"Pass_obj = json.loads(response_Pass.read())\n",
"\n",
"print (Pass_obj)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Finalmente usamos un bucle FOR para utilizar la misma estructura con la que hemos sacado los nombres de los astronautas.\n",
"\n",
"En la ultima linea, imprimimos los datos convirtiendolos en fechas reales, ya que la API nos devuelve la fecha como **risetime**"
]
},
{
"cell_type": "code",
"execution_count": 13,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"07-09-2020 23:51:15\n",
"08-09-2020 01:25:34\n",
"08-09-2020 03:02:52\n",
"08-09-2020 04:41:08\n",
"08-09-2020 06:18:35\n"
]
}
],
"source": [
"pass_list=[]\n",
"for count,item in enumerate(Pass_obj[\"response\"], start=0):\n",
" pass_list.append(Pass_obj['response'][count]['risetime'])\n",
" print(datetime.fromtimestamp(pass_list[count]).strftime('%d-%m-%Y %H:%M:%S'))"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.7"
}
},
"nbformat": 4,
"nbformat_minor": 4
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment