
Python 3 package to extract google home devices local authentication tokens from google servers.
These local authentication tokens are needed to control Google Home devices
(See @rithvikvibhu's Google Home (2.0) API).
Please note:
Once you have local google authentication tokens they only live about 1 day long.
After that you will need to obtain new ones.
You will probably need to run the script repeatedly storing the tokens somewhere convenient.
Quickstart
Note: the package was written and tested on Python 3.
- Install the python package
pip install glocaltokens
Use in your program as (see examples folder for detailed example):
from glocaltokens.client import GLocalAuthenticationTokens
client = GLocalAuthenticationTokens(
username="<YOUR_GOOGLE_USERNAME>",
password="<YOUR_GOOGLE_PASSWORD>"
)
print("[*] Master token", client.get_master_token())
print("\n[*] Access token (lives 1 hour)", client.get_access_token())
print("\n[*] Google devices local authentication tokens")
google_devices = client.get_google_devices_json()
from glocaltokens.const import GOOGLE_HOME_MODELS
google_devices_select = client.get_google_devices_json(GOOGLE_HOME_MODELS)
google_devices_select_2 = client.get_google_devices_json([
f"Google Home",
f"Google Home Mini",
f"Google Nest Mini",
])
Predefined models list
There are some pre-defined models list in scanner.py
, feel free to
add new lists, or add models to a list with a pull-request.
GOOGLE_HOME_MODELS
:
- Google Home
- Google Home Mini
- Google Nest Mini
- Lenovo Smart Clock
Security Recommendation
Never store the user's password nor username in plain text, if storage is necessary, generate a master token and store it.
Example approach:
from glocaltokens.client import GLocalAuthenticationTokens
client = GLocalAuthenticationTokens(
username="<YOUR_GOOGLE_USERNAME>",
password="<YOUR_GOOGLE_PASSWORD>"
)
master_token = client.get_master_token()
print("[*] Master token", master_token)
"""Now store master_token somewhere"""
Contributing
See Contributing guidelines.
This is an open-source project and all countribution is highly welcomed.
Credits
Much credits go to @rithvikvibhu for doing most of the heavy work like finding a way to
extract master and access tokens
(See his gist here).
Also, thank you very much to the guys at pychromecast
which provided the code required to scan devices in the network.