このトピックに関する他の質問を見ましたが、私のエラーと一致していないようです。 Google Sheets APIv4
を実行しているとき、私はエラーを取得しています:HttpAccessTokenRefreshError:invalid_grant ... 1時間制限のリフレッシュトークン
raise HttpAccessTokenRefreshError(error_msg, status=resp.status) HttpAccessTokenRefreshError: invalid_grant
エラーこのエラーはのみ時々ポップアップ表示ラインservice.spreadsheets().values().get(spreadsheetId=key, range=ranges).execute()
で発生します。私は何もしないで、もう一度コードを実行してください。これは、再び認証フロープロセスを介して私を取るだろうと私は同じHttpAccessTokenRefreshError: invalid_grant
が再び持ち上がるまで
Authentication successful. Storing credentials to C:\Users\jason\.credentials\sheets.googleapis.com-python-quickstart.json
はその後、私はしばらくの間、任意のコードを実行することができます取得し、私は再び再認証する必要があります。
どうすればよいですか?
developers.google.com/sheets/api/quickstart/pythonのコードを使用しています。
私は
import time
import os
try:
import ntplib
client = ntplib.NTPClient()
response = client.request('pool.ntp.org')
os.system('date ' + time.strftime('%m%d%H%M%Y.%S',time.localtime(response.tx_time)))
except:
print('Could not sync with time server.')
print('Done.')
次が、取得に時間を同期するntp
を使用しようとしました:私は、現在の日付を入力した後
The system cannot accept the date entered.
Enter the new data: (mm-dd-yy)
、何も起こりません。
このページも見てきました。 https://blog.timekit.io/google-oauth-invalid-grant-nightmare-and-how-to-fix-it-9f4efaf1da35#.5utz2vcn6
この問題は、終了するのに1時間を超えるコードを実行した場合にも発生します。リフレッシュトークンで。それはいつも爆弾です。
私はトークンが1時間しか残っておらず、リフレッシュすると常に爆弾だと思っています。私は接続するためのコードを掲載している
:一般的な考え方として
class APIv4:
def __init__(self):
credentials = get_credentials()
http = credentials.authorize(httplib2.Http())
discoveryUrl = ('https://sheets.googleapis.com/$discovery/rest?'
'version=v4')
self.service = discovery.build('sheets', 'v4', http=http,
discoveryServiceUrl=discoveryUrl)
def get_credentials():
"""Gets valid user credentials from storage.
If nothing has been stored, or if the stored credentials are invalid,
the OAuth2 flow is completed to obtain the new credentials.
Returns:
Credentials, the obtained credential.
"""
home_dir = os.path.expanduser('~')
credential_dir = os.path.join(home_dir, '.credentials')
if not os.path.exists(credential_dir):
os.makedirs(credential_dir)
credential_path = os.path.join(credential_dir,
'sheets.googleapis.com-python-quickstart.json')
store = Storage(credential_path)
credentials = store.get()
if not credentials or credentials.invalid:
flow = client.flow_from_clientsecrets(CLIENT_SECRET_FILE, SCOPES)
flow.user_agent = APPLICATION_NAME
if flags:
credentials = tools.run_flow(flow, store, flags)
else: # Needed only for compatibility with Python 2.6
credentials = tools.run(flow, store)
print('Storing credentials to ' + credential_path)
return credentials
OAuthに問題がある場合は、このようにAPIキーを使用してみてください。また、OAuthは[Sheets APIのサポートされている資格情報](https://developers.google.com/sheets/api/guides/authorizing#APIKey)です。 )。 APIキーを取得すると、アプリケーションはクエリパラメータ 'key = yourAPIKey'をすべてのリクエストURLに追加できます。 –
@ Mr.Rebotこれを設定する方法のサンプルコードを教えてください。私はサービスのビルドとそれがGoogleシートAPIv4でどのように動作するのか理解していません。あなたのリンクをたどって私のコンソールから資格情報でAPIキーを取得しました。私のデータが公開されていないため、これが私にとってうまくいくかどうかはわかりません。プライベートユーザデータにはアクセスしないという。 – jason
@ Mr.Rebot "このようにAPIキーを使用してみてください。また、OAuthは両方ともSheets APIによって証明書の種類をサポートしています。正しくないAPIキーは、スプレッドシートが公開されている場合にのみ機能します。 – pinoyyid