-
Notifications
You must be signed in to change notification settings - Fork 3
/
comcastUsage.py
87 lines (72 loc) · 3.17 KB
/
comcastUsage.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
from __future__ import absolute_import, division, print_function
import os
from xml.etree import ElementTree
from datetime import datetime
import sys
import calendar
import requests
__author__ = 'wtfox'
USERNAME = os.environ.get('COMCAST_USERNAME')
PASSWORD = os.environ.get('COMCAST_PASSWORD')
COMCAST_API_VERSION = 4.1
LOGIN_URL = 'https://umcs.comcast.net/usage_meter/login/uid?callback=?'
USAGE_URL = 'https://umcs.comcast.net/usage_meter/usage/accountCurrent'
def get_usage():
''' A list of items that are accessible:
<Element 'counter_start' at 0x02D0DAE0>
<Element 'counter_end' at 0x02D0DB10>
<Element 'context_code' at 0x02D0DB40>
<Element 'usage_total' at 0x02D0DB70>
<Element 'usage_allowable' at 0x02D0DBA0>
<Element 'usage_remaining' at 0x02D0DBD0>
<Element 'usage_percent' at 0x02D0DC00>
<Element 'usage_uom' at 0x02D0DC30>
<Element 'minutes_since_last_update' at 0x02D0DC90>
<Element 'additional_billable_used' at 0x02D0DCF0>
<Element 'additional_billable_included' at 0x02D0DD50>
<Element 'additional_billable_remaining' at 0x02D0DDB0>
<Element 'additional_billable_percentUsed' at 0x02D0DE10>
<Element 'additional_billable_grace_amount_exceeded' at 0x02D0DE40>
<Element 'additional_billable_units_per_block' at 0x02D0DE70>
<Element 'additional_billable_cost_per_block' at 0x02D0DEA0>
<Element 'additional_billable_blocks_used' at 0x02D0DF00>
'''
if USERNAME is None or PASSWORD is None:
print("Error: Username and Password are required")
sys.exit(1)
login_payload = {
'username': USERNAME,
'password': PASSWORD,
'version': COMCAST_API_VERSION
}
resp = requests.post(LOGIN_URL, data=login_payload)
tree = ElementTree.fromstring(resp.content)
access_token = tree.find('access_token').text
usage_payload = {
'username': USERNAME,
'access_token': access_token,
'version': COMCAST_API_VERSION
}
resp = requests.post(USAGE_URL, data=usage_payload)
tree = ElementTree.fromstring(resp.content)
end_date = tree.find('account').find('counter_end').text
usage_remaining = tree.find('account').find('usage_remaining').text
usage_percent = tree.find('account').find('usage_percent').text
usage_allowable = tree.find('account').find('usage_allowable').text
usage_total = tree.find('account').find('usage_total').text
end_date = datetime.strptime(end_date, "%Y-%m-%dZ").strftime('%m/%d/%y')
now = datetime.now()
days_in_mon = calendar.monthrange(now.year, now.month)[1]
perc = float(now.day) / float(days_in_mon) * 100
print("")
print("Comcast/Xfinity Data Usage for the Month.")
print("-"*80)
print("{:d}% of data used".format(int(float(usage_percent))))
print("{}% through the month.".format(int(perc)))
print("{} GBs remaining until {}.".format(usage_remaining, end_date))
print("{} GBs / {}GBs used.".format(usage_total, usage_allowable))
print("-"*80)
print("")
sys.exit(0)
if __name__ == '__main__':
get_usage()