Вставить сообщение Blogger API не удается с Python

Теперь этот код работает.

У меня возникла проблема с добавлением нового сообщения в блог на сайт Google Blogger через python2.7, вызывающий API. У меня есть все модули oauth2client от Google для аутентификации. У меня есть разрешение на использование API-интерфейса Blogger V3 - он активирован в консоли разработчика Google. Я запускал простые запросы api с теми же учетными данными, которые работали:

это сработало (полный код не включен)

service = build('blogger','v3', http=http)
try:
    request = service.blogs().get(blogId="6814573853229626501")
    response = request.execute()
    print response

Служба обнаружения google api наводит меня на мысль, что именно так должен выглядеть код для вставки сообщения https://developers.google.com/apis-explorer/#p/blogger/v3/blogger.posts.insert

service = build('blogger','v3', http=http)

try:
    body = {
        "kind": "blogger#post",
        "id": "6814573853229626501",
        "title": "posted via python",
        "content":"<div>hello world test</div>"
        }

    request = service.posts().insert(blogId="6814573853229626501",body=body)

    response = request.execute()
    print response

Я уверен, что я испортил тело = часть тела? Какие-нибудь подсказки?

вот ошибка, которую я получаю:

Traceback (most recent call last):
  File "blogger.py", line 104, in <module>
    main()
  File "blogger.py", line 93, in main
    response = request.execute()
  File "/usr/local/lib/python2.7/dist-packages/google_api_python_client-1.0c2-py2.7.egg/apiclient/http.py", line 654, in execute
    raise HttpError(resp, content, self.uri)
apiclient.errors.HttpError: <HttpError 400 when requesting https://www.googleapis.com/blogger/v3/blogs/6814573853229626501/posts?alt=json returned "Invalid Value">

Если вам интересно, я экспериментирую с размещением диаграмм из моих таблиц слияния Google, созданных на основе данных eBay, которые меня интересуют в то время.


person user1633891    schedule 09.11.2012    source источник


Ответы (2)


Вам не нужна обертка «data»: object вокруг ваших данных, клиентская библиотека добавит ее, если серверу она понадобится. В этой документации показана форма объекта, используемого при вызове вставки:

https://google-api-client-libraries.appspot.com/documentation/blogger/v3/python/latest/blogger_v3.posts.html#insert

person Joe Gregorio    schedule 22.11.2012
comment
Фантастика! Сработало отлично. Отредактировал приведенный выше код, чтобы показать правильное решение. - person user1633891; 24.11.2012
comment
Не могли бы вы поделиться всем кодом, включая код аутентификации? У меня тоже с этим проблемы. заранее спасибо - person MiniMe; 13.07.2013

Вы можете как угодно публиковать сообщения на любом блогере

__author__ = '[email protected] (Saurabh Pandey)'

import sys
from oauth2client import client
from googleapiclient import sample_tools

  # Authenticate and construct service.
  service, flags = sample_tools.init(
      argv, 'blogger', 'v3', __doc__, __file__,
      scope='https://www.googleapis.com/auth/blogger')

  try:

      users = service.users()

      # Retrieve this user's profile information
      thisuser = users.get(userId='self').execute()
      print('This user\'s display name is: %s' % thisuser['displayName'])

      blogs = service.blogs()

      # Retrieve the list of Blogs this user has write privileges on
      thisusersblogs = blogs.listByUser(userId='self').execute()
      for blog in thisusersblogs['items']:
        print('The blog named \'%s\' is at: %s' % (blog['name'], blog['url']))

      posts = service.posts()
      body = {
        "kind": "blogger#post",
        "id": "6701167141462934671",
        "title": "posted via python",
        "content":"<div>hello world test</div>"
        }
      insert = posts.insert(blogId='6701167141462934671', body=body)
      posts_doc = insert.execute()
      print posts_doc


  except client.AccessTokenRefreshError:
    print ('The credentials have been revoked or expired, please re-run'
      'the application to re-authorize')
person Saurabh Pandey    schedule 28.10.2015