如何在Python中使用Google Blogger API?

问题描述 投票:3回答:2

我正在尝试使用Google API gdata中的博客功能。我按照文档尽力了但是我的失败非常糟糕。任何人都可以告诉我如何使用Google博客API?我的代码非常混乱,现在我已经不了解了。

编辑完整的工作代码:):

from oauth2client.client import OAuth2WebServerFlow
import httplib2
from apiclient.discovery import build
from oauth2client.file import Storage

#flow = OAuth2WebServerFlow(client_id='', #ID
#                           client_secret='', #SECRET ID
#                           scope='https://www.googleapis.com/auth/blogger',
#                           redirect_uri='urn:ietf:wg:oauth:2.0:oob')

#auth_uri = flow.step1_get_authorize_url()
# Redirect the user to auth_uri on your platform.

# Open a file
#fo = open("foo.txt", "wb")
#fo.write( auth_uri +"\n");
#fo.close()

#credentials = flow.step2_exchange( raw_input ( ) ) 


storage = Storage('a_credentials_file')
#storage.put(credentials)

credentials = storage.get()

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

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

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'])
python blogger blogspot
2个回答
3
投票

当我自己试图寻找解决方案时,我找到了this。经过一些修改,代码终于奏效了。它成功打印了有关您博客网站的所有详细信息

from oauth2client.client import flow_from_clientsecrets
import httplib2
from apiclient.discovery import build
from oauth2client.file import Storage
import webbrowser

def get_credentials():
    scope = 'https://www.googleapis.com/auth/blogger'
    flow = flow_from_clientsecrets(
        'client_secrets.json', scope,
        redirect_uri='urn:ietf:wg:oauth:2.0:oob')
    storage = Storage('credentials.dat')
    credentials = storage.get()

    if  not credentials or credentials.invalid:
        auth_uri = flow.step1_get_authorize_url()
        webbrowser.open(auth_uri)
        auth_code = raw_input('Enter the auth code: ')
        credentials = flow.step2_exchange(auth_code)
        storage.put(credentials)
    return credentials

def get_service():
    """Returns an authorised blogger api service."""
    credentials = get_credentials()
    http = httplib2.Http()
    http = credentials.authorize(http)
    service = build('blogger', 'v3', http=http)
    return service

if __name__ == '__main__':
    served = get_service()
    blogs = served.blogs()
    blog_get_obj = blogs.get(blogId='123456789123456')
    details = blog_get_obj.execute()
    print details

打印结果如下:

{u'description': u'Look far and wide. There are worlds to conquer.',
 u'id': u'8087466742945672359',
 u'kind': u'blogger#blog',
 u'locale': {u'country': u'', u'language': u'en', u'variant': u''},
 u'name': u'The World Around us',
 u'pages': {u'selfLink': u'https://www.googleapis.com/blogger/v3/blogs/1234567897894569/pages',
            u'totalItems': 2},
 u'posts': {u'selfLink': u'https://www.googleapis.com/blogger/v3/blogs/1245678992359/posts',
            u'totalItems': 26},
 u'published': u'2015-11-02T18:47:02+05:30',
 u'selfLink': u'https://www.googleapis.com/blogger/v3/blogs/9874652945672359',
 u'updated': u'2017-06-29T19:41:00+05:30',
 u'url': u'http://www.safarnuma.com/'}

0
投票

这是一个更新且长期稳定的实现,取自此answer并为Blogger API v3编辑了一下。

可以在此代码的official documentation变量上调用blogger_service中的所有方法。

import os
import pickle

from googleapiclient.discovery import build
from google_auth_oauthlib.flow import InstalledAppFlow
from google.auth.transport.requests import Request

SCOPES = ['https://www.googleapis.com/auth/blogger', ]


# we check if the file to store the credentials exists
if not os.path.exists('credentials.dat'):

    flow = InstalledAppFlow.from_client_secrets_file('credentials.json', SCOPES)
    credentials = flow.run_local_server()

    with open('credentials.dat', 'wb') as credentials_dat:
        pickle.dump(credentials, credentials_dat)
else:
    with open('credentials.dat', 'rb') as credentials_dat:
        credentials = pickle.load(credentials_dat)

if credentials.expired:
    credentials.refresh(Request())

blogger_service = build('blogger', 'v3', credentials=credentials)

users = blogger_service.users() 
# Retrieve this user's profile information
thisuser = users.get(userId='self').execute()
print('Your display name is: %s' % thisuser['displayName'])
© www.soinside.com 2019 - 2024. All rights reserved.