<p>我还没有对此进行过可靠的测试,但它可以用我的个人帐户测试代码片段。我确信对于企业应用程序,可以和/或应该对其进行更改,例如传递auth'd<code>Http()</code>实例,检测范围更改,等等。在</p>
<p>您可以查看<a href="https://github.com/tehhowch/stack-overflow-snippets/blob/master/sheets-api/sheets_api.py" rel="nofollow noreferrer">my GitHub repo</a>上的完整代码:</p>
<p>要求:</p>
<ul>
<li>googleapi python客户端</li>
<li>谷歌认证</li>
<li>谷歌认证oauthlib</li>
<li>不管上面提到什么</li>
</ul>
<p>我使用<a href="https://google-auth-oauthlib.readthedocs.io/en/latest/reference/google_auth_oauthlib.flow.html" rel="nofollow noreferrer">^{<cd2>}</a>类,通常遵循<a href="https://developers.google.com/api-client-library/python/auth/installed-app" rel="nofollow noreferrer">Google's Python auth guide</a>上的说明。在</p>
<p>代码(Python3.6)</p>
<pre><code># Google API imports
from googleapiclient.discovery import build
from google.oauth2.credentials import Credentials
from google_auth_oauthlib.flow import InstalledAppFlow
SCOPES = ['your scopes', 'here']
def get_saved_credentials(filename='creds.json'):
'''Read in any saved OAuth data/tokens
'''
fileData = {}
try:
with open(filename, 'r') as file:
fileData: dict = json.load(file)
except FileNotFoundError:
return None
if fileData and 'refresh_token' in fileData and 'client_id' in fileData and 'client_secret' in fileData:
return Credentials(**fileData)
return None
def store_creds(credentials, filename='creds.json'):
if not isinstance(credentials, Credentials):
return
fileData = {'refresh_token': credentials.refresh_token,
'token': credentials.token,
'client_id': credentials.client_id,
'client_secret': credentials.client_secret,
'token_uri': credentials.token_uri}
with open(filename, 'w') as file:
json.dump(fileData, file)
print(f'Credentials serialized to {filename}.')
def get_credentials_via_oauth(filename='client_secret.json', scopes=SCOPES, saveData=True) -> Credentials:
'''Use data in the given filename to get oauth data
'''
iaflow: InstalledAppFlow = InstalledAppFlow.from_client_secrets_file(filename, scopes)
iaflow.run_local_server()
if saveData:
store_creds(iaflow.credentials)
return iaflow.credentials
def get_service(credentials, service='sheets', version='v4'):
return build(service, version, credentials=credentials)
</code></pre>
<p>那么用法是:</p>
^{pr2}$