Blogger 데이터 API를 사용하면 클라이언트 애플리케이션에서 Blogger를 보고 업데이트할 수 있습니다. Google Data API 피드 형식으로 되어 있습니다.
클라이언트 애플리케이션은 Blogger Data API를 사용하여 새 블로그 게시물을 만들고, 기존 블로그 게시물을 수정하거나 삭제하고, 특정 기준과 일치하는 블로그 게시물을 쿼리할 수 있습니다.
Blogger의 기능에 대한 배경 지식과 함께 Data API, 이 문서는 다음을 사용하여 기본 Data API 상호작용의 예를 제공합니다. Python 클라이언트 라이브러리를 사용하여 v3 지도에 통합할 수 있습니다. 머신러닝의 기본 원리에 대해 프로토콜에 대해 자세히 알아보려면 다음 프로토콜 섹션을 참조하세요. 이 개발자 가이드를 참조하세요.
목차
잠재고객
이 문서는 Blogger와 상호작용할 수 있는 Python 클라이언트 애플리케이션을 작성하려는 프로그래머를 대상으로 합니다.
이 문서에서는 Google Data API 프로토콜의 일반적인 개념을 이해하고 있다고 가정합니다.
일반적인 Blogger Data API 참조 정보는 프로토콜 참조 가이드를 참고하세요.
시작하기
클라이언트 라이브러리 설정에 관한 도움말은 시작 가이드를 참고하세요.
Python 클라이언트 라이브러리에는 Python 2.2 이상이 필요합니다. 다운로드 후 클라이언트 라이브러리를 사용하려면 ElementTree 패키지도 다운로드하여 설치해야 합니다.
Blogger 계정 만들기
테스트 목적으로 Blogger 계정을 등록하는 것이 좋습니다. Blogger는 Google 계정을 사용하므로 이미 Google 계정이 있으면 준비가 된 것입니다.
샘플 코드 실행
이
문서(BloggerExample.py
에서 확인 가능)
새 파일을 만듭니다.
gdata-python-client/samples/blogger/
입니다.
샘플 클라이언트는 제공된 블로그에서 여러 작업을 수행하여 Blogger 데이터 API 사용 시연
다음 인수를 사용하여 샘플을 실행할 수 있습니다.
python BloggerExample.py --email [email_address] --password [password]
이 문서의 예시를 자체 코드에서 사용하려면 다음 import
문이 필요합니다.
from gdata import service import gdata import atom
Blogger 서비스에 인증
Blogger Data API를 사용하여 공개 및 비공개 피드에 모두 액세스할 수 있습니다. 공개 피드는 인증이 필요하지 않지만 읽기 전용입니다. 만약 블로그를 수정하려면 클라이언트가 인증한 후에 비공개 피드 OAuth 인증, AuthSub 프록시 인증 또는 ClientLogin 사용자 이름/비밀번호 인증 등 세 가지 접근 방식 중 하나를 사용하여 인증할 수 있습니다.
Google 데이터 API를 사용한 인증에 대한 일반적인 정보는 인증 확인 문서를 참조하세요.
이 문서의 후속 섹션에 있는 대부분의 샘플은 인증된 GDataService
인스턴스가 있다고 가정합니다.
OAuth 인증
Python GData 라이브러리를 사용한 OAuth 인증에 관한 문서는 Google 데이터 프로토콜 클라이언트 라이브러리의 OAuth를 참고하세요.
AuthSub 프록시 인증
AuthSub 프록시 인증은 Google 계정에 사용자를 인증해야 하는 웹 애플리케이션에서 사용됩니다. 웹사이트 운영자와 클라이언트 코드는 Blogger 사용자의 사용자 이름과 비밀번호에 액세스할 수 없습니다. 대신 클라이언트는 클라이언트가 특정 사용자를 대신하여 작업할 수 있는 특수한 AuthSub 토큰을 가져옵니다. 자세한 내용은 AuthSub 문서를 참고하세요.
사용자는 애플리케이션을 처음 방문할 때 아직 방문하지 않은 있습니다. 이 경우 블로그에 대한 액세스 요청을 인증하기 위해 사용자를 Google 페이지로 안내하는 링크와 일부 정보를 표시해야 합니다. Python 클라이언트 라이브러리는 Google 페이지의 URL을 생성하는 함수를 제공합니다. 아래 코드는 AuthSubRequest URL을 검색합니다. 페이지:
def GetAuthSubUrl(): next = 'http://www.example.com/welcome.pyc' scope = 'http://www.blogger.com/feeds/' secure = False session = True blogger_service = service.GDataService() return blogger_service.GenerateAuthSubURL(next, scope, secure, session); authSubUrl = GetAuthSubUrl(); print '<a href="%s">Login to your Google account</a>' % authSubUrl
GenerateAuthSubURL
메서드에는 다음 매개변수가 사용됩니다(AuthSubRequest 핸들러에서 사용하는 쿼리 매개변수에 해당).
- 다음
- Google이 인증 후 사용자를 리디렉션해야 하는 페이지의 URL입니다.
- 범위
- 애플리케이션이 Blogger 피드에 액세스하기 위해 토큰을 요청하고 있음을 나타냅니다. 사용할 범위 문자열은
http://www.blogger.com/feeds/
입니다 (URL 인코딩됨). - 보안
- 클라이언트가 보안 토큰을 요청하는지 여부를 나타냅니다.
- 세션
- 반환된 토큰을 다회용 (세션) 토큰으로 교환할 수 있는지 여부를 나타냅니다.
위의 예는 보안 토큰 (secure
의 값이 False
)을 요청하지 않는 호출을 보여줍니다. 결과 요청 URL은 다음과 같을 수 있습니다.
https://www.google.com/accounts/AuthSubRequest?scope=http%3A%2F%2Fwww.blogger.com%2Ffeeds%2F&session=1&secure=0&next=http%3A%2F%2Fwww.example.com%2Fwelcome.pyc
사용자가 Google 사이트로 연결된 링크를 따라 Google 계정에 인증합니다.
사용자가 인증하면 AuthSub 시스템은 AuthSubRequest URL의 next
쿼리 매개변수에 지정된 URL로 사용자를 리디렉션합니다. AuthSub 시스템은 인증 토큰을 token
쿼리 매개변수의 값으로 해당 URL에 추가합니다. 예를 들면 다음과 같습니다.
http://www.example.com/welcome.pyc?token=yourAuthToken
URL에서 토큰 값을 검색하는 방법에는 여러 가지가 있습니다. 예를 들면 다음과 같습니다.
import cgi parameters = cgi.FieldStorage() authsub_token = parameters['token']
이 토큰 값은 일회용 AuthSub 토큰을 나타냅니다. 이 예에서
session = True
가 지정되었으므로 이 토큰을
UpgradeToSessionToken
메서드를 사용하여 AuthSub 세션 토큰 생성
이는 AuthSubSessionToken
서비스:
blogger_service = service.GDataService() blogger_service.auth_token = authsub_token blogger_service.UpgradeToSessionToken()
즉, 일회용 토큰을 UpgradeToSessionToken
메서드에 전달하면 AuthSub 인터페이스가 세션 토큰을 반환합니다.
그러면 애플리케이션은 이후 Blogger와의 상호작용에서 세션 토큰 값을 사용할 수 있습니다. 클라이언트 라이브러리는 자동으로 토큰을 확인할 수 있습니다
ClientLogin 사용자 이름/비밀번호 인증
클라이언트가 독립형 단일 사용자 '설치된' 클라이언트(예: 데스크톱 애플리케이션)인 경우 ClientLogin 인증을 사용하세요. 전화
GDataService
의 ProgrammaticLogin()
메서드
이후의 모든 Blogger 상호작용은
인증됨:
blogger_service = service.GDataService('user@example.com', 'secretPassword') blogger_service.source = 'exampleCo-exampleApp-1.0' blogger_service.service = 'blogger' blogger_service.account_type = 'GOOGLE' blogger_service.server = 'www.blogger.com' blogger_service.ProgrammaticLogin()
위 스니펫에서는 GDataService
인스턴스에 세 가지 속성을 설정합니다. 첫 번째는 애플리케이션 이름이고
companyName-applicationName-versionID 양식을 사용합니다.
두 번째는 상호작용하려는 서비스의 이름입니다. 세 번째는
확인할 수 있습니다
account_type
가 다음과 같이 명시적으로 설정되어 있습니다.
GOOGLE
입니다. 이 매개변수를 설정하지 않으면 G Suite 사용자가 Blogger API를 사용할 수 없습니다.
샘플 등 ClientLogin 인증에 대한 자세한 내용은 자세한 내용은 설치된 앱에 대한 인증 애플리케이션 문서를 참조하세요.
참고: 지정된 세션의 모든 요청에 동일한 토큰을 사용합니다. Blogger 요청마다 새 토큰을 가져오지 마세요.
참고: ClientLogin에 설명된 대로
문서에 표시된 경우 인증 요청이 실패하고 보안문자를 요청할 수 있습니다.
합니다. Google이 보안문자를 발급하고 처리하도록 하려면 다음 단계를 따르세요.
사용자를
https://www.google.com/accounts/DisplayUnlockCaptcha?service=blogger
(ClientLogin에 제공된 보안문자 처리 URL 아님)
문서 참조).
블로그 목록 가져오기
Blogger 데이터 API는 특정 주제에 대한 블로그를 나열하는 피드를 제공합니다. user; '메타피드'라고 합니다.
다음 샘플 코드는 인증된 GDataService
를 사용합니다.
인스턴스를 사용하여 메타피드를 검색한 다음 각 블로그의 제목을 출력합니다.
def PrintUserBlogTitles(blogger_service): query = service.Query() query.feed = '/feeds/default/blogs' feed = blogger_service.Get(query.ToUri()) print feed.title.text for entry in feed.entry: print "\t" + entry.title.text
Get
메서드에서 사용하는 URL을 확인하세요. 이는 기본값입니다.
메타피드 URL; 현재 인증된 사용자의 블로그 목록을 반환합니다.
다른 사용자의 피드에 액세스하려면
default
를 포함하는 것이 좋습니다. 사용자의 ID는 일련의 숫자입니다.
을 입력합니다.
아래의 코드 스니펫은 피드에서 블로그 ID를 추출하는 방법을 보여줍니다. 생성, 업데이트, 삭제를 수행하려면 블로그 ID가 필요합니다. 작업을 수행할 수 있습니다. 아래 스니펫은 사용자에 대해 검색된 첫 번째 블로그를 선택합니다.
blog_id = feed.entry[0].GetSelfLink().href.split("/")[-1]
BloggerExample.py
샘플에서 BloggerExample
는
클래스가 생성되고 쉽게 액세스할 수 있도록 블로그 ID가 생성자에서 설정됩니다.
나중에 설명하겠습니다. 이 문서의 다음 예시 대부분에서 blog_id
는 변수로 전달됩니다.
게시물 작성
Blogger Data API를 사용하면 새 블로그 항목을 만들고 게시할 뿐만 아니라 항목의 초안을 만들 수 있습니다.
참고: 현재 게시물의 맞춤 작성자를 설정하는 기능은 지원되지 않습니다. 모든 새 게시물은 다음 사용자가 작성한 것처럼 표시됩니다. 사용자 인증 정보를 제공합니다
블로그 게시물 게시
Python 클라이언트 라이브러리를 사용하여 새 블로그 항목을 게시할 수 있습니다.
먼저 블로그 게시물을 나타내는 GDataEntry
인스턴스를 만듭니다.
그런 다음 블로그 게시물의 제목, 콘텐츠, 기타 속성을 설정할 수 있습니다.
마지막으로 GDataService
인스턴스를 사용하여 게시물을 삽입합니다. 다음은 새 블로그 게시물을 게시하는 방법의 예입니다.
def CreatePublicPost(blogger_service, blog_id, title, content): entry = gdata.GDataEntry() entry.title = atom.Title('xhtml', title) entry.content = atom.Content(content_type='html', text=content) return blogger_service.Post(entry, '/feeds/%s/posts/default' % blog_id) blogEntry = CreatePublicPost(blogger_service, blog_id, title='I have the answer', content='Eureka! It is 42!')
블로그 게시물 초안 작성
임시 게시물은 공개 게시물과 같은 방식으로 생성되지만
GDataEntry
의 draft
확장 요소
인스턴스를 만들 수 있습니다 위의 블로그 게시물을
강조 표시된 줄:
def CreateDraftPost(blogger_service, blog_id, title, content): entry = gdata.GDataEntry() entry.title = atom.Title('xhtml', title) entry.content = atom.Content(content_type='html', text=content) control = atom.Control() control.draft = atom.Draft(text='yes') entry.control = control return blogger_service.Post(entry, '/feeds/%s/posts/default' % blog_id) draftEntry = CreateDraftPost(blogger_service, blog_id, title='I have the question', content='What do you get if you multiply six by nine?')
초안 게시물을 가져와 초안 속성을 no
로 설정한 다음 게시물을 업데이트하여 기존 초안 블로그 게시물을 게시된 게시물로 전환할 수 있습니다. 다음 두 섹션에서는 게시물 검색 및 업데이트에 대해 설명합니다.
게시물 검색
다음 섹션에서는 쿼리 매개변수를 사용하거나 사용하지 않고 블로그 게시물 목록을 검색하는 방법을 설명합니다.
인증 없이 Blogger 공개 피드를 쿼리할 수 있습니다. 따라서 가져오기 전에 사용자 인증 정보를 설정하거나 AuthSub 인증을 수행할 필요가 없습니다. 게시물을 볼 수 있습니다.
모든 블로그 게시물 검색
사용자의 게시물을 검색하려면 블로그 게시물 피드 URL을 사용하여 GetFeed
메서드를 호출합니다.
def PrintAllPosts(blogger_service, blog_id): feed = blogger_service.GetFeed('/feeds/' + blog_id + '/posts/default') print feed.title.text for entry in feed.entry: print "\t" + entry.title.text print "\t" + entry.content.text print "\t" + entry.updated.text print
쿼리 매개변수를 사용하여 게시물 검색
Blogger Data API를 사용하면 지정된 날짜 범위 내에 게시되거나 업데이트된 블로그 게시물을 요청하는 등 지정된 기준과 일치하는 항목 집합을 요청할 수 있습니다. 이렇게 하려면 Query
인스턴스를 만든 다음
Get()
메서드를 사용하여 지도 가장자리에
패딩을 추가할 수 있습니다.
예를 들어 기간 쿼리를 보내려면 published_min
및 Query
인스턴스의 published_min
속성
다음 코드 스니펫은 각 블로그 게시물의 제목과 내용을 출력합니다.
지정된 시작 시간과 종료 시간 사이에 게시됨:
def PrintPostsInDateRange(blogger_service, blog_id, start_time='2007-04-01', end_time='2007-04-25'): query = service.Query() query.feed = '/feeds/' + blog_id + '/posts/default' query.published_min = start_time query.published_max = end_time feed = blogger_service.Get(query.ToUri()) print feed.title.text + " posts between " + start_time + " and " + end_time for entry in feed.entry: print "\t" + entry.title.text print "\t" + entry.content.text print "\t" + entry.updated.text print
Query
객체는 동일한 게시물을 사용하여 생성됩니다.
게시물을 가져오는 데 사용되는 피드 URL입니다.
Blogger Data API는 다음 Query
를 지원합니다.
속성:
- 카테고리
- 피드 결과를 필터링할 카테고리 (라벨이라고도 함)를 지정합니다. 예를 들어
http://www.blogger.com/feeds/blogID/posts/default/-/Fritz/Laurie
는Fritz
및Laurie
라벨이 모두 있는 항목을 반환합니다. Python 클라이언트 라이브러리에서 해당 카테고리 쿼리를 지정하려면query.categories = ['Fritz','Laurie',]
를 사용하면 됩니다. - max_results
- 반환할 최대 항목 수입니다.
- 게시된_최소_시간, 게시된_최대
- 응모작 게시 날짜의 경계입니다.
- start_index
- 페이징을 위해 가져올 첫 번째 결과의 1부터 시작하는 색인입니다.
- updated_min, updated_max
- 항목 업데이트 날짜의 경계입니다.
orderby
매개변수가updated
로 설정되지 않으면 이러한 쿼리 매개변수는 무시됩니다.
쿼리 매개변수에 관한 자세한 내용은 Blogger Data API 참조 가이드 및 Google Data API 참조 가이드를 참고하세요.
게시물 업데이트
기존 블로그 게시물을 업데이트하려면 먼저 업데이트할 항목을 가져온 다음 수정한 후 Put
메서드를 사용하여 Blogger로 전송합니다. 다음 코드 스니펫은 이미 서버에서 항목을 가져온 것으로 가정하고 블로그 항목의 제목을 수정합니다.
def UpdatePostTitle(blogger_service, entry_to_update, new_title='The REAL answer'): entry_to_update.title = atom.Title('xhtml', new_title) return blogger_service.Put(entry_to_update, entry_to_update.GetEditLink().href)
위의 코드는 전체가 포함된 GDataEntry
를 반환합니다.
확인할 수 있습니다 다른 속성을 업데이트하려면 Put
를 호출하기 전에 GDataEntry
인스턴스에서 설정하면 됩니다.
참고: 게시물은 현재 지원되지 않습니다.
게시물 삭제
게시물을 삭제하려면 게시물의 edit URL을 Delete
메서드에 전달하세요.
다음과 같이 GDataService
객체에서 설정합니다.
def DeletePost(blogger_service, edit_link_href): blogger_service.Delete(edit_link_href)
댓글
Blogger Data API를 사용하면 댓글을 만들고, 검색하고, 삭제할 수 있습니다. 댓글 업데이트는 지원되지 않으며 웹에서도 지원되지 않습니다. 인터페이스에 추가되었습니다).
댓글 만들기
댓글을 게시하려면 GDataEntry
객체를 만들고 다음과 같이 삽입합니다.
def CreateComment(blogger_service, blog_id, post_id, comment_text='Mostly harmless'): feed_uri = '/feeds/' + blog_id + '/' + post_id + '/comments/default' entry = gdata.GDataEntry() entry.content = atom.Content(content_type='xhtml', text=comment_text) return blogger_service.Post(entry, feed_uri)
참고: 현재 인증된 사용자가 소유한 블로그에만 댓글을 게시할 수 있습니다.
참고: 댓글 작성자 맞춤 설정은 다음과 같습니다. 현재 지원되지 않습니다. 모든 새 댓글은 다음 사용자가 작성한 것처럼 표시됩니다. 사용자 인증 정보를 제공합니다
댓글을 가져오는 중
게시물의 댓글 피드 URL에서 특정 게시물의 댓글을 가져올 수 있습니다.
def PrintAllComments(blogger_service, blog_id, post_id): feed_url = '/feeds/' + blog_id + '/' + post_id + '/comments/default' feed = blogger_service.Get(feed_url) print feed.title.text for entry in feed.entry: print "\t" + entry.title.text print "\t" + entry.updated.text print
또는 블로그의 댓글 피드 URL을 사용하여 모든 게시물의 댓글을 가져올 수 있습니다.
http://www.blogger.com/feeds/blogID/comments/default
댓글 삭제 중
댓글을 삭제하려면 댓글의 수정 URL을 Delete
에 전달합니다.
메서드를 다음과 같이 GDataService
객체에서 설정합니다.
def DeleteComment(blogger_service, post_id, comment_id): feed_url = '/feeds/' + post_id + '/comments/default/' + comment_id blogger_service.Delete(feed_url)