Почему не работает этот код в Питоне
Кто разбирается, прошу помощи. Линк не работает в коде, а по видеокурсу все в порядке. Всем спасибо.
import requests
MY_LAT = 51.565645
MY_LONG = -8.676756
parameters = {
"lat": MY_LAT,
"lng": MY_LONG,
"formatted": 0,
}
response = requests set(url="http://api.open-notify.org/iss-now.json")
response.raise_for_status()
data = response.json()
print(data)
sunrise = data["results"] ["sunrise" ]
sunset = data["results"] ["sunset" ]
print(sunrise.split("T")[1].split(":")[0])
time_now = datetime.now()
print(time_now.hour)
Я делал уже этот пример см. https://programming.mybb.ru/viewtopic.php?id=83, там нет параметров data["results"] ["sunrise" ] и data["results"] ["sunset" ] см. http://api.open-notify.org/iss-now.json, есть только timestamp, iss_position, longitude, latitud, и message см.:
{"timestamp": 1693688864, "iss_position": {"longitude": "20.5175", "latitude": "18.7122"}, "message": "success"}
Вот сам пример:
import requests import json def get_coord(): #Обращается к URL ресурсу, запрос метод GET response = requests.get('http://api.open-notify.org/iss-now.json') if response: #Превращает из JSON в Dictionary _dict = json.loads(response.content) sat_pos = _dict['iss_position'] print("lan %s lon %s" % (sat_pos['latitude'], sat_pos['longitude'])) get_coord()
Вы наверное спутали с вот этой библиотекой - https://sunrise-sunset.org/api
import requests
import json
MY_LAT = 51.565645
MY_LONG = -45.676756
parameters = {
"lat": MY_LAT,
"lng": MY_LONG,
"formatted": 0,
}
response = requests.get('http://api.open-notify.org/iss-now.json')
response.raise_for_status()
data = response.json()
print(data)
sunrise = data["results"] ["sunrise"]
sunset = data["results"] ["sunset" ]
print(data.split("T")[1].split(":")[0])
time_now = datetime.now()
print(time_now.hour)
а по видеокурсу все в порядке
- никогда не пользуйтесь только одним источником, там могут быть ошибки.
https://requests.readthedocs.io/en/latest/, https://requests.readthedocs.io/en/latest/user/quickstart/...,
https://www.powercms.in/article/how-get-json-data-remote-u...
- разбейте задачу на маленькие шаги, проверяйте каждый из них и думайте.
вот вы определяете parameters, а зачем? где они используются?
пройдите по этой ссылке http://api.open-notify.org/iss-now.json
и получите {"message": "success", "iss_position": {"longitude": "-74.1586", "latitude": "-37.5604"}, "timestamp": 1693758902}
Причем заход и восход солнца к положению ISS?
sunrise = data["results"] ["sunrise" ]
sunset = data["results"] ["sunset" ]
- import requests
- from datetime import datetime
- MY_LAT = 38.548330
- MY_LONG = -90.326280
- LOCAL_UTC_OFFSET = 6
- #response = requests.get(url="http://api.open-notify.org/iss-now.json")
- #response.raise_for_status()
- #data= response.json()
- #longitude = data["iss_position"]["longitude"]
- #latitude = data["iss_position"][latitude]
- #iss_position = (longiture, latitude)
- #print(iss_position)
- def utc_to_local(utc_hour):
- utc_hour += LOCAL_UTC_OFFSET
- if LOCAL_UTC_OFFSET > 0:
- if utc_hour > 23:
- utc_hour -= 24
- elif LOCAL_UTC_OFFSET < 0:
- if utc_hour < 0:
- utc_hour += 24
- return utc_hour
- parameters = {
- "lat": MY_LAT,
- "lng": MY_LONG,
- "formatted": 0,
- }
- response = requests.get("https://api.sunrise-sunset.org/json", params=parameters)
- response.raise_for_status()
- data = response.json()
- sunrise = int(data["results"]["sunrise"].split("T")[1].split(":")[0])
- sunset = int(data["results"]["sunset"].split("T")[1].split(":")[0])
- lt_sunrise = utc_to_local(sunrise)
- lt_sunset = utc_to_local(sunset)
- print(sunrise)
- print(sunset)
- time_now = datetime.now()
- print(time_now.hour)
Спасибо за советы, читаю другие форумы.
Хотя если думать логически, речь идёт о спутниках,
речь скорее не о спутниках, а о где-то об API, но проблема не в этом.
В учебных упражнениях не следует смешивать различные задачи.
Вот вы привели код - он же совершенно грязный. Ненужные закоментированные строки, различные задачи.
Попробуйте в одном файле решать одну и только одну задачу. В начале файла можете описать задачу. Потом вам же самой будет намного легче разбираться.
ИМХО она спутала http://open-notify.org/Open-Notify-API/ISS-Location-Now/ с https://sunrise-sunset.org/api.
import requests
import json
def get_coord():
#Обращается к URL ресурсу, запрос метод GET
response = requests.get('http://api.open-notify.org/iss-now.json')
if response:
#Превращает из JSON в Dictionary
_dict = json.loads(response.content)
sat_pos = _dict['iss_position']
print("lan %s lon %s" % (sat_pos['latitude'], sat_pos['longitude']))
get_coord()
print (f"Please connect with users")
#3
import requests
from datetime import datetime
MY_LAT = 31.23228
MY_LONG =121.46921
LOCAL_UTC_OFFSET = 6
response = requests.get(url="http://api.open-notify.org/iss-now.json")
response.raise_for_status()
data= response.json()
longitude = data["iss_position"]["longitude"]
latitude = data["iss_position"]["latitude"]
iss_position = (longitude, latitude)
print(iss_position)
Полное г...результаты показывают другие данные. С чем это связано?
Месяца три назад все отлично работало.
Полное г...результаты показывают другие данные. С чем это связано?
Месяца три назад все отлично работало.
А что, собственно, ожидается? какие данные? Что не работает?
вот первая часть - результат:
$ python part1.pylan 48.7634 lon 35.8669Please connect with users
Вторая часть - результаты:
$ python part2.py('76.1658', '50.4180')
Вроде отлично работает :-)
The longitude and latitude can be either positive or negative to indicate the direction from the prime meridian and the equator, respectively. Positive values indicate north for latitude and east for longitude, while negative values indicate south for latitude and west for longitude. In the context of global positioning, positive and negative values are used to specify whether the location is north or south of the equator and east or west of the prime meridian.
Вы конечно извините, но тут ни при чем ни приведенный код, ни Python. Не вполне понятна задача, не вполне понятны требования к используемым внешним источникам данных.
Просто кидаете куски кода и пишете "ниработает". А критериев "шоб работало", не даете
В моей программе код выдает совсем другие данные. Хотя должен с точностью выводить данные заданные в коде. с плюсом.
Сорян, но не стало яснее :-(
Вы просто составьте табличку, вроде такой, как ниже (но с более релевантными деталями)
Что я хочу видеть как результат работы программы | Что она выдает |
---|---|
На моем банковском счету лежит 100`000`000 евро! | Результат, ввергающий меня в уныние (меньше 10`000 евро!) |
И возможно сразу станет понятно, куда закралась ошибка...
Я ничего не понял :-)
Уточню:
- не понятно, что ожидается. К данному момент вообще не очевидно, что вы ожидаете получить. Код в комментарии, на который я ответил, безупречен. В том смысле, что он делает ровно то, что там написано: выводит долготу и широту в том виде, в котором описал автор кода.
Если вы еще раз детально опишите ожидаемый результат vs. имеющийся сейчас результат, то станет понятнее, что означает "выводит какую-то ерунду".
например:
- в результате работы программы ожидаю увидеть следующую строку "Lat: X North, Long: Y West", получаю: Lat: X, Long: -Y
- причина: в программе нигде не производится нужное форматирование вывода, его надо написать. При написании учитывайте, что Lat>0 - это North, Lat <0 - это South; Long >0 - это East, Long<0 - это West.
- и т.п.