In [97]:
# Import necessary libraries
import ephem
import math
from datetime import timedelta
from datetime import datetime


# get_passes() function definition
def get_passes(observer, tle, start_time, num_passes=None, duration=None):
    """Config obs and sat, Return pass data for all passes in given interval.

    Arguments:
    observer -- 4 element list containing desired [name,lat,lon,alt]
    tle -- 3 element list containing desired tle [line0,line1,line2]
    start_time -- ephem.date string formatted 'yyyy/mm/dd hr:min:sec'
    num_passes -- integer number of desired passes (defualt None)
    duration -- float number of hours or fraction of hours (default None)

    Specify either num_passes or duration.
    If both, use num_passes.
    If neither, find passes for next 24 hours.
    """

    obs_name, obs_lat, obs_lon, obs_alt = observer
    tle_line0, tle_line1, tle_line2 = tle

    # Set up location of observer
    ground_station = ephem.Observer()
    ground_station.name = obs_name                # name string
    ground_station.lon = obs_lon                  # in degrees (+E)
    ground_station.lat = obs_lat                  # in degrees (+N)
    ground_station.elevation = obs_alt            # in meters
    ground_station.date = ephem.date(start_time)  # in UTC

    # Read in most recent satellite TLE data
    sat = ephem.readtle(tle_line0, tle_line1, tle_line2)

    contacts = []

    if num_passes is not None and duration is None:
        # if only num_passes specified
        try:
            for i in range(num_passes):
                sat.compute(ground_station)  # compute all body attributes for sat
                # next pass command yields array with [0]=rise time,
                # [1]=rise azimuth, [2]=max alt time, [3]=max alt,
                # [4]=set time, [5]=set azimuth
                info = ground_station.next_pass(sat)
                rise_time, rise_az, max_alt_time, max_alt, set_time, set_az = info
                deg_per_rad = 180.0/math.pi           # use to conv azimuth to deg
                pass_duration = timedelta(days = set_time-rise_time)  # fraction of a day

                if set_time > rise_time:  # only update if set time > rise time
                    ground_station.date = set_time  # new obs time = prev set time

                pass_data = {
                    'start' : rise_time.datetime().ctime(),
                    'end' : set_time.datetime().ctime(),
                    'duration' : str(pass_duration),
                    'rise_az' : (rise_az*deg_per_rad),
                    'set_az' : (set_az*deg_per_rad)
                }

                # increase by 1 min and look for next pass
                ground_station.date = ground_station.date + ephem.minute
                contacts.append(pass_data)
        except ValueError:
            # No (more) visible passes
            pass
        return contacts

    if num_passes is None and duration is not None:
        # if only duration specified
        try:
            end_time = ephem.date(ground_station.date+duration*ephem.hour)
            while (ground_station.date <= end_time):
                sat.compute(ground_station)  # compute all body attributes for sat
                # next pass command yields array with [0]=rise time,
                # [1]=rise azimuth, [2]=max alt time, [3]=max alt,
                # [4]=set time, [5]=set azimuth
                info = ground_station.next_pass(sat)
                rise_time, rise_az, max_alt_time, max_alt, set_time, set_az = info
                deg_per_rad = 180.0/math.pi           # use to conv azimuth to deg
                pass_duration = timedelta(set_time-rise_time)  # fraction of a day

                if set_time > rise_time:  # only update if set time > rise time
                    ground_station.date = set_time  # new obs time = prev set time

                pass_data = {
                    'start' : rise_time.datetime().ctime(),
                    'end' : set_time.datetime().ctime(),
                    'duration' : str(pass_duration),
                    'rise_az' : (rise_az*deg_per_rad),
                    'set_az' : (set_az*deg_per_rad)
                }

                # increase time by 1 min and look for next pass
                ground_station.date = ground_station.date + ephem.minute
        except ValueError:
            # No (more) visible passes
            pass
        return pass_data

    if num_passes is not None and duration is not None:
        # if both are specified, use num_passes
        try:
            for i in range(num_passes):
                sat.compute(ground_station)  # compute all body attributes for sat
                # next pass command yields array with [0]=rise time,
                # [1]=rise azimuth, [2]=max alt time, [3]=max alt,
                # [4]=set time, [5]=set azimuth
                info = ground_station.next_pass(sat)
                rise_time, rise_az, max_alt_time, max_alt, set_time, set_az = info
                deg_per_rad = 180.0/math.pi           # use to conv azimuth to deg
                pass_duration = timedelta(set_time-rise_time)  # fraction of a day

                if set_time > rise_time:  # only update if set time > rise time
                    ground_station.date = set_time   # new obs time = prev set time

                pass_data = {
                    'start' : rise_time.datetime().ctime(),
                    'end' : set_time.datetime().ctime(),
                    'duration' : str(pass_duration),
                    'rise_az' : (rise_az*deg_per_rad),
                    'set_az' : (set_az*deg_per_rad)
                }

                # increase time by 1 min and look for next pass
                ground_station.date = ground_station.date + ephem.minute
        except ValueError:
            # No (more) visible passes
            pass
        return pass_data

    if num_passes is None and duration is None:
        # if neither are specified, get passes for the next 24 hours
        try:
            end_time = ephem.date(ground_station.date+1)
            while (ground_station.date <= end_time):
                sat.compute(ground_station)  # compute all body attributes for sat
                # next pass command yields array with [0]=rise time,
                # [1]=rise azimuth, [2]=max alt time, [3]=max alt,
                # [4]=set time, [5]=set azimuth
                info = ground_station.next_pass(sat)
                rise_time, rise_az, max_alt_time, max_alt, set_time, set_az = info
                deg_per_rad = 180.0/math.pi           # use to conv azimuth to deg
                pass_duration = timedelta(set_time-rise_time)  # fraction of a day

                if set_time > rise_time:  # only update if set time > rise time
                    ground_station.date = set_time   # new obs time = prev set time

                pass_data = {
                    'start' : rise_time.datetime().ctime(),
                    'end' : set_time.datetime().ctime(),
                    'duration' : str(pass_duration),
                    'rise_az' : (rise_az*deg_per_rad),
                    'set_az' : (set_az*deg_per_rad)
                }

                # increase time by 1 min and look for next pass
                ground_station.date = ground_station.date + ephem.minute
        except ValueError:
            # No (more) visible passes
            pass
        return pass_data

In [98]:
import requests

In [99]:
# itertools has lots of things that deal with looping
# "generators" and "iterators" are really nice concepts that
#can be used in place of most usage of using indexes in a loop
#because usually we aren't actually interested in counting the lines
from itertools import islice
data = []
with open('amateur.txt') as f:
    #we don't know we've reached the end of the file
    #until we actually reached it
    while True:
        #an iterator that returns the next N lines and stops
        tripleline = islice(f, 3)
        #loop over these N lines, removing trailing spaces and \n
        # this is called a "list comprehension"
        # it is pretty much exactly the same as
        #    tle = []
        #    for line in tripleline:
        #      tle.append(x.rstrip())
        #
        tle = [x.rstrip() for x in tripleline]
        
        #only accept complete data
        #the end of the file *should* have len(tle)==0 but
        #this also handles extra junk at the end
        if len(tle) == 3:
            data.append(tle)
        else:
            break

# now, data is a list of 3-element lists of strings

In [100]:
# get NORAD ID for each sat
print(data[0][2][2:7])
print(data[1][2][2:7])


07530
14781

In [103]:
vu = ['Valparaiso University', '41.4639', '-87.0439', 245.089]
start_time = '2017/6/8 12:00:00'
num_passes = 2
duration = None
vu_passes = {}
i = 0

for tle in data:
    # use NORAD ID as key for each satellite
    # value is list of passes, where each pass is a dictionary of data
    vu_passes[data[i][2][2:7]] = get_passes(vu, tle, start_time, num_passes=num_passes, duration=duration)
    i = i + 1

print(vu_passes['25544'])


[{'rise_az': 190.456669458409, 'end': 'Thu Jun  8 19:35:05 2017', 'duration': '0:09:29.955764', 'set_az': 70.48850846101539, 'start': 'Thu Jun  8 19:25:35 2017'}, {'rise_az': 238.95741928294103, 'end': 'Thu Jun  8 21:11:59 2017', 'duration': '0:11:03.015994', 'set_az': 53.80764288509183, 'start': 'Thu Jun  8 21:00:56 2017'}]

In [104]:
import pprint
pprint.pprint(vu_passes)


{'07530': [{'duration': '0:12:41.902490',
            'end': 'Thu Jun  8 13:18:54 2017',
            'rise_az': 3.1217117066147058,
            'set_az': 291.59949038617015,
            'start': 'Thu Jun  8 13:06:12 2017'},
           {'duration': '0:09:47.030825',
            'end': 'Thu Jun  8 16:52:59 2017',
            'rise_az': 53.02774114980851,
            'set_az': 358.85267484113393,
            'start': 'Thu Jun  8 16:43:12 2017'}],
 '14781': [{'duration': '0:10:19.870162',
            'end': 'Thu Jun  8 13:26:56 2017',
            'rise_az': 36.77677451043472,
            'set_az': 140.19885346989122,
            'start': 'Thu Jun  8 13:16:36 2017'},
           {'duration': '0:13:17.266591',
            'end': 'Thu Jun  8 15:05:01 2017',
            'rise_az': 9.724222283617193,
            'set_az': 199.13856389354723,
            'start': 'Thu Jun  8 14:51:43 2017'}],
 '20442': [{'duration': '0:11:54.066656',
            'end': 'Thu Jun  8 16:59:57 2017',
            'rise_az': 110.20534131477669,
            'set_az': 6.351135496440512,
            'start': 'Thu Jun  8 16:48:03 2017'},
           {'duration': '0:15:20.139036',
            'end': 'Thu Jun  8 18:40:13 2017',
            'rise_az': 163.9019321541533,
            'set_az': 347.38276548868816,
            'start': 'Thu Jun  8 18:24:52 2017'}],
 '22825': [{'duration': '0:02:11.555872',
            'end': 'Thu Jun  8 17:43:06 2017',
            'rise_az': 52.322442155734656,
            'set_az': 35.297270158845336,
            'start': 'Thu Jun  8 17:40:55 2017'},
           {'duration': '0:13:43.316530',
            'end': 'Thu Jun  8 19:26:29 2017',
            'rise_az': 127.92059122917449,
            'set_az': 359.39693163495724,
            'start': 'Thu Jun  8 19:12:46 2017'}],
 '22826': [{'duration': '0:06:00.749283',
            'end': 'Thu Jun  8 12:08:08 2017',
            'rise_az': 336.84520427870586,
            'set_az': 289.4570786095906,
            'start': 'Thu Jun  8 12:02:07 2017'},
           {'duration': '0:10:09.901994',
            'end': 'Thu Jun  8 18:32:55 2017',
            'rise_az': 96.16973970250737,
            'set_az': 11.076521192104263,
            'start': 'Thu Jun  8 18:22:46 2017'}],
 '23439': [{'duration': '0:29:46.096932',
            'end': 'Thu Jun  8 12:30:08 2017',
            'rise_az': 317.79375762678933,
            'set_az': 102.70395628521595,
            'start': 'Thu Jun  8 12:00:22 2017'},
           {'duration': '0:31:00.346292',
            'end': 'Thu Jun  8 14:45:02 2017',
            'rise_az': 325.47099953691037,
            'set_az': 149.29357819884336,
            'start': 'Thu Jun  8 14:14:02 2017'}],
 '24278': [{'duration': '0:08:34.536012',
            'end': 'Thu Jun  8 12:38:13 2017',
            'rise_az': 76.87955744853134,
            'set_az': 12.92690054675711,
            'start': 'Thu Jun  8 12:29:39 2017'},
           {'duration': '0:15:34.505811',
            'end': 'Thu Jun  8 14:25:11 2017',
            'rise_az': 139.80665034737075,
            'set_az': 354.2119437907038,
            'start': 'Thu Jun  8 14:09:36 2017'}],
 '25397': [{'duration': '0:09:47.482896',
            'end': 'Thu Jun  8 16:54:07 2017',
            'rise_az': 92.33654191764784,
            'set_az': 12.637146846692245,
            'start': 'Thu Jun  8 16:44:19 2017'},
           {'duration': '0:15:17.933686',
            'end': 'Thu Jun  8 18:35:35 2017',
            'rise_az': 149.4349904354193,
            'set_az': 352.3166482582953,
            'start': 'Thu Jun  8 18:20:17 2017'}],
 '25544': [{'duration': '0:09:29.955764',
            'end': 'Thu Jun  8 19:35:05 2017',
            'rise_az': 190.456669458409,
            'set_az': 70.48850846101539,
            'start': 'Thu Jun  8 19:25:35 2017'},
           {'duration': '0:11:03.015994',
            'end': 'Thu Jun  8 21:11:59 2017',
            'rise_az': 238.95741928294103,
            'set_az': 53.80764288509183,
            'start': 'Thu Jun  8 21:00:56 2017'}],
 '26931': [{'duration': '0:04:04.588914',
            'end': 'Thu Jun  8 19:06:29 2017',
            'rise_az': 109.38517219924155,
            'set_az': 78.73860516701458,
            'start': 'Thu Jun  8 19:02:24 2017'},
           {'duration': '0:15:13.172707',
            'end': 'Thu Jun  8 20:53:55 2017',
            'rise_az': 183.11539089318254,
            'set_az': 37.931551178314194,
            'start': 'Thu Jun  8 20:38:42 2017'}],
 '27607': [{'duration': '0:10:28.849158',
            'end': 'Thu Jun  8 22:44:40 2017',
            'rise_az': 155.95612720586732,
            'set_az': 57.29577951308232,
            'start': 'Thu Jun  8 22:34:12 2017'},
           {'duration': '0:14:00.351273',
            'end': 'Fri Jun  9 00:26:10 2017',
            'rise_az': 211.5428021433157,
            'set_az': 33.71264236574028,
            'start': 'Fri Jun  9 00:12:10 2017'}],
 '27844': [{'duration': '0:15:44.640535',
            'end': 'Thu Jun  8 12:33:52 2017',
            'rise_az': 12.871590528631994,
            'set_az': 195.95166592871098,
            'start': 'Thu Jun  8 12:18:07 2017'},
           {'duration': '0:12:22.125564',
            'end': 'Thu Jun  8 14:11:27 2017',
            'rise_az': 354.75368707491253,
            'set_az': 249.0563457444251,
            'start': 'Thu Jun  8 13:59:05 2017'}],
 '27848': [{'duration': '0:15:45.189901',
            'end': 'Thu Jun  8 12:30:13 2017',
            'rise_az': 13.728191019426328,
            'set_az': 193.57474643716822,
            'start': 'Thu Jun  8 12:14:28 2017'},
           {'duration': '0:12:41.179203',
            'end': 'Thu Jun  8 14:08:03 2017',
            'rise_az': 355.75135914659796,
            'set_az': 246.3048450184205,
            'start': 'Thu Jun  8 13:55:21 2017'}],
 '27939': [{'duration': '0:03:06.059739',
            'end': 'Thu Jun  8 19:11:38 2017',
            'rise_az': 67.22686090590253,
            'set_az': 93.63752219980601,
            'start': 'Thu Jun  8 19:08:32 2017'},
           {'duration': '0:13:35.659014',
            'end': 'Thu Jun  8 20:55:13 2017',
            'rise_az': 20.598907970652995,
            'set_az': 173.50431752335578,
            'start': 'Thu Jun  8 20:41:37 2017'}],
 '28895': [{'duration': '0:07:09.649754',
            'end': 'Thu Jun  8 20:39:20 2017',
            'rise_az': 51.350618934963144,
            'set_az': 114.79844545612433,
            'start': 'Thu Jun  8 20:32:10 2017'},
           {'duration': '0:13:50.469079',
            'end': 'Thu Jun  8 22:20:59 2017',
            'rise_az': 16.94637893462405,
            'set_az': 181.96608862192284,
            'start': 'Thu Jun  8 22:07:09 2017'}],
 '32785': [{'duration': '0:12:23.225069',
            'end': 'Thu Jun  8 12:43:48 2017',
            'rise_az': 23.326760874203735,
            'set_az': 167.05926906026173,
            'start': 'Thu Jun  8 12:31:25 2017'},
           {'duration': '0:12:07.689707',
            'end': 'Thu Jun  8 14:19:25 2017',
            'rise_az': 359.7708161901237,
            'set_az': 222.80275148067523,
            'start': 'Thu Jun  8 14:07:18 2017'}],
 '32789': [{'duration': '0:10:43.053257',
            'end': 'Thu Jun  8 14:38:00 2017',
            'rise_az': 31.08127783704702,
            'set_az': 152.83262705690714,
            'start': 'Thu Jun  8 14:27:17 2017'},
           {'duration': '0:12:00.181744',
            'end': 'Thu Jun  8 16:13:35 2017',
            'rise_az': 4.147432163570197,
            'set_az': 211.09231018641833,
            'start': 'Thu Jun  8 16:01:35 2017'}],
 '32791': [{'duration': '0:12:23.584464',
            'end': 'Thu Jun  8 13:05:12 2017',
            'rise_az': 22.349562294555426,
            'set_az': 169.3641710371959,
            'start': 'Thu Jun  8 12:52:48 2017'},
           {'duration': '0:11:51.357091',
            'end': 'Thu Jun  8 14:40:28 2017',
            'rise_az': 358.628262145764,
            'set_az': 225.27965128128866,
            'start': 'Thu Jun  8 14:28:37 2017'}],
 '32953': [{'duration': '0:08:42.094281',
            'end': 'Thu Jun  8 12:57:02 2017',
            'rise_az': 14.471342068106749,
            'set_az': 59.855898338543184,
            'start': 'Thu Jun  8 12:48:20 2017'},
           {'duration': '0:21:42.535794',
            'end': 'Thu Jun  8 15:04:36 2017',
            'rise_az': 358.52397881751625,
            'set_az': 132.2871175051853,
            'start': 'Thu Jun  8 14:42:54 2017'}],
 '33493': [{'duration': '0:07:04.330598',
            'end': 'Thu Jun  8 13:05:10 2017',
            'rise_az': 90.22508455838677,
            'set_az': 21.44223825766364,
            'start': 'Thu Jun  8 12:58:06 2017'},
           {'duration': '0:12:34.552203',
            'end': 'Thu Jun  8 14:42:12 2017',
            'rise_az': 153.10991907683132,
            'set_az': 352.752250402802,
            'start': 'Thu Jun  8 14:29:37 2017'}],
 '33499': [{'duration': '0:11:26.776351',
            'end': 'Thu Jun  8 21:36:09 2017',
            'rise_az': 33.215162122447815,
            'set_az': 149.122058488406,
            'start': 'Thu Jun  8 21:24:42 2017'},
           {'duration': '0:13:28.485152',
            'end': 'Thu Jun  8 23:14:04 2017',
            'rise_az': 8.370123620283826,
            'set_az': 205.5561413357995,
            'start': 'Thu Jun  8 23:00:35 2017'}],
 '35932': [{'duration': '0:02:30.393118',
            'end': 'Thu Jun  8 18:42:26 2017',
            'rise_az': 70.24845463244613,
            'set_az': 90.96888532881198,
            'start': 'Thu Jun  8 18:39:56 2017'},
           {'duration': '0:13:55.346569',
            'end': 'Thu Jun  8 20:27:10 2017',
            'rise_az': 21.798004028509386,
            'set_az': 172.70145610717748,
            'start': 'Thu Jun  8 20:13:14 2017'}],
 '35933': [{'duration': '0:13:01.480360',
            'end': 'Thu Jun  8 20:08:08 2017',
            'rise_az': 27.906086816448173,
            'set_az': 158.87537737788745,
            'start': 'Thu Jun  8 19:55:06 2017'},
           {'duration': '0:14:00.169037',
            'end': 'Thu Jun  8 21:46:34 2017',
            'rise_az': 6.197741827399897,
            'set_az': 212.8540755205531,
            'start': 'Thu Jun  8 21:32:34 2017'}],
 '35935': [{'duration': '0:11:30.662899',
            'end': 'Thu Jun  8 19:43:37 2017',
            'rise_az': 35.52310011846805,
            'set_az': 143.10691579205087,
            'start': 'Thu Jun  8 19:32:07 2017'},
           {'duration': '0:14:24.941921',
            'end': 'Thu Jun  8 21:23:25 2017',
            'rise_az': 11.12111720474257,
            'set_az': 199.72188936942302,
            'start': 'Thu Jun  8 21:09:00 2017'}],
 '36122': [{'duration': '0:19:52.724334',
            'end': 'Thu Jun  8 13:25:54 2017',
            'rise_az': 17.60486381212664,
            'set_az': 186.8836472394136,
            'start': 'Thu Jun  8 13:06:02 2017'},
           {'duration': '0:17:57.895363',
            'end': 'Thu Jun  8 15:12:11 2017',
            'rise_az': 5.873436761644875,
            'set_az': 235.4159661982894,
            'start': 'Thu Jun  8 14:54:13 2017'}],
 '36799': [{'duration': '0:10:54.657845',
            'end': 'Thu Jun  8 18:45:32 2017',
            'rise_az': 33.83690399731032,
            'set_az': 148.00306859668282,
            'start': 'Thu Jun  8 18:34:37 2017'},
           {'duration': '0:12:57.477054',
            'end': 'Thu Jun  8 20:22:29 2017',
            'rise_az': 7.770117114907594,
            'set_az': 205.42650434535267,
            'start': 'Thu Jun  8 20:09:32 2017'}],
 '37839': [{'duration': '0:03:36.900407',
            'end': 'Fri Jun  9 00:27:03 2017',
            'rise_az': 173.59974892643922,
            'set_az': 148.2754155596479,
            'start': 'Fri Jun  9 00:23:26 2017'},
           {'duration': '0:10:18.542401',
            'end': 'Fri Jun  9 02:18:16 2017',
            'rise_az': 208.39959006841084,
            'set_az': 132.0922385477865,
            'start': 'Fri Jun  9 02:07:58 2017'}],
 '37841': [{'duration': '0:05:48.162799',
            'end': 'Fri Jun  9 03:24:27 2017',
            'rise_az': 182.05328281686724,
            'set_az': 141.35021845828027,
            'start': 'Fri Jun  9 03:18:39 2017'},
           {'duration': '0:10:55.932938',
            'end': 'Fri Jun  9 05:15:03 2017',
            'rise_az': 211.54588938882054,
            'set_az': 131.12366308196533,
            'start': 'Fri Jun  9 05:04:07 2017'}],
 '37855': [{'duration': '0:11:18.771790',
            'end': 'Thu Jun  8 13:17:05 2017',
            'rise_az': 141.864722948079,
            'set_az': 351.84637607356154,
            'start': 'Thu Jun  8 13:05:46 2017'},
           {'duration': '0:10:24.155485',
            'end': 'Thu Jun  8 14:51:12 2017',
            'rise_az': 198.40397704831238,
            'set_az': 322.7045270362451,
            'start': 'Thu Jun  8 14:40:48 2017'}],
 '38340': [{'duration': '-1 day, 22:36:14.335803',
            'end': 'Thu Jun  8 12:06:45 2017',
            'rise_az': 350.8512448322474,
            'set_az': 193.7538203368276,
            'start': 'Thu Jun  8 13:30:31 2017'},
           {'duration': '-1 day, 22:36:14.331402',
            'end': 'Thu Jun  8 12:06:45 2017',
            'rise_az': 350.8511628699774,
            'set_az': 193.75380667644927,
            'start': 'Thu Jun  8 13:30:31 2017'}],
 '39090': [{'duration': '0:15:10.595019',
            'end': 'Thu Jun  8 12:41:16 2017',
            'rise_az': 166.73379688593226,
            'set_az': 346.3959943989181,
            'start': 'Thu Jun  8 12:26:05 2017'},
           {'duration': '0:11:08.493222',
            'end': 'Thu Jun  8 14:19:09 2017',
            'rise_az': 224.58730232588115,
            'set_az': 321.35296920328295,
            'start': 'Thu Jun  8 14:08:01 2017'}],
 '39134': [{'duration': '0:05:53.858509',
            'end': 'Thu Jun  8 12:59:10 2017',
            'rise_az': 351.8593261122279,
            'set_az': 48.030945507756435,
            'start': 'Thu Jun  8 12:53:16 2017'},
           {'duration': '0:11:13.377261',
            'end': 'Thu Jun  8 14:41:11 2017',
            'rise_az': 339.74013897728076,
            'set_az': 104.94794663513194,
            'start': 'Thu Jun  8 14:29:58 2017'}],
 '39136': [{'duration': '0:03:57.366313',
            'end': 'Thu Jun  8 13:10:16 2017',
            'rise_az': 354.30294923120505,
            'set_az': 30.960998205763094,
            'start': 'Thu Jun  8 13:06:19 2017'},
           {'duration': '0:10:09.778423',
            'end': 'Thu Jun  8 14:53:19 2017',
            'rise_az': 343.284269496087,
            'set_az': 89.33099913565376,
            'start': 'Thu Jun  8 14:43:09 2017'}],
 '39153': [{'duration': '0:07:24.944670',
            'end': 'Thu Jun  8 16:06:02 2017',
            'rise_az': 50.24115374203754,
            'set_az': 119.34933219821212,
            'start': 'Thu Jun  8 15:58:37 2017'},
           {'duration': '0:13:18.222209',
            'end': 'Thu Jun  8 17:46:05 2017',
            'rise_az': 16.022184330482332,
            'set_az': 185.30932961686068,
            'start': 'Thu Jun  8 17:32:46 2017'}],
 '39417': [{'duration': '0:09:34.413348',
            'end': 'Thu Jun  8 12:57:31 2017',
            'rise_az': 41.26832398410803,
            'set_az': 130.15910376737614,
            'start': 'Thu Jun  8 12:47:56 2017'},
           {'duration': '0:13:53.786441',
            'end': 'Thu Jun  8 14:36:38 2017',
            'rise_az': 12.97592849839311,
            'set_az': 190.7613778576616,
            'start': 'Thu Jun  8 14:22:44 2017'}],
 '39427': [{'duration': '0:14:01.298507',
            'end': 'Thu Jun  8 13:28:04 2017',
            'rise_az': 4.848551081872006,
            'set_az': 211.22321759205082,
            'start': 'Thu Jun  8 13:14:03 2017'},
           {'duration': '0:07:44.020012',
            'end': 'Thu Jun  8 15:00:49 2017',
            'rise_az': 338.57829647870494,
            'set_az': 271.51452682980397,
            'start': 'Thu Jun  8 14:53:05 2017'}],
 '39430': [{'duration': '0:10:13.096647',
            'end': 'Thu Jun  8 13:24:08 2017',
            'rise_az': 347.9520754163871,
            'set_az': 249.02987193120214,
            'start': 'Thu Jun  8 13:13:55 2017'},
           {'duration': '0:09:08.404735',
            'end': 'Thu Jun  8 21:14:59 2017',
            'rise_az': 105.68607151835688,
            'set_az': 14.613082153762853,
            'start': 'Thu Jun  8 21:05:50 2017'}],
 '39433': [{'duration': '0:11:55.706076',
            'end': 'Thu Jun  8 15:07:03 2017',
            'rise_az': 26.76462389480835,
            'set_az': 159.79836816118797,
            'start': 'Thu Jun  8 14:55:07 2017'},
           {'duration': '0:12:30.974167',
            'end': 'Thu Jun  8 16:43:00 2017',
            'rise_az': 2.7964062315896885,
            'set_az': 216.02743605045438,
            'start': 'Thu Jun  8 16:30:29 2017'}],
 '39436': [{'duration': '0:10:27.790815',
            'end': 'Thu Jun  8 18:11:25 2017',
            'rise_az': 25.22257208589457,
            'set_az': 167.0316204545015,
            'start': 'Thu Jun  8 18:00:57 2017'},
           {'duration': '0:09:59.265434',
            'end': 'Thu Jun  8 19:43:52 2017',
            'rise_az': 356.1855406117573,
            'set_az': 227.0818513353099,
            'start': 'Thu Jun  8 19:33:53 2017'}],
 '39440': [{'duration': '0:12:03.407973',
            'end': 'Thu Jun  8 12:38:42 2017',
            'rise_az': 31.620405158803635,
            'set_az': 148.14771834292534,
            'start': 'Thu Jun  8 12:26:39 2017'},
           {'duration': '0:14:10.349119',
            'end': 'Thu Jun  8 14:16:45 2017',
            'rise_az': 8.100109166920296,
            'set_az': 203.27789075700676,
            'start': 'Thu Jun  8 14:02:34 2017'}],
 '39444': [{'duration': '0:04:44.188984',
            'end': 'Thu Jun  8 12:31:49 2017',
            'rise_az': 60.287928294113996,
            'set_az': 101.41421849443161,
            'start': 'Thu Jun  8 12:27:05 2017'},
           {'duration': '0:13:32.088522',
            'end': 'Thu Jun  8 14:13:31 2017',
            'rise_az': 19.216875541161567,
            'set_az': 175.52696876302835,
            'start': 'Thu Jun  8 13:59:59 2017'}],
 '39446': [{'duration': '0:07:22.522192',
            'end': 'Thu Jun  8 12:15:33 2017',
            'rise_az': 50.45400975733182,
            'set_az': 114.98633029981305,
            'start': 'Thu Jun  8 12:08:11 2017'},
           {'duration': '0:13:58.960247',
            'end': 'Thu Jun  8 13:56:15 2017',
            'rise_az': 16.88633474163047,
            'set_az': 181.03029806411774,
            'start': 'Thu Jun  8 13:42:16 2017'}],
 '39770': [{'duration': '0:10:23.551151',
            'end': 'Thu Jun  8 17:02:59 2017',
            'rise_az': 36.66842038944164,
            'set_az': 141.60446541994483,
            'start': 'Thu Jun  8 16:52:35 2017'},
           {'duration': '0:13:12.317129',
            'end': 'Thu Jun  8 18:40:44 2017',
            'rise_az': 9.605312105261858,
            'set_az': 200.1729414018323,
            'start': 'Thu Jun  8 18:27:32 2017'}],
 '40012': [{'duration': '0:12:20.244452',
            'end': 'Thu Jun  8 14:13:07 2017',
            'rise_az': 131.88263370253713,
            'set_az': 0.9968975922665665,
            'start': 'Thu Jun  8 14:00:47 2017'},
           {'duration': '0:13:10.392946',
            'end': 'Thu Jun  8 15:50:03 2017',
            'rise_az': 187.00358536123903,
            'set_az': 339.361582572722,
            'start': 'Thu Jun  8 15:36:52 2017'}],
 '40021': [{'duration': '0:09:28.222101',
            'end': 'Thu Jun  8 15:31:51 2017',
            'rise_az': 107.28329759538602,
            'set_az': 12.464829711669287,
            'start': 'Thu Jun  8 15:22:23 2017'},
           {'duration': '0:13:00.959471',
            'end': 'Thu Jun  8 17:08:35 2017',
            'rise_az': 165.47558041816754,
            'set_az': 347.9784945880967,
            'start': 'Thu Jun  8 16:55:34 2017'}],
 '40025': [{'duration': '0:06:15.212719',
            'end': 'Thu Jun  8 14:52:26 2017',
            'rise_az': 83.2048248841509,
            'set_az': 24.762051703748337,
            'start': 'Thu Jun  8 14:46:11 2017'},
           {'duration': '0:12:42.143660',
            'end': 'Thu Jun  8 16:30:17 2017',
            'rise_az': 148.29396635343366,
            'set_az': 355.03246807607576,
            'start': 'Thu Jun  8 16:17:35 2017'}],
 '40300': [{'duration': '0:10:44.566027',
            'end': 'Thu Jun  8 16:20:22 2017',
            'rise_az': 26.625680771617365,
            'set_az': 162.16818425599394,
            'start': 'Thu Jun  8 16:09:37 2017'},
           {'duration': '0:10:50.315490',
            'end': 'Thu Jun  8 17:54:11 2017',
            'rise_az': 358.89259046664347,
            'set_az': 221.1248472091699,
            'start': 'Thu Jun  8 17:43:21 2017'}],
 '40900': [{'duration': '-1 day, 22:37:10.832276',
            'end': 'Thu Jun  8 12:11:32 2017',
            'rise_az': 347.59870874948734,
            'set_az': 186.9450779608087,
            'start': 'Thu Jun  8 13:34:21 2017'},
           {'duration': '-1 day, 22:37:10.832100',
            'end': 'Thu Jun  8 12:11:32 2017',
            'rise_az': 347.598736070244,
            'set_az': 186.9450779608087,
            'start': 'Thu Jun  8 13:34:21 2017'}],
 '40901': [{'duration': '0:10:52.042873',
            'end': 'Thu Jun  8 13:14:48 2017',
            'rise_az': 356.6121542273163,
            'set_az': 227.54405023644466,
            'start': 'Thu Jun  8 13:03:56 2017'},
           {'duration': '0:10:25.490901',
            'end': 'Thu Jun  8 22:21:12 2017',
            'rise_az': 125.96939742859861,
            'set_az': 6.318460298337994,
            'start': 'Thu Jun  8 22:10:46 2017'}],
 '40902': [{'duration': '0:10:58.730243',
            'end': 'Thu Jun  8 13:07:00 2017',
            'rise_az': 357.341591109917,
            'set_az': 225.86226641749076,
            'start': 'Thu Jun  8 12:56:01 2017'},
           {'duration': '0:10:17.572220',
            'end': 'Thu Jun  8 22:13:20 2017',
            'rise_az': 124.25765639994503,
            'set_az': 7.123622634492961,
            'start': 'Thu Jun  8 22:03:02 2017'}],
 '40903': [{'duration': '0:11:14.696112',
            'end': 'Thu Jun  8 13:34:55 2017',
            'rise_az': 10.761988419504238,
            'set_az': 195.15866730569417,
            'start': 'Thu Jun  8 13:23:40 2017'},
           {'duration': '0:07:10.364950',
            'end': 'Thu Jun  8 15:04:55 2017',
            'rise_az': 339.41253578393025,
            'set_az': 259.10246118324665,
            'start': 'Thu Jun  8 14:57:45 2017'}],
 '40904': [{'duration': '0:11:45.291983',
            'end': 'Thu Jun  8 12:44:29 2017',
            'rise_az': 3.3993565484981967,
            'set_az': 212.23471396661634,
            'start': 'Thu Jun  8 12:32:43 2017'},
           {'duration': '0:04:30.564131',
            'end': 'Thu Jun  8 14:13:56 2017',
            'rise_az': 327.4266193000684,
            'set_az': 282.96468327517,
            'start': 'Thu Jun  8 14:09:25 2017'}],
 '40905': [{'duration': '-1 day, 22:36:54.950379',
            'end': 'Thu Jun  8 12:03:53 2017',
            'rise_az': 346.0785545270526,
            'set_az': 190.68124607831902,
            'start': 'Thu Jun  8 13:26:58 2017'},
           {'duration': '-1 day, 22:36:54.956677',
            'end': 'Thu Jun  8 12:03:53 2017',
            'rise_az': 346.0785818478093,
            'set_az': 190.6813007198324,
            'start': 'Thu Jun  8 13:26:58 2017'}],
 '40906': [{'duration': '0:10:50.450315',
            'end': 'Thu Jun  8 13:09:23 2017',
            'rise_az': 356.20671419818433,
            'set_az': 228.59539393462802,
            'start': 'Thu Jun  8 12:58:33 2017'},
           {'duration': '0:10:38.469803',
            'end': 'Thu Jun  8 22:16:29 2017',
            'rise_az': 127.71355453505306,
            'set_az': 5.449879655739459,
            'start': 'Thu Jun  8 22:05:51 2017'}],
 '40907': [{'duration': '0:11:36.816172',
            'end': 'Thu Jun  8 12:47:05 2017',
            'rise_az': 2.2142438088635257,
            'set_az': 214.91591838568317,
            'start': 'Thu Jun  8 12:35:29 2017'},
           {'duration': '0:03:24.692874',
            'end': 'Thu Jun  8 14:16:00 2017',
            'rise_az': 322.7843036457508,
            'set_az': 289.39292947290585,
            'start': 'Thu Jun  8 14:12:35 2017'}],
 '40908': [{'duration': '0:12:00.605436',
            'end': 'Thu Jun  8 12:30:45 2017',
            'rise_az': 6.434553877434348,
            'set_az': 205.33196086686135,
            'start': 'Thu Jun  8 12:18:44 2017'},
           {'duration': '0:06:25.586820',
            'end': 'Thu Jun  8 14:01:17 2017',
            'rise_az': 335.40179406178544,
            'set_az': 270.5636278935548,
            'start': 'Thu Jun  8 13:54:51 2017'}],
 '40910': [{'duration': '0:11:20.576790',
            'end': 'Thu Jun  8 12:57:16 2017',
            'rise_az': 0.09958625918236848,
            'set_az': 219.70689993747527,
            'start': 'Thu Jun  8 12:45:56 2017'},
           {'duration': '0:09:46.035995',
            'end': 'Thu Jun  8 22:03:23 2017',
            'rise_az': 117.89290364073364,
            'set_az': 10.040092919520896,
            'start': 'Thu Jun  8 21:53:37 2017'}],
 '40911': [{'duration': '0:11:24.599798',
            'end': 'Thu Jun  8 12:55:21 2017',
            'rise_az': 0.36635312434822176,
            'set_az': 219.162725105922,
            'start': 'Thu Jun  8 12:43:56 2017'},
           {'duration': '0:09:46.136700',
            'end': 'Thu Jun  8 22:01:45 2017',
            'rise_az': 117.65671569923458,
            'set_az': 10.100522164428938,
            'start': 'Thu Jun  8 21:51:59 2017'}],
 '40912': [{'duration': '0:11:49.478700',
            'end': 'Thu Jun  8 12:40:33 2017',
            'rise_az': 6.540271118520981,
            'set_az': 204.89678219408316,
            'start': 'Thu Jun  8 12:28:44 2017'},
           {'duration': '0:06:15.246927',
            'end': 'Thu Jun  8 14:10:50 2017',
            'rise_az': 334.76642254443414,
            'set_az': 270.7296014903861,
            'start': 'Thu Jun  8 14:04:35 2017'}],
 '40926': [{'duration': '0:10:38.421291',
            'end': 'Thu Jun  8 13:59:40 2017',
            'rise_az': 20.168131354794877,
            'set_az': 175.11320956348732,
            'start': 'Thu Jun  8 13:49:01 2017'},
           {'duration': '0:09:07.011948',
            'end': 'Thu Jun  8 15:31:08 2017',
            'rise_az': 350.54915922563606,
            'set_az': 236.34041864207228,
            'start': 'Thu Jun  8 15:22:01 2017'}],
 '40927': [{'duration': '0:10:40.664778',
            'end': 'Thu Jun  8 13:58:29 2017',
            'rise_az': 20.540699390998853,
            'set_az': 174.32626248807512,
            'start': 'Thu Jun  8 13:47:48 2017'},
           {'duration': '0:09:15.683425',
            'end': 'Thu Jun  8 15:30:04 2017',
            'rise_az': 351.19813647981397,
            'set_az': 235.2706744142649,
            'start': 'Thu Jun  8 15:20:49 2017'}],
 '40928': [{'duration': '0:10:44.105526',
            'end': 'Thu Jun  8 13:35:51 2017',
            'rise_az': 22.82034332838231,
            'set_az': 169.41203700289932,
            'start': 'Thu Jun  8 13:25:07 2017'},
           {'duration': '0:09:55.711118',
            'end': 'Thu Jun  8 15:08:11 2017',
            'rise_az': 354.38786214296664,
            'set_az': 229.37433602833298,
            'start': 'Thu Jun  8 14:58:15 2017'}],
 '40931': [],
 '40958': [{'duration': '0:11:29.842508',
            'end': 'Thu Jun  8 15:37:33 2017',
            'rise_az': 32.38375393063343,
            'set_az': 149.47313021174466,
            'start': 'Thu Jun  8 15:26:03 2017'},
           {'duration': '0:13:25.265091',
            'end': 'Thu Jun  8 17:15:34 2017',
            'rise_az': 7.532723645020045,
            'set_az': 205.95095359058294,
            'start': 'Thu Jun  8 17:02:09 2017'}],
 '41338': [{'duration': '0:09:44.240294',
            'end': 'Fri Jun  9 02:43:13 2017',
            'rise_az': 204.2341035804302,
            'set_az': 109.7522129048597,
            'start': 'Fri Jun  9 02:33:29 2017'},
           {'duration': '0:11:52.523593',
            'end': 'Fri Jun  9 04:25:09 2017',
            'rise_az': 232.53482848183796,
            'set_az': 107.97568753192856,
            'start': 'Fri Jun  9 04:13:17 2017'}],
 '41339': [{'duration': '0:09:36.051474',
            'end': 'Fri Jun  9 02:37:04 2017',
            'rise_az': 203.17015135303896,
            'set_az': 110.1279416111021,
            'start': 'Fri Jun  9 02:27:28 2017'},
           {'duration': '0:11:49.366849',
            'end': 'Fri Jun  9 04:19:01 2017',
            'rise_az': 231.8916159073195,
            'set_az': 107.83869442774561,
            'start': 'Fri Jun  9 04:07:12 2017'}],
 '41458': [{'duration': '0:12:43.056812',
            'end': 'Thu Jun  8 13:18:39 2017',
            'rise_az': 27.76133974000997,
            'set_az': 158.865596546996,
            'start': 'Thu Jun  8 13:05:56 2017'},
           {'duration': '0:13:38.556795',
            'end': 'Thu Jun  8 14:54:03 2017',
            'rise_az': 5.5904966021639195,
            'set_az': 212.30804287754557,
            'start': 'Thu Jun  8 14:40:24 2017'}],
 '41459': [{'duration': '0:05:18.254006',
            'end': 'Thu Jun  8 12:07:45 2017',
            'rise_az': 59.36648113356592,
            'set_az': 104.76151662173645,
            'start': 'Thu Jun  8 12:02:27 2017'},
           {'duration': '0:13:42.409572',
            'end': 'Thu Jun  8 13:47:47 2017',
            'rise_az': 20.225002924918986,
            'set_az': 175.8207351992306,
            'start': 'Thu Jun  8 13:34:05 2017'}],
 '41460': [{'duration': '0:05:55.084461',
            'end': 'Thu Jun  8 12:11:44 2017',
            'rise_az': 56.89202312558077,
            'set_az': 108.23081558799605,
            'start': 'Thu Jun  8 12:05:49 2017'},
           {'duration': '0:13:40.426540',
            'end': 'Thu Jun  8 13:51:20 2017',
            'rise_az': 19.49912286332859,
            'set_az': 177.53072769945663,
            'start': 'Thu Jun  8 13:37:40 2017'}],
 '41557': [{'duration': '0:08:27.090395',
            'end': 'Thu Jun  8 15:42:24 2017',
            'rise_az': 41.44975771412567,
            'set_az': 136.25899545095277,
            'start': 'Thu Jun  8 15:33:57 2017'},
           {'duration': '0:11:33.905241',
            'end': 'Thu Jun  8 17:17:47 2017',
            'rise_az': 8.885979633764563,
            'set_az': 199.41192172450948,
            'start': 'Thu Jun  8 17:06:13 2017'}],
 '41619': [{'duration': '0:07:32.824407',
            'end': 'Thu Jun  8 14:23:31 2017',
            'rise_az': 46.411091014007035,
            'set_az': 127.75957634968061,
            'start': 'Thu Jun  8 14:15:58 2017'},
           {'duration': '0:11:45.467977',
            'end': 'Thu Jun  8 15:59:58 2017',
            'rise_az': 11.634829392597569,
            'set_az': 193.46277231591503,
            'start': 'Thu Jun  8 15:48:13 2017'}],
 '41783': [{'duration': '0:03:48.404355',
            'end': 'Thu Jun  8 13:40:59 2017',
            'rise_az': 64.61240109540505,
            'set_az': 97.41402258436527,
            'start': 'Thu Jun  8 13:37:10 2017'},
           {'duration': '0:13:33.612946',
            'end': 'Thu Jun  8 15:24:21 2017',
            'rise_az': 20.296766014981017,
            'set_az': 175.15574798163814,
            'start': 'Thu Jun  8 15:10:48 2017'}],
 '41789': [{'duration': '0:13:18.472224',
            'end': 'Thu Jun  8 15:17:58 2017',
            'rise_az': 22.381143381730272,
            'set_az': 170.41234552760437,
            'start': 'Thu Jun  8 15:04:39 2017'},
           {'duration': '0:12:50.121336',
            'end': 'Thu Jun  8 16:54:54 2017',
            'rise_az': 0.8850034055710078,
            'set_az': 224.74010731799268,
            'start': 'Thu Jun  8 16:42:04 2017'}],
 '42017': [{'duration': '0:06:43.416389',
            'end': 'Thu Jun  8 14:12:52 2017',
            'rise_az': 50.370374090945006,
            'set_az': 121.39239204312469,
            'start': 'Thu Jun  8 14:06:08 2017'},
           {'duration': '0:11:46.273106',
            'end': 'Thu Jun  8 15:49:41 2017',
            'rise_az': 13.466787727058891,
            'set_az': 189.58358003718462,
            'start': 'Thu Jun  8 15:37:54 2017'}]}