Как мне нацелить конкретное значение в JSON и сравнить время - PullRequest
0 голосов
/ 30 ноября 2018

Я пытаюсь заставить мой проект домашней автоматизации включить свет на закате.Я использую этот код, чтобы получить закат от моего местоположения:

import requests
import json

url = "http://api.sunrise-sunset.org/json?lat=xx.xxxxxx&lng=-x.xxxxx"
response = requests.request("GET", url)
data=response.json()
print(json.dumps(data, indent=4, sort_keys=True))

Это возвращает:

{
    "results": {
        "astronomical_twilight_begin": "5:46:47 AM",
        "astronomical_twilight_end": "6:02:36 PM",
        "civil_twilight_begin": "7:08:37 AM",
        "civil_twilight_end": "4:40:45 PM",
        "day_length": "08:15:09",
        "nautical_twilight_begin": "6:26:43 AM",
        "nautical_twilight_end": "5:22:39 PM",
        "solar_noon": "11:54:41 AM",
        "sunrise": "7:47:07 AM",
        "sunset": "4:02:16 PM"
    },
    "status": "OK"
}

Я только начинаю осваивать JSON, поэтому мои вопросы:

  • Как извлечь из указанного выше только время заката?
  • Является ли (в примере) "4:02:16 PM" временем?Я знаю, что когда я смотрю на это, но узнает ли Python, что это фактическое время, чтобы я мог сравнить его?

Я пытаюсь сделать следующее:

Get the time now
Get sunset time
If time.now > sunset
    switch light on

У меня есть около 5 часов, чтобы найти ответ, или мне придется подождать 24 часа, чтобы проверить его:)

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

Вот ваш полный код:

import requests
import datetime
import json

url = "https://api.sunrise-sunset.org/json?lat=36.7201600&lng=-4.4203400"
response = requests.request("GET", url)
data=response.json() #Getting JSON Data
sunset_time_str=data['results']['sunset'] #Getting the Sunset Time

current_date=datetime.date.today() #Getting Today Date
sunset_time=datetime.datetime.strptime(sunset_time_str,'%I:%M:%S %p') #Converting String time to datetime object so that we can compare it current time
sunset_date_time=datetime.datetime.combine(current_date,sunset_time.time()) #Combine today date and time to single object

current_date_time=datetime.datetime.now()

if current_date_time > sunset_date_time:
  print('Turn On light')
else:
  print('Dont Turn ON')
0 голосов
/ 30 ноября 2018

Вам нужен модуль time и функция strptime для анализа значения.Я позволю вам самостоятельно изучить спецификацию формата со следующим URL: https://docs.python.org/3/library/datetime.html#strftime-strptime-behavior

В этом примере анализируется ваше время и выводится его.

import time
import datetime

data = {
    "results": {
        "astronomical_twilight_begin": "5:46:47 AM",
        "astronomical_twilight_end": "6:02:36 PM",
        "civil_twilight_begin": "7:08:37 AM",
        "civil_twilight_end": "4:40:45 PM",
        "day_length": "08:15:09",
        "nautical_twilight_begin": "6:26:43 AM",
        "nautical_twilight_end": "5:22:39 PM",
        "solar_noon": "11:54:41 AM",
        "sunrise": "7:47:07 AM",
        "sunset": "4:02:16 PM"
    },
    "status": "OK"
}

t = time.strptime(data['results']['sunset'], '%I:%M:%S %p')

sunset = datetime.datetime.fromtimestamp(time.mktime(t)).time()
now = datetime.datetime.now().time()

print('Now: {}, Sunset: {}'.format(now, sunset))
if now < sunset:
    print('Wait man...')
else:
    print('Turn it ON!')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...