使用python Blogger API时Status参数不起作用

拉屎

我正在尝试将google-api-python-client 1.12.5与Python 3.8下的服务帐户auth一起使用。在我看来,当指定status参数时,Google会以404 HTTP代码进行响应。我不知道为什么。我也查看了文档,但无法将任何内容与此错误相关联。

我已经粘贴了代码。该错误发生在第三个调用中。

这是代码:

from google.oauth2 import service_account
from googleapiclient.discovery import build

SCOPES = ['https://www.googleapis.com/auth/blogger']
SERVICE_ACCOUNT_FILE = 'new_service_account.json'
BLOG_ID = '<your_blog_id>'

credentials = service_account.Credentials.from_service_account_file(
        SERVICE_ACCOUNT_FILE, scopes=SCOPES)

service = build('blogger', 'v3', credentials=credentials)
p = service.posts()

# FIRST
promise = p.list(blogId=BLOG_ID)
result = promise.execute()

# SECOND
promise = p.list(blogId=BLOG_ID, orderBy='UPDATED')
result = promise.execute()


#THIRD
promise = p.list(blogId=BLOG_ID, orderBy='UPDATED', status='DRAFT')
result = promise.execute()  # <===== ERROR HAPPENS HERE!!!!

service.close()

这是回溯:

Traceback (most recent call last):
  File "/home/madtyn/.local/share/JetBrains/Toolbox/apps/PyCharm-P/ch-0/202.7660.27/plugins/python/helpers/pydev/pydevd.py", line 1448, in _exec
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "/home/madtyn/.local/share/JetBrains/Toolbox/apps/PyCharm-P/ch-0/202.7660.27/plugins/python/helpers/pydev/_pydev_imps/_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "/home/madtyn/PycharmProjects/blogger/main.py", line 24, in <module>
    result = promise.execute()
  File "/home/madtyn/venvs/blogger/lib/python3.8/site-packages/googleapiclient/_helpers.py", line 134, in positional_wrapper
    return wrapped(*args, **kwargs)
  File "/home/madtyn/venvs/blogger/lib/python3.8/site-packages/googleapiclient/http.py", line 915, in execute
    raise HttpError(resp, content, uri=self.uri)
googleapiclient.errors.HttpError: <HttpError 404 when requesting https://blogger.googleapis.com/v3/blogs/<blog_id>/posts?orderBy=UPDATED&status=DRAFT&alt=json returned "Not Found">
python-BaseException
卡鲁玛

我可以重现此问题...添加status = DRAFT将返回404,但任何其他过滤器都在工作...

  1. 尝试使用服务帐户和您的代码:404

  2. 已尝试使用API​​密钥result = requests.get('https://blogger.googleapis.com/v3/blogs/<blog_id>/posts?status=DRAFT&orderBy=UPDATED&alt=json&key=<api_key>'):404

  3. 从服务帐户中提取“ access_token”(credentials.token通话后)result = requests.get('https://blogger.googleapis.com/v3/blogs/<blog_id>/posts?status=DRAFT&orderBy=UPDATED&alt=json&access_token=<extracted_service_account_token>'):: 404

但是很奇怪,如果我使用此处的“尝试此API”给出的access_tokenhttps : //developers.google.com/blogger/docs/3.0/reference/posts/list? apix_params={"blogId"%3A"blog_id"% 2C“ orderBy”%3A“ UPDATED”%2C“状态”%3A [“ DRAFT”]%2C“ alt”%3A“ json”}正常!

将该令牌与请求一起使用时,我的博客帖子处于草稿状态...

试试这个API +网络面板

只需Authorization在脚本中复制/粘贴原始标题即可:

import requests

blog_id = '<blog_id>'
headers = {
    'Authorization' : 'Bearer <replace_here>'
}

# Using only Authorization header
result = requests.get(
    'https://blogger.googleapis.com/v3/blogs/%s/posts?status=DRAFT&orderBy=UPDATED&alt=json' % (blog_id),
    headers=headers
)
print(result)
# This should print DRAFT if you have at least one draft post
print(result.json()['items'][0]['status'])

# Using "access_token" param constructed with Authorization header splited to have only token
result = requests.get('https://blogger.googleapis.com/v3/blogs/%s/posts?status=DRAFT&orderBy=UPDATED&alt=json&access_token=%s' % (blog_id, headers['Authorization'][len('Bearer '):]))
print(result)
# This should print DRAFT if you have at least one draft post
print(result.json()['items'][0]['status'])

我目前的结果:

在此处输入图片说明

该错误似乎不是来自库,而是来自令牌权限……但是,我通常也使用控制台来生成像您这样的访问。

总而言之,我认为这是错误或者是Google自愿提供的...我不知道“尝试使用此API”令牌有效的时间长短,但这是目前我找到文章草稿的唯一途径...也许您可以尝试打开错误通知单,但我不知道具体在哪里可以做到。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章