标签: google-api-python-client

ImportError:没有名为apiclient.discovery的模块

我在Google App Engine中遇到此错误的Python使用了Google Translate API,但我不知道如何解决,

<module>
from apiclient.discovery import build
ImportError: No module named apiclient.discovery
Run Code Online (Sandbox Code Playgroud)

我将尝试设置指示Google App Engine SDK的环境,并再次上传到Google Apps Engine,始终收到错误,

错误:服务器错误

服务器遇到错误,无法完成您的请求.如果问题仍然存在,请报告您的问题并提及此错误消息以及导致该问题的查询.

请告诉我如何解决,

谢谢

更新:修复了 遵循Nijjin的帮助,我通过添加以下文件夹修复了问题,

apiclient, gflags, httplib2, oauth2client, uritemplate

python google-app-engine google-api-python-client

137
推荐指数
9
解决办法
14万
查看次数

如何使用Python访问(读取,写入)Google表格电子表格?

我想知道你是否可以给我一个使用python阅读/写入谷歌文档/电子表格的例子.

我确实在这里查看了google docs API https://developers.google.com/google-apps/spreadsheets/但不确定我是否点击了正确的链接.另外一个例子将是非常有帮助的.

我想要做的是查询基于不同列的电子表格,更像是SQL查询,然后使用数据进行下游解析,并将其放入google docs中的另一个电子表格或doc.

最好的,-Abhi

python google-api google-sheets google-api-python-client google-sheets-api

68
推荐指数
6
解决办法
10万
查看次数

ValueError:客户端机密必须用于网络或已安装的应用程序

我在 Python Quickstart下运行 quickstart.py 示例代码,但出现以下错误:

ValueError:客户端机密必须用于 Web 或已安装的应用程序。

我创建了一个credentials.json具有项目所有者权限的文件。

错误发生在以下代码段中:

if os.path.exists('token.pickle'):
    with open('token.pickle', 'rb') as token:
        creds = pickle.load(token)
# If there are no (valid) credentials available, let the user log in.
if not creds or not creds.valid:
    if creds and creds.expired and creds.refresh_token:
        creds.refresh(Request())
    else:
        flow = InstalledAppFlow.from_client_secrets_file('credentials.json', SCOPES)
        creds = flow.run_local_server()
    # Save the credentials for the next run
    with open('token.pickle', 'wb') as token:
        pickle.dump(creds, token)
Run Code Online (Sandbox Code Playgroud)

我还注意到没有创建 token.pickle 文件。这是错误输出:

  File "updateSlidev01.py", line 51, in …
Run Code Online (Sandbox Code Playgroud)

python google-api google-api-python-client

32
推荐指数
2
解决办法
2万
查看次数

有没有办法预先检查或避免 Google Gmail / Google Calendar OAuth 审批流程中的范围复选框?

我们目前用于google-api-python-client处理面向用户的 OAuth 流程。我们有一些用户给我们发电子邮件询问为什么他们的帐户没有成功导入,当我们查看时,他们的令牌没有适当的范围。例如,我们希望找到所有这些范围:

https://www.googleapis.com/auth/gmail.metadata openid https://www.googleapis.com/auth/userinfo.email

但我们只收到最后 2 个。当我们查看 OAuth 流程时,我们注意到我们的 OAuth 流程如下所示(应用程序名称和帐户名称经过编辑)。请注意,请求的范围有一个复选框,并且默认情况下该复选框处于未选中状态(从 2020 年中期到大约一周前,此流程有 2 个额外的确认步骤,但默认情况下选中了最后一个复选框。)

在此输入图像描述

将其与流行应用程序 Fantastical 的 OAuth 流程进行比较(许多其他应用程序,包括 Spark,看起来很相似):

在此输入图像描述

在找到链接到Google 博客上这篇文章的StackOverflow 答案后,似乎有些应用程序已继承到第二个流程,但第一个流程是新的默认流程。两个问题:

  1. 默认情况下未选中的复选框似乎是一个相对较新的更改,我找不到任何有关它的文档。这是新的默认行为,还是 OAuth 流程中是否有一个参数/某些内容我们可以更改以默认检查它?当未选中时,用户认为他们不需要检查它,因此他们按“继续”,然后我们的应用程序必须抛出错误并向用户解释他们需要检查该范围复选框。现在复选框未选中似乎有点疯狂,因为它是我明确要求的范围……这就是此流程的全部要点。

  2. 有没有什么方法可以使我们的流程与 Fantastical、Spark 以及 2018 年左右之前创建的任何其他 OAuth 应用程序仍然具有的旧的、更简单的流程保持一致?或者那些其他旧应用程序是否有过渡到新流程的预计到达时间?上述 Google 博文表示,新流程将“在 2019 年初扩展到现有客户”,因此我们大约晚了 2.5 年才做出这一改变。就目前情况而言,它使“新”OAuth 应用程序(我们的应用程序是在 2019 年创建的,所以算不上新......)处于令人难以置信的劣势,因为它的步骤更多,需要明确同意,更容易出现用户错误,并且使它看起来像我们的应用程序在任何方面都受到较少的审查或“安全”,因为其流程与用户接受的许多其他应用程序的培训流程截然不同。

这个问题已经存在了几个月了,所以也发布这篇文章来帮助处于相同位置的其他人。一些额外的要点,以防对任何人有帮助:

  • 如果我从 Fantastical 流程中获取 client_id 和 redirect_url 并在我们应用程序的链接中使用它,则该流程看起来与他们的相同。所以它似乎是由客户端 ID 驱动的,而不是 URL 或我们流程中发生的某些事情。

  • 我们的应用已通过 Google 的第三方安全评估并通过,因此它可能与我们请求的范围或我们的应用在审批流程中的状态无关

  • 我们的流程和 Fantastical 都发生在 Web 视图中,因此它不太可能与本地与 Web 视图相关 …

google-api google-oauth google-api-python-client google-cloud-platform gmail-api

25
推荐指数
1
解决办法
3739
查看次数

如何在没有gflags的情况下获取Google Analytics凭据 - 使用run_flow()代替?

这可能需要一秒钟来解释所以请耐心等待:

我正在开展一个工作项目,要求我提供谷歌分析数据.我最初是在这个链接之后做的,所以在安装了API客户端pip install --upgrade google-api-python-client并设置了类似的东西后client_secrets.json,它需要安装gflags才能执行run()语句.(即credentials = run(FLOW, storage))

现在,我收到错误消息安装gflags或更好地使用run_flow()(确切的错误消息是这样):

NotImplementedError:必须安装gflags库才能使用tools.run().请安装gflags或最好切换到使用tools.run_flow().

我最初使用gflags(几个月前),但它与我们的框架(金字塔)不兼容,所以我们将其删除,直到我们弄清楚问题是什么.之所以最好从gflags切换到run_flow()因为gflags已被弃用,所以我不想像我一样使用它.我现在要做的就是切换到使用run_flow()

这个问题是run_flow()需要将命令行参数发送给它,而这不是命令行应用程序.我找到了一些有用的文档,但我仍然坚持为run_flow()函数构建标志.

在展示代码之前还有一件事需要解释.

run_flow()有三个参数(文档在这里).它就像流程和存储一样run(),但它也需要一个标志对象.gflags库构建了一个ArgumentParseroauth2client执行方法中使用的标志对象.

一些有助于构建argumentParser对象的其他链接:

第二个链接非常有助于了解它是如何执行的,所以现在当我尝试做类似的事情时,sys.argv拉入我运行aka的虚拟环境的位置pserve并拉入我的.ini文件(它将我的机器的凭据存储到运行虚拟环境).但这引发了一个错误,因为它期待别的东西,这就是我被困住的地方.

  • 我不知道我需要构建什么标志对象来发送 run_flow()
  • 我不知道我需要传递什么argv参数才能使语句flags = parser.parse_args(argv[1:])检索正确的信息(我不知道应该是什么样的正确信息)

码:

CLIENT_SECRETS = client_file.uri
MISSING_CLIENT_SECRETS_MESSAGE = '%s is missing' % CLIENT_SECRETS …
Run Code Online (Sandbox Code Playgroud)

python google-analytics google-analytics-api oauth2client google-api-python-client

24
推荐指数
1
解决办法
4225
查看次数

无法从本地App Engine开发服务器访问BigQuery

这是一个与python Google AppEngine应用程序和Google的BigQuery之间的服务器到服务器授权有关的问题,但可能与其他云服务相关.

tldr; 是否可以让App Engine本地开发服务器使用远程BigQuery服务进行身份验证?更好的是有一个本地BigQuery?

我知道AppAssertionCredentials目前不能在本地开发服务器上运行,尽管这本身就非常令人沮丧.

它适用于标准的Python代码,在本地开发服务器沙箱之外的另一种方法,详细介绍在这里,因为即使PyCrypto启用了沙盒不允许一些POSIX模块如"PWD"不为本地开发服务器工作.

我有AppAssertionCredentials远程服务器,并在上工作SignedJwtAssertionCredentials方法了本机Python工作本地,因此服务帐户设置正确.

导入在try/except块中的oauth2client/crypt.py内失败 - 在将它们注释掉后,很容易看到沙箱白名单异常.

我已经摆弄了添加'pwd'到白名单,然后又出现了另一个问题,所以我匆匆走回那个兔子洞.

我已经尝试将PyCrypto直接包含在项目中并得到类似的结果.

我也试过OpenSSL,结果相似.

我找了一个当地的appengine特定的PyCrypto无济于事,我错过了吗?我应该说这是在Mac OSX上 - 也许我应该启动一个Linux机箱然后放手一搏?

google-app-engine google-bigquery google-oauth google-api-python-client

23
推荐指数
1
解决办法
5407
查看次数

如何使用Python中的API重命名Google表格电子表格中的(工作)表格?

我一直在努力/希望解决这个问题很长一段时间.我已经阅读了gspread的文档,但我发现有一种方法可以重命名工作表.你们任何人都知道怎么做?我会非常欣赏它!确实workheet.title给出了工作表的名称,但我找不到重命名实际工作表的方法.

先感谢您!

python google-api google-sheets google-api-python-client google-sheets-api

21
推荐指数
2
解决办法
5823
查看次数

Google Calendar API v3 - 如何获取刷新令牌(Python)

我正在尝试编写一个Django应用程序,用于在特定的Google日历中创建事件.到目前为止,我已经成功了.只有一点问题:

我不知道如何使用google python客户端获取刷新令牌.

结果是,在我的令牌过期后,应用程序无法运行,我必须创建一个新令牌.如果我理解文档正确,那就是刷新令牌的来源.

访问令牌的生命周期有限,在某些情况下,应用程序需要在单个访问令牌的生命周期之外访问Google API.在这种情况下,您的应用程序可以获得所谓的刷新令牌.刷新令牌允许您的应用程序获取新的访问令牌.

Google文档(请参阅"基本步骤",第4节)

我的代码

import gflags
import httplib2

from apiclient.discovery import build
from oauth2client.file import Storage
from oauth2client.client import OAuth2WebServerFlow
from oauth2client.tools import run

FLAGS = gflags.FLAGS

FLOW = OAuth2WebServerFlow(
    client_id=GOOGLE_API_CLIENT_ID,
    client_secret=GOOGLE_API_CLIENT_SECRET,
    scope=GOOGLE_API_CALENDAR_SCOPE,
    user_agent=GOOGLE_API_USER_AGENT)

storage = Storage(GOOGLE_API_CREDENTIAL_PATH)
credentials = storage.get()
if credentials is None or credentials.invalid == True:
  credentials = run(FLOW, storage)

http = httplib2.Http()
http = credentials.authorize(http)

service = build(serviceName='calendar', version='v3', http=http,
   developerKey=GOOGLE_API_DEVELOPER_KEY)

event = {
    [... Dictionary with all the necessary …
Run Code Online (Sandbox Code Playgroud)

python google-calendar-api google-api-python-client

18
推荐指数
3
解决办法
8340
查看次数

如何使用Drive API在Google电子表格中获取工作表(名称和"gid")列表?

我正在尝试使用Google Drive API(Python)下载电子表格文件的某些标签.gid是文件元数据中的信息吗?我想做的是(这可能不正确,请建议:)):

file_metadata = self.service.files().get(file_id=file_id).execute()
# in the following line, how can I get a download url with a gid (a tab in a spreadsheet file)
download_url = file_metadata.get('exportLinks')['text/csv']
# download the file.
Run Code Online (Sandbox Code Playgroud)

谢谢:)

python python-2.7 google-drive-api google-api-python-client

18
推荐指数
1
解决办法
3157
查看次数

调用apiclient.discovery.build时,URL的SSL证书无效和/或缺失

所以我在本地运行我的谷歌端点dev_appserver.py.我使用API​​资源管理器来测试应用程序.

我用来创建服务的代码,所以我可以调用API如下:

from apiclient.discovery import build 
from oauth2client.client import GoogleCredentials
credentials = GoogleCredentials.get_application_default()
service = build('speech', 'v1beta1', credentials=credentials)
Run Code Online (Sandbox Code Playgroud)

我收到SSL错误(无效和/或缺少SSL证书),即使我通过浏览器访问指定的URL它工作正常(即绿色挂锁出现).

我不确定发生了什么变化,但这不久前工作正常.

我试图禁用SSL检查,但无法进行.

完整日志如下:

INFO     2017-01-02 03:12:02,724 discovery.py:267] URL being requested: GET https://www.googleapis.com/discovery/v1/apis/speech/v1beta1/rest?userIp=0.2.0.3
ERROR    2017-01-02 03:12:03,022 wsgi.py:263] 
Traceback (most recent call last):
  File "/home/vini/opt/google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 240, in Handle
    handler = _config_handle.add_wsgi_middleware(self._LoadHandler())
  File "/home/vini/opt/google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 299, in _LoadHandler
    handler, path, err = LoadObject(self._handler)
  File "/home/vini/opt/google-cloud-sdk/platform/google_appengine/google/appengine/runtime/wsgi.py", line 85, in LoadObject
    obj = __import__(path[0])
  File "/mnt/b117/home/vini/udacity/cerci-endpoint/api.py", line 28, in <module>
    service = build('speech', …
Run Code Online (Sandbox Code Playgroud)

python ssl google-app-engine google-api-python-client

17
推荐指数
1
解决办法
3208
查看次数