Скрипт Python для чтения/записи данных Google Fit через REST API

Недавно я перешел с телефона iOS на Android. Теперь у меня проблема, что все мои данные Apple Health недоступны на моем новом телефоне, потому что Google Fit импортирует только последние 3 дня и всю мою историю. Я экспортировал свои данные Apple Health и преобразовал их в фрейм данных pandas.

Теперь мне нужно записать их в Google Fit, но, к сожалению, у меня нет опыта работы с API. Я уже провел некоторое исследование и нашел здесь пример получения авторизации Google:request-oauthlib.readthedocs.io/en/latest/examples/google.html.

Я попытался настроить его на GoogleFit API.

      # Import Google credentials from *.json file
file_name = 'MY_CREDENTIALS.json'
file = open(file_name) 
data = json.load(file)
data_keys = list(data.keys())
client_data = data[data_keys[0]]

client_id = client_data['client_id']
project_id = client_data['project_id']
auth_uri = client_data['auth_uri']
token_uri = client_data['token_uri']
auth_provider_x509_cert_url = client_data['auth_provider_x509_cert_url']
client_secret = client_data['client_secret']
redirect_uris = client_data['redirect_uris']
javascript_origins = client_data['javascript_origins']

# OAuth endpoints given in the Google API documentation
authorization_base_url = "https://accounts.google.com/o/oauth2/v2/auth"
token_url = "https://www.googleapis.com/oauth2/v4/token"
scope = ["openid",
         "https://www.googleapis.com/auth/fitness"]

google = OAuth2Session(client_id,
                       scope = scope,
                       redirect_uri = redirect_uris)

# Redirect user to Google for authorization
authorization_url, state = google.authorization_url(authorization_base_url,
                                                    access_type = "offline", # offline for refresh token
                                                    prompt = "select_account") # force to always make user click authorize

print('Please go here and authorize:', authorization_url)

# Get the authorization verifier code from the callback url
redirect_response = input('Paste the full redirect URL here: ')

# Fetch the access token
google.fetch_token(token_url, client_secret = client_secret, authorization_response = redirect_response)

# Fetch a protected resource, i.e. user profile
# r = google.get('https://www.googleapis.com/oauth2/v1/userinfo')
# r = google.get('https://www.googleapis.com/auth/fitness.activity.read')
r = google.get('https://www.googleapis.com/fitness/v1/users/me/dataSources/derived:com.google.step_count.delt')
r = google.get('https://www.googleapis.com/fitness/v1/users/userId/dataSources')
print(r.content)

Когда я пытаюсь выполнить, я получаю следующее сообщение об ошибке:

Вы не можете войти в это приложение, потому что оно не соответствует политике Google OAuth 2.0 для обеспечения безопасности приложений.

Вы можете сообщить разработчику приложения, что это приложение не соответствует одному или нескольким правилам проверки Google. Weitere Informationen zu diesem Fehler Wenn Sie Entwickler von writeHealthData sind, finden Sie in den Fehlerdetails weitere Informationen. Фелер 400: invalid_request

Кто-нибудь может помочь мне с авторизацией? У кого-нибудь есть опыт записи данных в Google Fit через REST API?

Заранее спасибо.

Гретц Саймон

1 ответ

Чтобы использовать службы и API Google, вам понадобится экран согласия oAuth для доступа к типам данных, особенно для ограниченных областей. Поэтому без определенного согласия пользователя ему будет выдана упомянутая вами ошибка.

Другие вопросы по тегам