#!/usr/bin/python # # Copyright (C) 2007 Google Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. """Classes to interact with the Blogger server.""" __author__ = 'api.jscudder (Jeffrey Scudder)' import gdata.service import gdata.blogger class BloggerService(gdata.service.GDataService): def __init__(self, email=None, password=None, source=None, server='www.blogger.com', **kwargs): """Creates a client for the Blogger service. Args: email: string (optional) The user's email address, used for authentication. password: string (optional) The user's password. source: string (optional) The name of the user's application. server: string (optional) The name of the server to which a connection will be opened. Default value: 'www.blogger.com'. **kwargs: The other parameters to pass to gdata.service.GDataService constructor. """ gdata.service.GDataService.__init__( self, email=email, password=password, service='blogger', source=source, server=server, **kwargs) def GetBlogFeed(self, uri=None): """Retrieve a list of the blogs to which the current user may manage.""" if not uri: uri = '/feeds/default/blogs' return self.Get(uri, converter=gdata.blogger.BlogFeedFromString) def GetBlogCommentFeed(self, blog_id=None, uri=None): """Retrieve a list of the comments for this blog.""" if blog_id: uri = '/feeds/%s/comments/default' % blog_id return self.Get(uri, converter=gdata.blogger.CommentFeedFromString) def GetBlogPostFeed(self, blog_id=None, uri=None): if blog_id: uri = '/feeds/%s/posts/default' % blog_id return self.Get(uri, converter=gdata.blogger.BlogPostFeedFromString) def GetPostCommentFeed(self, blog_id=None, post_id=None, uri=None): """Retrieve a list of the comments for this particular blog post.""" if blog_id and post_id: uri = '/feeds/%s/%s/comments/default' % (blog_id, post_id) return self.Get(uri, converter=gdata.blogger.CommentFeedFromString) def AddPost(self, entry, blog_id=None, uri=None): if blog_id: uri = '/feeds/%s/posts/default' % blog_id return self.Post(entry, uri, converter=gdata.blogger.BlogPostEntryFromString) def UpdatePost(self, entry, uri=None): if not uri: uri = entry.GetEditLink().href return self.Put(entry, uri, converter=gdata.blogger.BlogPostEntryFromString) def DeletePost(self, entry=None, uri=None): if not uri: uri = entry.GetEditLink().href return self.Delete(uri) def AddComment(self, comment_entry, blog_id=None, post_id=None, uri=None): """Adds a new comment to the specified blog post.""" if blog_id and post_id: uri = '/feeds/%s/%s/comments/default' % (blog_id, post_id) return self.Post(comment_entry, uri, converter=gdata.blogger.CommentEntryFromString) def DeleteComment(self, entry=None, uri=None): if not uri: uri = entry.GetEditLink().href return self.Delete(uri) class BlogQuery(gdata.service.Query): def __init__(self, feed=None, params=None, categories=None, blog_id=None): """Constructs a query object for the list of a user's Blogger blogs. Args: feed: str (optional) The beginning of the URL to be queried. If the feed is not set, and there is no blog_id passed in, the default value is used ('/feeds/default/blogs'). params: dict (optional) categories: list (optional) blog_id: str (optional) """ if not feed and blog_id: feed = '/feeds/default/blogs/%s' % blog_id elif not feed: feed = '/feeds/default/blogs' gdata.service.Query.__init__(self, feed=feed, params=params, categories=categories) class BlogPostQuery(gdata.service.Query): def __init__(self, feed=None, params=None, categories=None, blog_id=None, post_id=None): if not feed and blog_id and post_id: feed = '/feeds/%s/posts/default/%s' % (blog_id, post_id) elif not feed and blog_id: feed = '/feeds/%s/posts/default' % blog_id gdata.service.Query.__init__(self, feed=feed, params=params, categories=categories) class BlogCommentQuery(gdata.service.Query): def __init__(self, feed=None, params=None, categories=None, blog_id=None, post_id=None, comment_id=None): if not feed and blog_id and comment_id: feed = '/feeds/%s/comments/default/%s' % (blog_id, comment_id) elif not feed and blog_id and post_id: feed = '/feeds/%s/%s/comments/default' % (blog_id, post_id) elif not feed and blog_id: feed = '/feeds/%s/comments/default' % blog_id gdata.service.Query.__init__(self, feed=feed, params=params, categories=categories)