Var är Internationella Rymdstationen (ISS) just nu?
I den här verkstan ska vi försöka ge oss på att spåra den Internationellla Rymdstationen (IIS). Så här:
Vi ritar ut världskartan och sen ritar vi ut ISS, ser ni den röda ringen? Det markerar var IIS befinner sig just nu, men den rör sig hela tiden, så vi måste se till att uppdatera kartan ofta.
Vi ska också ta reda på hur många astronauter som är ombord och vad de heter, sä här
Det här behöver vi göra:
- Skapa ett nytt Python projekt.
- Importera beroenden.
- Programmera in addressen till ISS servern.
- Hämta namnen på besättningsmedlemmarna.
- Skriva ut namnen till en fil.
- Visa filen på skärmen.
- Presentera världskartan på skärmen.
- Rita ut ISS på kartan var 5:e sekund.
1. Skapa ISS-tracker projekt
- Börja med att skapa en katalog på disk, namnge den till 'iss-tracker'.
- Ladda ned:
- Lägg dem i katalogen som du döpte till 'iss-tracker'.
- Skapa en fil som heter 'main.py'
2. Importera beroenden
Skriv in de här instruktionerna längst upp i filen 'main.py'
import json
import turtle
import urllib.request
import time
import webbrowser
3. Programmera in addressen till ISS servern
Det finns en NASA webserver som kan svara på information om ISS. Den har en address på internet som vi kan programmera mot.
Lägg till instruktionerna som inte är utgråade i filen (de andra har du redan skrivit in) och spara. Testa!!
import json
import turtle
import urllib.request
import time
import webbrowser
url = "http://api.open-notify.org/astros.json"
response = urllib.request.urlopen(url)
Här skapar vi en variabel, som heter url
och innehåller adressen till NASA server.
Vi skickar också ett meddelande och frågar, och får ett svar som vi lägger in i en variable
som heter respone
.
4. Hämta namnen på besättningsmedlemmarna.
Lägg till instruktionerna som inte är utgråade i filen (de andra har du redan skrivit in) och spara. Testa!!
import json
import turtle
import urllib.request
import time
import webbrowser
url = "http://api.open-notify.org/astros.json"
response = urllib.request.urlopen(url)
result = json.loads(response.read())
people = result["people"]
Här läser vi svaret och skapar en variabel som heter result
och lägger in svaret i den. Sen skapar vi en
variabel som heter people
och lägger in namnen på besättningen i den.
Prova att skriva ut den om du vill, genom att lägg till instruktionerna som inte är utgråade i filen (de andra har du redan skrivit in) och spara. Testa!!
import json
import turtle
import urllib.request
import time
import webbrowser
url = "http://api.open-notify.org/astros.json"
response = urllib.request.urlopen(url)
result = json.loads(response.read())
people = result["people"]
print(people)
Vad händer?
5.Skriva ut namnen till en fil.
Iställer för att skriva ut alla namnen på bestttningen till konsolen, så ska vi skriva ut dem till en fil, som vi sen kan visa på skärmen.
Lägg till instruktionerna som inte är utgråade i filen (de andra har du redan skrivit in) och spara. Testa!!
import json
import turtle
import urllib.request
import time
import webbrowser
url = "http://api.open-notify.org/astros.json"
response = urllib.request.urlopen(url)
result = json.loads(response.read())
people = result["people"]
file = open("iss.txt", "w")
file.write("För närvarande är " +
str(result["number"]) + " astronauter på ISS: \n\n")
for p in people:
file.write(p['name'] + " - ombord" + "\n")
Vad händer här? Jo, vi skapar en variabel som innehåller en fil
som heter 'iss.txt'. Sen skriver vi in antalet astronauter (result["number"]
)i
filen.
Sen skapar vi en 'for-loop' för att skriva in alla namnen (p["name"]
) på besättningen i filen.
6. Visa filen på skärmen
Ni ska vi visa namnen på besättningen. Lägg till instruktionerna som inte är utgråade i filen (de andra har du redan skrivit in) och spara. Testa!!
import json
import turtle
import urllib.request
import time
import webbrowser
url = "http://api.open-notify.org/astros.json"
response = urllib.request.urlopen(url)
result = json.loads(response.read())
people = result["people"]
file = open("iss.txt", "w")
file.write("För närvarande är " +
str(result["number"]) + " astronauter på ISS: \n\n")
for p in people:
file.write(p['name'] + " - ombord" + "\n")
file.close()
webbrowser.open("iss.txt")
Ett fönster öppnas på skärmen som visar innehållet i filen, med namnen på besättningen.
7. Presentera världskartan på skärmen.
Nu ska vi visa världskartan, och då ska vi använda Turtle graphics.
Lägg till instruktionerna som inte är utgråade i filen (de andra har du redan skrivit in) och spara. Testa!!
import json
import turtle
import urllib.request
import time
import webbrowser
url = "http://api.open-notify.org/astros.json"
response = urllib.request.urlopen(url)
result = json.loads(response.read())
people = result["people"]
file = open("iss.txt", "w")
file.write("För närvarande är " +
str(result["number"]) + " astronauter på ISS: \n\n")
for p in people:
file.write(p['name'] + " - ombord" + "\n")
file.close()
webbrowser.open("iss.txt")
# Lägg in världskartan i Turtle graphics
screen = turtle.Screen()
screen.setup(1280, 720)
screen.setworldcoordinates(-180, -90, 180, 90)
Ladda kartan och ISS
screen.bgpic("map.gif")
screen.register_shape("iss.gif")
iss = turtle.Turtle()
iss.shape("iss.gif")
iss.setheading(45)
iss.penup()
Med Turtle kan man rita saker och presentera bilder. Här skapar vi sen 'screen', och laddar våra bilder.
8. Rita ut ISS på kartan var 5:e sekund.
Till slut ska vi rita ut ISS pp kartan, och uppdatera positionen var 5:e sekund.
Lägg till instruktionerna som inte är utgråade i filen (de andra har du redan skrivit in) och spara. Testa!!
import json
import turtle
import urllib.request
import time
import webbrowser
url = "http://api.open-notify.org/astros.json"
response = urllib.request.urlopen(url)
result = json.loads(response.read())
people = result["people"]
file = open("iss.txt", "w")
file.write("För närvarande är " +
str(result["number"]) + " astronauter på ISS: \n\n")
for p in people:
file.write(p['name'] + " - ombord" + "\n")
file.close()
webbrowser.open("iss.txt")
# Lägg in världskartan i Turtle graphics
screen = turtle.Screen()
screen.setup(1280, 720)
screen.setworldcoordinates(-180, -90, 180, 90)
Ladda kartan och ISS
screen.bgpic("map.gif")
screen.register_shape("iss.gif")
iss = turtle.Turtle()
iss.shape("iss.gif")
iss.setheading(45)
iss.penup()
while True:
url = "http://api.open-notify.org/iss-now.json"
response = urllib.request.urlopen(url)
result = json.loads(response.read())
# Ta fram ISS positionen
location = result["iss_position"]
lat = location['latitude']
lon = location['longitude']
# Skriv ut latitud ocg longitud i konsolen
lat = float(lat)
lon = float(lon)
print("\nLatitude: " + str(lat))
print("\nLongitude: " + str(lon))
# Rita ut ISS
iss.goto(lon, lat)
# Vänta i 5 sekunder och fortätt sen...
time.sleep(5)
Så här ser det ut i sin helhet
import json
import turtle
import urllib.request
import time
import webbrowser
# import geocoder
url = "http://api.open-notify.org/astros.json"
response = urllib.request.urlopen(url)
result = json.loads(response.read())
people = result["people"]
print(people)
file = open("iss.txt", "w")
file.write("För närvarande är " +
str(result["number"]) + " astronauter på ISS: \n\n")
for p in people:
file.write(p['name'] + " - ombord" + "\n")
print long and lat
g = geocoder.ip('me')
file.write("\nYour current lat / long is: " + str(g.latlng))
file.close()
webbrowser.open("iss.txt")
Setup the world map in turtle module
screen = turtle.Screen()
screen.setup(1280, 720)
screen.setworldcoordinates(-180, -90, 180, 90)
load the world map image
screen.bgpic("map.gif")
screen.register_shape("iss.gif")
iss = turtle.Turtle()
iss.shape("iss.gif")
iss.setheading(45)
iss.penup()
while True:
# load the current status of the ISS in real-time
url = "http://api.open-notify.org/iss-now.json"
response = urllib.request.urlopen(url)
result = json.loads(response.read())
# Extract the ISS location
location = result["iss_position"]
lat = location['latitude']
lon = location['longitude']
# Ouput lon and lat to the terminal
lat = float(lat)
lon = float(lon)
print("\nLatitude: " + str(lat))
print("\nLongitude: " + str(lon))
# Update the ISS location on the map
iss.goto(lon, lat)
# Refresh each 5 seconds
time.sleep(5)
Vad duktig du varit som kommit hit. Bra jobbat!!