메인 컨텐츠로 가기

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

PHP로 Google Buzz 스트림 검색 및 통합

PHP를 사용하여 Google Buzz로부터 액티비티 스트림을 처리하고 웹 애플리케이션과 통합하기

Vikram Vaswani, Tổng Giám đốc, Melonfire
Vikram Vaswani là nhà sáng lập và là tổng giám đốc điều hành (CEO) của công ty Melonfire, công ty dịch vụ tư vấn có chuyên môn đặc biệt về công nghệ và các công cụ mã nguồn mở. Ông cũng là tác giả của các cuốn sách: Giải pháp lập trình PHP và PHP: Hướng dẫn cho những người mới bắt đầu.

요약:  Google Buzz를 통해 사용자는 실시간 상태 업데이트, 소식 및 콘텐츠를 본인의 Google 계정에 게시할 수 있고, 다른 사람의 이와 유사한 업데이트도 구독할 수 있습니다. 웹 애플리케이션 개발자는 Google Buzz REST API를 통해 이러한 콘텐츠를 액세스하고 검색할 수 있습니다. 이 기사에서는 Google Buzz API를 소개하고 PHP 애플리케이션을 통해 이 API를 실제로 사용해 봅니다. 또한, Google Buzz에서 다양한 유형의 콘텐츠를 검색하고 추가, 편집하는 방법을 설명합니다.

원문 게재일:  2010 년 10 월 26 일 번역 게재일:   2011 년 3 월 15 일
난이도:  중급 원문:  보기 PDF:  A4 and Letter (525KB | 30 pages)Get Adobe® Reader®
페이지뷰:  2202 회
의견:  


소개

자주 사용하는 약어

  • API: Application Program Interface
  • DOM: Document Object Model
  • HTTP: Hypertext Transfer Protocol
  • JSON: JavaScript Object Notation
  • REST: REpresentational State Transfer
  • URL: Uniform Resource Locator
  • XML: Extensible Markup Language

2010년 2월에 Google Buzz가 실행된 이후로 이는 실로 엄청난 반향을 불러일으켰다. 사용자가 동영상 및 사진과 같은 풍부한 콘텐츠를 공유할 수 있을 뿐만 아니라 간단한 상태 업데이트도 제공하여 버즈는 빠른 속도로 Google의 가장 대중적인 서비스 중 하나가 되었으며 친밀한 Gmail 통합으로 인해 어느 누구도 피해를 입지 않았다!

Google Buzz는 웹 개발자들이 좋아할 만한 장점들이 더 많다. 다른 많은 Google 서비스와 마찬가지로 Google Buzz는 개발자 API가 함께 제공되어, 개발자가 서비스의 중심을 관리할 수 있고 그 위에 자체적인 매시업을 작성할 수 있다. 그리고 API가 REST를 사용하기 때문에 대부분의 프로그래밍 툴킷들— 필자 본인이 가장 많이 사용하는 PHP 포함 —과 간편하게 통합할 수 있다.

이 기사에서는 Google Buzz API를 소개하여 Google Buzz 콘텐츠를 PHP 애플리케이션과 통합하여 사용하는 방법을 보여준다. 그러면 이제 시작하자.


Google Buzz 피드 이해하기

Google Buzz를 사용하는 애플리케이션을 개발하려면 먼저 Google Buzz가 작동하는 방식을 이해해야 한다. 모든 REST 기반 서비스를 사용할 때와 마찬가지로 작동 과정은 지정된 자원에 HTTP 요청을 함으로써 시작된다. 이 HTTP 요청에는 하나 이상의 입력 매개변수가 있는 쿼리가 포함되어 있으며 서버는 Atom이나 JSON 피드를 사용하여 쿼리에 응답한다. 요청에서 사용되는 HTTP "동사"는 —읽기를 위한 GET, 쓰기를 위한 POST와 PUT 및 삭제를 위한 DELETE— 필요한 조치 유형을 표시하며, 서버로 리턴된 HTTP 상태 코드는 조치의 성공 여부를 표시한다.

이러한 과정이 어떻게 작동하는지 확인하려면 Google 계정에 로그인하여 사용 중인 웹 브라우저에서 https://www.googleapis.com/buzz/v1/activities/YOUR_ID/@public이라는 URL을 요청해보자. URL에서 YOUR_ID 문자열을 Google ID로 바꾸는 것을 유의하자. 이는 사용자의 Google 계정 설정 페이지에 표시되는 Google 프로필 URL에서 확인할 수 있다. 이 요청에 대한 응답(결과 페이지의 소스 코드에서 확인할 수 있음)은 목록 1과 같은 형태가 되며, 여기에는 가장 최신의 Google Buzz 게시 목록이 포함되어 있을 것이다.


목록 1. Google Buzz 피드 예제
   
<?xml version="1.0" encoding="UTF-8"?>
<feed gd:kind="buzz#activityFeed" 
  xmlns="http://www.w3.org/2005/Atom" 
  xmlns:activity="http://activitystrea.ms/spec/1.0/" 
  xmlns:buzz="http://schemas.google.com/buzz/2010" 
  xmlns:crosspost="http://purl.org/syndication/cross-posting" 
  xmlns:gd="http://schemas.google.com/g/2005" 
  xmlns:georss="http://www.georss.org/georss" 
  xmlns:media="http://search.yahoo.com/mrss/" 
  xmlns:poco="http://portablecontacts.net/ns/1.0" 
  xmlns:thr="http://purl.org/syndication/thread/1.0">
  <link href="http://pubsubhubbub.appspot.com/" rel="hub"/>
  <link 
   href="https://www.googleapis.com/buzz/v1/activities/YOUR_ID/@public?alt=atom"
   rel="self" type="application/atom+xml"/>
  <title type="text">Google Buzz Public Feed</title>
  <updated>2010-06-24T18:16:47.108Z</updated>
  <id>tag:google.com,2010:buzz-feed:public:posted:YOUR_ID</id>
  <generator uri="http://www.google.com/buzz">Google Buzz</generator>
  <entry gd:kind="buzz#activity">
    <title>Watching it rain and planning tomorrow's shopping</title>
    <published>2010-06-18T14:13:51.000Z</published>
    <updated>2010-06-18T14:13:51.400Z</updated>
    <id>tag:google.com,2010:buzz:s12ard75xvreh35</id>
    <link href="http://www.google.com/buzz/YOUR_ID/fqFn7S27Va4" rel="alternate" 
     type="text/html"/>
    <link href="https://www.googleapis.com/buzz/v1/activities/YOUR_ID/@self/
     tag:google.com,2010:buzz:s12ard75xvreh35?alt=atom" rel="self" 
     type="application/atom+xml"/>
    <link href="https://www.googleapis.com/buzz/v1/activities/YOUR_ID/@self/
     tag:google.com,2010:buzz:s12ard75xvreh35/@comments?alt=atom" rel="replies" 
     thr:count="0" thr:updated="2010-06-18T14:13:51.400Z" 
     type="application/atom+xml"/>
    <author>
      <poco:id>YOUR_ID</poco:id>
      <poco:photoUrl/>
      <name>Vikram Vaswani (Melonfire)</name>
      <uri>http://www.google.com/profiles/YOUR_ID</uri>
      <link href="" rel="photo" type="image/jpeg"/>
      <activity:object-type>http://activitystrea.ms/schema/1.0/
       person</activity:object-type>
    </author>
    <content type="text/html">Watching it rain and planning 
     tomorrow&#39;s shopping</content>
    <activity:verb>http://activitystrea.ms/schema/1.0/post
     </activity:verb>
    <activity:object>
      <activity:object-type>http://activitystrea.ms/schema/1.0/note
       </activity:object-type>
      <content type="text/html">Watching it rain and planning 
       tomorrow&#39;s shopping</content>
      <buzz:original-content type="text"/>
      <link href="http://www.google.com/buzz/YOUR_ID/fqFn7S27Va4" 
       rel="alternate" type="text/html"/>
    </activity:object>
    <source>
      <activity:service>
        <title>Buzz</title>
      </activity:service>
    </source>
    <buzz:visibility>
      <buzz:aclentry type="group">
        <poco:id>tag:google.com,2010:buzz-group:@me:@public</poco:id>
        <uri>https://www.googleapis.com/buzz/v1/people/@me/
         @groups/@public?alt=atom</uri>
        <poco:name>Public</poco:name>
      </buzz:aclentry>
    </buzz:visibility>
    <link buzz:count="0" href="https://www.googleapis.com/buzz/v1/
     activities/YOUR_ID/@self/tag:google.com,2010:buzz:s12ard75xvreh35/
     @liked?alt=atom" rel="http://schemas.google.com/buzz/2010#liked" 
     type="application/poco+xml"/>
  </entry>
  <entry>
  ...
  </entry>
</feed>

Google Buzz API는 요청된 데이터가 포함된 Atom 또는 JSON 피드를 사용하여 REST 요청에 응답한다. Google Buzz는 다음과 같이 흥미로운 피드를 많이 제공한다.

  • 특정 사용자의 모든 공개 게시가 포함된 사용자당 액티비티 피드
  • Google Buzz에서 모든 공개 게시가 포함된 글로벌 액티비티 피드
  • 특정 액티비티에서 사용자 댓글 목록이 포함된 액티비티당 댓글 피드
  • 특정 사용자에 팔로우되고 그가 팔로우하는 사용자 목록이 포함된 사용자당 인물 피드

일부 피드는 공개로 검색하고 액세스할 수 있으며, 일부는 인증 성공 이후에 피드 소유자만 사용할 수 있다. 대부분의 피드는 인증을 통한 읽기 및 쓰기 조작을 둘 다 지원한다. 이는 인증된 사용자가 새 콘텐츠를 프로그래밍 방식으로 그/그녀의 공개 액티비티 피드에 게시하거나, Google Buzz API를 통해 다른 사용자의 공개 피드에 댓글을 쓸 수 있음을 의미한다.

이 피드는 표준 Atom 피드로 최상위 <feed> 요소에는 결과 세트의 현재 페이지(그리고 가능한 경우 다음 및 이전 페이지)에 대한 URL이 있는 <link> 요소가 포함되어 있다. 또한, 최상위 <feed> 요소는 하나 이상의 <entry> 요소를 둘러싸고 있으며 각 요소는 Google Buzz 게시를 나타낸다. 각 엔트리에는 게시 ID, 제목, 작성자, 게시 날짜 및 URL과 같은 기술적 메타데이터가 포함된다. 각 <entry>에는 <author> 요소도 포함되며, 이는 프로필 ID, 프로필 URL, 사진 URL 및 게시 작성자의 이름 및 게시 댓글 피드나 "좋아요" 피드로의 URL 링크를 제공하는 <link> 요소를 제공한다.

Google Buzz 액티비티에서 구체적인 정보를 제공하는 <activity:> 네임스페이스된 요소를 지적할 필요가 있다. <activity:verb> 요소는 액티비티의 유형을 지정하는 반면에 <activity:object> 요소는 액티비티의 콘텐츠를 지정한다.

더 나아가기 전에 제3자 적용 면에서 Google Buzz 콘텐츠의 사용은 Google Buzz 서비스 약관으로 운영됨을 참고하자. 또한 사용자의 적용은 Google Buzz 개발자 정책 및 브랜드 가이드라인을 준수해야 한다. 개발을 시작하기 전에 모든 필수 규칙을 준수하도록 보장하기 위해 이러한 문서를 읽어볼 필요가 있다. 이러한 가이드라인에 대한 링크는 참고자료를 참조한다.


공개 게시 검색하기

이제 공개 REST API를 통해 Google Buzz 액티비티 피드에 액세스하는 방법을 알았으니, PHP 애플리케이션 내에서 동일한 작업을 수행하는 것을 살펴보자. 한 가지 방법은 PHP의 내장 XML 처리 확장(SimpleXML, DOM 또는 XMLReader)을 사용하여 Google Buzz에서 리턴된 Atom 피드를 구문 분석하고 그로부터 정보의 관련된 단편을 추출하는 것이다. 하지만 이는 특히 대규모의 네임스페이스된 정보나 대형 피드를 처리하는 경우에는 매우 지루할 수 있다.

두 가지의 또 다른 접근방식이 더 편리하다.

  • Zend 프레임워크의 Zend_Rest_Client 컴포넌트는 REST 기반 웹 서비스와 PHP 애플리케이션을 통합하려고 시도하는 개발자들을 위해 특별히 디자인되었다. 이 클라이언트를 사용하여 REST 서비스 엔드포인트로의 GET, POST, PUT 및 DELETE 응답을 수행한다. REST 응답은 Zend_Rest_Client_Response 오브젝트의 인스턴스로 리턴되어 개별 응답 특성에 간편하게 액세스할 수 있다.
  • Google Buzz PHP 클라이언트 라이브러리는 Google Buzz 피드와 함께 사용하기 위해 특별히 디자인된 오픈 소스 클라이언트 라이브러리이다. 또한 이 라이브러리는 Google Buzz 피드를 네이티브 PHP 오브젝트로 리턴하여 데이터 액세스를 간소화해 준다.

Google Buzz PHP 클라이언트 라이브러리를 사용하려면 또한, 웹 애플리케이션을 Google로 등록하고 OAuth 인증을 위해 필수 OAuth 이용자 기밀을 확보해야 할 것이다. 참고자료에서 두 라이브러리 모두에 대한 다운로드 링크와 지시사항을 찾을 수 있다. 이러한 라이브러리를 설치할 때에 위치를 반영하는 PHP 'include_path'를 업데이트하는 것을 유의하자.

이 두 옵션 중에 어느 것이 더 나은가? 지금으로서는 Google Buzz PHP 클라이언트 라이브러리가 OAuth 인증 지원도 포함되어 있기 때문에 우위를 점한다. 이 지원으로 인해 Google Buzz 서비스로 인증된 요청을 전송하는 것과 연관된 작업이 엄청나게 줄어든다. 전문가 사용자들은 여전히 Zend_Rest_Client 라이브러리와 Zend_Oauth 컴포넌트를 결합하여 동일한 결과를 달성할 수 있지만, 그 프로세스는 조금 더 복잡하다. 따라서 비록 처음 몇 개의 예제에서 인증되지 않은 요청에 대해 Zend_Rest_Client 라이브러리의 사용을 보여주지만, 이 기사에서의 예제들은 Google Buzz PHP 클라이언트 라이브러리를 활용할 것이다.

목록 2에서는 사용자의 공개 액티비티 피드(목록 1과 동일한 피드)를 검색하고 구문 분석하도록 Google Buzz PHP 클라이언트 라이브러리를 사용하는 방법을 보여준다.


목록 2. 버즈 PHP 클라이언트로 공개 게시 나열하기
   
<?php
// include PHP client library
require_once 'buzz.php';

try {
  // set up file store
  $storage = new buzzFileStorage('/tmp/cache');
  
  // get user ID
  $uid = 1;

  // perform authentication with Google 
  $auth = buzzOAuth::performOAuthLogin($storage, $uid);

  // initialize Buzz object  
  $buzz = new buzz($storage, $auth);
      
  // fetch authenticated user's public feed
  $result = $buzz->getPosts('@public', '@me');

  // iterate through feed data
  echo '<h1>' . $result->title . '</h1>';
  echo count($result->posts) . ' post(s) found. <br/>';
  echo '<ol>';
  foreach ($result->posts as $post) {
    echo '<li>';
    echo isset($post->links['alternate'][0]->href) ? 
                '<a href="' . $post->links['alternate'][0]->href . 
     '">' . $post->title . '</a>' : $post->title;
    echo ' (' . date("d M Y h:i", strtotime($post->published)) . ')';  
    echo '</li>';
  }
  echo '</ol>';
} catch (Exception $e) {
  echo 'ERROR:' . $e->getMessage();  
}
?>

목록 2는 소스 파일을 포함하여 시작한 후에 새 buzz 오브젝트를 작성한다. 이 buzz 오브젝트는 Google Buzz API와 통신하기 위한 중심 지점의 역할을 담당하여 Google Buzz 데이터에 액세스하기 위한 다양한 메소드를 노출한다. 오브젝트를 초기화하기 위해 생성자에게 두 개의 인수를 전달한다.

  • 올바르게 구성된 buzzStorage 오브젝트이며, 로컬 캐싱이 어떻게 나타날지 지정한다. Google Buzz PHP 클라이언트 라이브러리는 APC(Alternative PHP Cache), memcached 및 파일 기반 캐싱을 지원하며, 각각 buzzApcStorage, buzzMemcacheStoragebuzzFileStorage 클래스로 표현된다.
  • 올바르게 구성된 buzzOAuth 오브젝트. 이 오브젝트는 정적 buzzOAuth::performOAuthLogin() 메소드로 생성되며, 이는 두 개의 인수인 buzzStorage 오브젝트와 로컬 사용자 ID를 수락한다. buzzOAuth::performOAuthLogin()은 그러면 Google 서버로 OAuth 인증의 수행을 처리하여, 사용자에게 사용자의 Google Buzz 데이터로의 애플리케이션 액세스를 수락하거나 거부하는 적절한 프롬프트를 표시하고 필요한 재이동을 수행한다.

기본 buzz 오브젝트를 작성하면 오브젝트의 getPosts() 메소드를 사용하여 사용자의 액티비티 피드에 액세스할 수 있다. 이 메소드는 피드 결과에 포함되는 다섯 개의 인수인 피드 유형, 사용자 ID 및 댓글 수, 좋아요 및 게시를 수락한다. 이 메소드의 리턴 값은 내포된 PHP 오브젝트의 시리즈이며, 각각은 내재된 Atom 결과 피드에 엔트리를 표현한다. 이제 이 오브젝트 콜렉션을 반복하는 것이 매우 간편하게 되어, 표준 오브젝트->특성 표기를 사용하여 표시하기 위해 관련된 정보를 추출한다. 그림 1에는 결과의 모습을 실례로 보여준다.


그림 1. 공개 게시 목록
게시로의 링크를 포함하여 다섯 개의 공개 게시 목록의 화면 캡처

이제 피드 유형에 대해 간략하게 살펴보자. Google Buzz API는 다음 세 가지의 피드 유형을 제공한다.

  1. 사용자의 공개(public) 피드에는 사용자의 공개 게시가 들어 있고 @public으로 참조된다. 이 피드는 대개 https://www.googleapis.com/buzz/v1/activities/YOUR_ID/@public에 위치한다.
  2. 사용자의 소비(consumption) 피드에는 팔로우되는 사용자로부터의 게시가 들어 있고 @consumption으로 참조된다. 이 피드는 대개 https://www.googleapis.com/buzz/v1/activities/YOUR_ID/@consumption에 위치한다.
  3. 사용자의 개인(personal) 피드에는 사용자의 공개 및 비공개 게시가 들어 있고 @personal로 참조된다. 이 피드는 대개 https://www.googleapis.com/buzz/v1/activities/YOUR_ID/@personal에 위치한다.

consumption 및 personal 피드는 공개 피드에서는 필요하지 않은 인증이 필요하다. 특수 사용자 ID 문자열 @me는 숫자 Google ID 대신에 "현재 인증된 사용자"를 참조하는 편리한 바로 가기로 사용될 수도 있다.

목록 3은 Zend_Rest_Client 라이브러리를 사용하여 목록 2에 상응하는 결과를 만든다.


목록 3. Zend REST 클라이언트로 공개 게시 나열
   
<?php
// load Zend classes
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Rest_Client');

try {
  // get feed of user public activities
  $client = new Zend_Rest_Client('https://www.googleapis.com/buzz/v1/
   activities/YOUR_ID_HERE/@public');
  $result = $client->get();
  
  // iterate through returned feed  
  echo '<h1>' . $result->title . '</h1>';
  echo count($result->entry) . ' post(s) found. <br/>';
  echo '<ol>';
  foreach ($result->entry as $entry) {
    echo '<li>';
    echo isset($entry->link[0][@href]) ? '<a href="' . 
     $entry->link[0][@href] . '">' . $entry->content . 
     '</a>' : $entry->content;
    echo ' (' . date("d M Y h:i", strtotime($entry->published)) . ')';  
    echo '</li>';
  }
  echo "</ol>";
  
} catch (Exception $e) {
  echo 'ERROR:' . $e->getMessage();
}   
?>

목록 3에서 먼저 Zend 클래스 라이브러리를 로드한 후 Zend_Rest_Client 클래스의 인스턴스를 초기화한다. 이전에 목록 1에서 수행한 것과 같이 이 클라이언트를 사용하여 사용자의 공개 피드에 대한 인증되지 않은 GET 요청을 초기화한다. 이 경우에 피드 URL에는 사용자의 Google 프로필 ID가 들어 있어야 함을 참고한다. 그러면 리턴된 Atom 피드는 구문 분석되고 Zend_Rest_Client_Response 오브젝트로 변환된다. 이전처럼 이제 이 오브젝트 콜렉션을 반복하고 그로부터 특정 게시의 세부사항을 추출하는 것이 매우 간편하게 된다.


공개 게시 검색하기

Google이기 때문에 Google Buzz API가 검색 기능을 포함하지 않는다면 정말 이상할 것이다. 그러므로 API는 공개 검색 피드를 제공하여, 이는 모든 사용자가 모든 공개 게시를 검색하고 지정된 검색 용어와 일치하는 것을 리턴하는 데 사용될 수 있다. 공개 검색 피드는 https://www.googleapis.com/buzz/v1/activities/search에서 액세스할 수 있다.

Google Buzz PHP 클라이언트 라이브러리를 사용하는 경우 간단히 search() 메소드를 호출하여 쿼리 용어에 이를 전달할 수 있다. 목록 4에서 시연한다.


목록 4. 버즈 PHP 클라이언트로 게시 검색하기
   
<!DOCTYPE html 
  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <title>Searching public activity feeds</title>
    <style>
    body {
      font-family: Verdana;      
    }
    li {
      border-bottom: solid black 1px;      
      margin: 10px; 
      padding: 2px; 
      width: auto;
      padding-bottom: 20px;
    }
    </style>    
  </head>
  <body>  
    <form method="post" 
     action="<?php echo $_SERVER['PHP_SELF']; ?>">
    Search for: <input type="text" name="q" />
    <input type="submit" name="submit" value="Search">
    </form>    
    <?php

    if (isset($_POST['submit'])) {
      // include PHP client library
      require_once 'buzz.php';

      try {
        // set up file store
        $storage = new buzzFileStorage('/tmp/cache');

        // get user ID
        $uid = 1;

        // perform authentication with Google 
        $auth = buzzOAuth::performOAuthLogin($storage, $uid);

        // initialize Buzz object  
        $buzz = new buzz($storage, $auth);

        // fetch authenticated user's public feed
        $result = $buzz->search($_POST['q']);

        // iterate through feed data
        echo '<h1>' . $result->title . '</h1>';
        echo count($result->posts) . ' post(s) found. <br/>';
        echo '<ol>';
        foreach ($result->posts as $post) {
          echo '<li>';
          echo isset($post->links['alternate'][0]->href) ? 
                '<a href="' . $post->links['alternate'][0]->href . 
           '">' . $post->title . '</a><br/>' : 
           $post->title . '<br/>';
          echo $post->person->name . ' (' . 
           date("d M Y h:i", strtotime($post->published)) . ')';  
          echo '</li>';
        }
        echo '</ol>';
      } catch (Exception $e) {
        echo 'ERROR:' . $e->getMessage();  
      }
    }
    ?>
  </body>
</html>     

목록 4는 사용자에게 웹 양식을 표시하여 하나 이상의 검색 용어를 입력하도록 표시하여 시작한다. 이 양식이 제출되면 스크립트는 새 버즈 오브젝트를 작성하고 검색 용어를 오브젝트의 search() 메소드로 전달한다. 이 메소드는 필수 REST 요청을 Google Buzz API로 생성하고 결과 피드를 buzzPost 오브젝트의 콜렉션으로 변환한다. 이제 할 일은 콜렉션을 루프 처리하여 각각의 콘텐츠, 작성자 및 게시 날짜를 인쇄하는 것만 남았다.

그림 2chocolate에 대한 검색 결과를 보여준다.


그림 2. Google Buzz 검색의 결과
100개의 게시 중 세 개를 보여주는 'chocolate' 단어에 대해 Google Buzz 검색 결과의 화면 캡처

검색 피드가 공개이기 때문에 인증되지 않은 HTTP 클라이언트를 사용하여 이를 쿼리할 수도 있다. 목록 5는 검색 피드 URL을 직접 요청하고 응답을 처리하는 Zend_Rest_Client 라이브러리를 사용하여 보여준다.


목록 5. Zend REST 클라이언트로 게시 검색하기
   
<!DOCTYPE html 
  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <title>Searching public activity feeds</title>
    <style>
    body {
      font-family: Verdana;      
    }
    li {
      border-bottom: solid black 1px;      
      margin: 10px; 
      padding: 2px; 
      width: auto;
      padding-bottom: 20px;
    }
    </style>    
  </head>
  <body>  
    <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    Search for: <input type="text" name="q" />
    <input type="submit" name="submit" value="Search">
    </form>    
    <?php

    if (isset($_POST['submit'])) {
      // load Zend classes
      require_once 'Zend/Loader.php';
      Zend_Loader::loadClass('Zend_Rest_Client');

      try {
        if (empty($_POST['q'])) {
          throw new Exception('No search term provided');  
        }

        // search all feeds
        $url = 'https://www.googleapis.com/buzz/v1/activities/search?q=' . 
         urlencode($_POST['q']);
        $client = new Zend_Rest_Client($url);
        $result = $client->get();

        // iterate through returned feed  
        // display results
        echo '<h1>' . $result->title . '</h1>';
        echo count($result->entry) . ' post(s) found. <br/>';
        echo '<ol>';
        foreach ($result->entry as $entry) {
          echo '<li>';
          echo '<a href="' . $entry->link[0][@href] . '">' . 
           $entry->content . '</a><br/>';  
          echo $entry->author->name;
          echo ' (' . date("d M Y h:i", strtotime($entry->published)) . ')';  
          echo '</li>';
        }
        echo "</ol>";
      } catch (Exception $e) {
        echo 'ERROR:' . $e->getMessage();
      }              
    }
    ?>
  </body>
</html>

목록 5는 새 REST 클라이언트를 초기화하고 이를 사용하여 인증되지 않은 GET 요청을 공개 검색 피드로 전송한다. 사용자 제공 검색 매개변수는 URL 인코드되었으며, 특수 q 매개변수를 통해 요청으로 추가된다. 목록 3과 같이 foreach() 루프를 사용하여 생성된 오브젝트 콜렉션에 대해 반복하여 목록 4의 결과물에 상응하는 결과물을 만든다.

다른 Google 피드와 마찬가지로 Google Buzz API를 통해 개발자들은 REST 쿼리에 다음 매개변수를 추가하여 결과물을 사용자 정의할 수 있다.

  • alt 매개변수는 피드 형식을 지정한다('atom' 또는 'json').
  • max-results 매개변수는 검색하는 최대 엔트리의 수를 지정한다.
  • max-comments 매개변수는 엔트리당 검색하는 최대 댓글의 수를 지정한다.
  • latlon 매개변수는 검색 결과에 대한 지리적 필터를 지정한다.

고급 검색 쿼리 연산자를 요청 URL에 첨부하는 것도 가능하다. 예제와 함께 전체 연산자 목록은 Google Buzz API 개발자 가이드(링크는 참고자료 참조)를 살펴보자.


게시 추가, 편집 및 삭제하기

게시의 나열과 검색을 처리한다. 이제는 이를 추가, 편집하고 삭제해 보자.

REST 호환 API로서 Google Buzz API는 정규 HTTP 동사의 사용을 지원하여 필요한 조치 유형을 표시한다. 따라서 새 게시를 추가하려면 인증된 POST 요청을 피드 URL로 간단히 전송하여 게시 콘텐츠를 요청 본문에 추가한다. 유사한 방식으로 게시를 편집하거나 삭제하기 위해 게시 ID가 들어있는 인증된 PUT 또는 DELETE 요청을 피드 URL로 전송한다.

개발자들이 더 간편하도록 Google Buzz PHP 클라이언트 라이브러리는 위의 태스크를 두 개의 메소드인 updatePost()deletePost()로 압축한다. 이를 시연하기 위해 PHP로 새 Google Buzz 게시를 추가하는 방법을 보여주는 목록 6을 고려하자.


목록 6. 게시 추가하기
   
<?php
// include PHP client library
require_once 'buzz.php';

try {
  // set up file store
  $storage = new buzzFileStorage('/tmp/cache');
  
  // get user ID
  $uid = 1;

  // perform authentication with Google 
  $auth = buzzOAuth::performOAuthLogin($storage, $uid);

  // initialize Buzz object  
  $buzz = new buzz($storage, $auth);

  // add a new post
  $object = new buzzObject('Adding this post through the Buzz API...woohoo!');
  $post = buzzPost::createPost($object);
  $result = $buzz->updatePost($post);
  echo 'Added new post with ID: ' . $result->id;  
} catch (Exception $e) {
  echo 'ERROR:' . $e->getMessage();  
}
?>

비즈니스의 첫 번째 순서는 새 buzz 인스턴스를 작성하는 것이다. 그 후에 새 buzzObject 인스턴스를 작성하고 이를 게시되는 콘텐츠로 초기화한다. 그런 다음 이 buzzObjectbuzzPost::createPost() 메소드를 통해 Google Buzz 엔트리로 변환하고, updatePost() 메소드를 사용하여 전체 요청 패킷을 Google Buzz 서버로 POST한다. 새 게시가 작성되면 서버는 201(Created) 상태 코드와 새롭게 추가된 게시를 표현하는 전체 <entry> 단편을 다시 전송한다.

그림 3목록 6의 결과물을 보여준다.


그림 3. 새 Google Buzz 게시 추가하기의 결과
새 Google Buzz 게시 추가하기의 결과 화면 캡처: Added new post with ID: tag:google.com,2010:buzz:z13

게시를 편집하는 것은 조금 다르다. 먼저 새 게시를 작성한 후에 그 ID를 바꾸려는 게시의 ID로 설정해야 한다. 목록 7에서는 이를 보여준다.


목록 7. 게시 수정하기
   
<?php
// include PHP client library
require_once 'buzz.php';

try {
  // set up file store
  $storage = new buzzFileStorage('/tmp/cache');

  // get user ID
  $uid = 1;

  // perform authentication with Google 
  $auth = buzzOAuth::performOAuthLogin($storage, $uid);

  // initialize Buzz object  
  $buzz = new buzz($storage, $auth);

  // edit a post
  $object = new buzzObject('Updating this post through the Buzz API...yeehaw!');
  $post = buzzPost::createPost($object);
  $post->id = 'tag:google.com,2010:buzz:z133';    
  $result = $buzz->updatePost($post);
  echo 'Updated post with ID: ' . $result->id;  
} catch (Exception $e) {
  echo 'ERROR:' . $e->getMessage();  
}
?>

목록 7에서 코드는 정확한 콘텐츠로 새 buzzPost 오브젝트를 초기화하고 그 ID를 편집된 게시의 ID로 설정한다. updatePost() 메소드는 그러면 PUT 요청을 개정된 엔트리로 Google Buzz 서버에 전송한다. 성공하면 서버는 201(OK) 상태 코드와 개정된 <entry>로 응답할 것이다. 그림 4는 비슷한 결과물을 보여준다.


그림 4. Google Buzz 게시 편집하기의 결과
Google Buzz 게시 편집하기의 결과 화면 캡처: Updated post with ID: tag:google.com,2010:buzz:z133

게시를 삭제하는 것은 비교적 간단하다. 게시 ID를 deletePost() 메소드에 제공하면 Google Buzz PHP 클라이언트 라이브러리는 DELETE 요청을 REST API로 구축하고 전송할 것이다. 목록 8에서 이 프로세스를 보여준다.


목록 8. 게시 삭제하기
   
<?php
// include PHP client library
require_once 'buzz.php';

try {
  // set up file store
  $storage = new buzzFileStorage('/tmp/cache');

  // get user ID
  $uid = 1;

  // perform authentication with Google 
  $auth = buzzOAuth::performOAuthLogin($storage, $uid);

  // initialize Buzz object  
  $buzz = new buzz($storage, $auth);

  // delete a post
  $id = 'tag:google.com,2010:buzz:z13';
  $buzz->deletePost($id);
  echo 'Deleted post with ID: ' . $id;  
} catch (Exception $e) {
  echo 'ERROR:' . $e->getMessage();  
}
?>

그림 5는 결과물을 표시한다.


그림 5. Google Buzz 게시 삭제하기의 결과
Google Buzz 게시 삭제하기의 결과 화면 캡처: Deleted post with ID: tag:google.com,2010:buzz:z13

사용자 검색하기

키워드 검색이 가능할 뿐만 아니라 Google Buzz API는 사람을 이름으로 검색할 수도 있다. 이는 HTTP GET 요청을 https://www.googleapis.com/buzz/v1/people/search라는 URL에 전송하여, 이에 필수 검색 용어를 추가하여 수행된다. 이 요청으로의 응답은 일치하는 사용자 목록과 함께 그 이름과 Google ID가 들어있는 Atom이나 JSON 피드이다.

목록 9는 Google Buzz PHP 클라이언트 라이브러리를 사용하여 이를 수행하는 방법을 보여준다.


목록 9. 버즈 PHP 클라이언트로 사용자 검색하기
       
<!DOCTYPE html 
  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <title>Searching for people</title>
    <style>
    table {
      border-collapse: yes;      
    }
    tr {
      border-bottom: solid black 1px;      
    }
    td {
      vertical-align: top;  
      border: solid black 1px;      
    }
    li {
      margin: 10px; 
      padding: 2px; 
      width: auto;
      padding-bottom: 20px;
    }
    </style>    
  </head>
  <body>  
    <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    Search for people: <input type="text" name="q" />
    <input type="submit" name="submit" value="Search">
    </form>    
    <?php
    if (isset($_POST['submit'])) {
      // include PHP client library
      require_once 'buzz.php';

      try {
        // set up file store
        $storage = new buzzFileStorage('/tmp/cache');

        // get user ID
        $uid = 1;

        // perform authentication with Google 
        $auth = buzzOAuth::performOAuthLogin($storage, $uid);

        // initialize Buzz object  
        $buzz = new buzz($storage, $auth);

        // fetch authenticated user's public feed
        $result = $buzz->searchPeople($_POST['q']);

        // iterate through feed data
        echo '<h1>Search Results</h1>';
        echo '<table>';        
        foreach ($result as $person) {
          echo '<tr>';
          // display user full name and photo
          echo '<td><img src="' . $person->thumbnailUrl . 
           '" /><br/>';  
          echo '<strong>' . $person->name . 
           '</strong></td><td>';

          // fetch user's public feed
          $result = $buzz->getPosts('@public', 
           $person->id, false, false, 3);

          // iterate through feed data 
          echo 'Recent updates: <br/>';
          echo '<ol>';
          foreach ($result->posts as $post) {
            echo '<li>';
            $url = isset($post->links->self[0]->href) ? 
             $post->links->self[0]->href : '#';
            echo '<a href="' . $url . '">' . $post->title . '</a>';  
            echo ' (' . date("d M Y h:i", strtotime($post->published)) . ')';  
            echo '</li>';
          }
          echo '</ol></td>';    
          echo '</tr>';    
        }        
        echo '</table>';
      } catch (Exception $e) {
        echo 'ERROR:' . $e->getMessage();  
      }
    }
    ?>
  </body>
</html>

목록 9는 사용자가 사람의 이름을 검색 양식에 입력하도록 요청한 후에 searchPeople() 메소드를 사용하여 일치하는 사람을 Google 버즈 API에 쿼리한다. 이 메소드의 리턴 값은 buzzPerson 오브젝트의 콜렉션이며, 각각에는 사용자에 대한 정보, 즉 이름, 성, Google ID, Google 프로필 URL, 사진 URL 및 다른 개인 정보가 들어있다. 목록 9는 이 정보를 추출한 후에 Google ID를 getPosts() 메소드로 사용하여 사용자의 가장 최신의 세 개의 게시도 검색한다. 그림 6에 있는 것과 같이 이 모든 정보는 읽기 가능한 웹 페이지에 형식화된다.


그림 6. Google Buzz 개인 검색의 결과
세 개의 샘플 엔트리가 있는 Google Buzz 개인 검색의 결과 화면 캡처

목록 10은 동일한 결과를 완수하기 위해 Zend_Rest_Client 라이브러리를 사용하여 목록 9에 대한 대안을 제공한다.


목록 10. Zend REST 클라이언트로 사용자 검색하기
   
<!DOCTYPE html 
  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <title>Searching for people</title>
    <style>
    table {
      border-collapse: yes;      
    }
    tr {
      border-bottom: solid black 1px;
    }
    td {
      vertical-align: top;  
      border: solid black 1px; 
    }
    li {
      margin: 10px; 
      padding: 2px; 
      width: auto;
      padding-bottom: 20px;
    }
    </style> 
  </head>
  <body>  
    <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
    Search for people: <input type="text" name="q" />
    <input type="submit" name="submit" value="Search">
    </form>
    <?php
    if (isset($_POST['submit'])) {
      // load Zend classes
      require_once 'Zend/Loader.php';
      Zend_Loader::loadClass('Zend_Rest_Client');

      try {
        if (empty($_POST['q'])) {
          throw new Exception('No search term provided');  
        }

        // search people feed
        $client = new Zend_Rest_Client('https://www.googleapis.com/buzz/v1/
         people/search?q=' . urlencode($_POST['q']));
        $result = $client->get();

        // iterate through returned feed  
        // for each result, display user name and photo
        echo '<h1>Search Results</h1>';
        echo '<table>';
        foreach ($result->entry as $entry) {
          echo '<tr>';
          echo '<td><img src="' . $entry->thumbnailUrl . 
           '" /><br/>';  
          echo $entry->displayName . '</td><td>';
          // get feed of user's three most recent public posts
          $client2 = new Zend_Rest_Client('https://www.googleapis.com/buzz/
           v1/activities/' . $entry->id . '/@public?max-results=3');
          $result2 = $client2->get();
          echo 'Recent updates: <br/>';
          echo '<ol>';
          foreach ($result2->entry as $entry2) {
            echo '<li>';
            echo '<a href="' . $entry2->link[0][@href] . '">' . 
             $entry2->content . '</a>';  
            echo ' (' . date("d M Y h:i", strtotime($entry2->published)) . ')';  
            echo '</li>';
          }
          echo "</ol></td>";
          echo '</tr>';
        }
        echo '</table>';
      } catch (Exception $e) {
        echo 'ERROR:' . $e->getMessage();
      }
    }
    ?>
  </body>
</html>

목록 10은 Zend_Rest_Client 라이브러리를 사용하여 사람 검색 서비스에 대한 REST 엔드포인트에 직접 액세스하여 Atom 피드의 오브젝트 표현을 리턴한다. 이 오브젝트 콜렉션은 관련된 정보를 추출하기 위해 필요한 대로 사용할 수 있다. 쿼리 용어는 이 경우에 수동으로 URL 인코드되어야 함을 참고한다.


팔로워 관리하기

사용자는 Google Buzz를 통해 서로를 "팔로우"할 수 있다. 사용자를 자동으로 팔로우하면 게시가 사용자의 consumption 피드의 일부가 된다. Google Buzz API를 통해 이 정보는 https://www.googleapis.com/buzz/v1/people/YOUR_ID/@groups/@followers 및 https://www.googleapis.com/buzz/v1/people/YOUR_ID/@groups/@following 각 URL에서 followerfollowing 피드를 통해 사용 가능하게 된다.

PHP 클라이언트 라이브러리를 사용하여 이 정보를 보려면 followers()following() 메소드를 사용하며, 이는 사용자의 팔로워와 팔로잉을 표현하는 buzzPerson 오브젝트 콜렉션을 리턴한다. 목록 11에 예제가 있다.


목록 11. 팔로워와 팔로잉 나열하기
   
<?php
// include PHP client library
require_once 'buzz.php';

try {
  // set up file store
  $storage = new buzzFileStorage('/tmp/cache');
  
  // get user ID
  $uid = 1;

  // perform authentication with Google 
  $auth = buzzOAuth::performOAuthLogin($storage, $uid);

  // initialize Buzz object  
  $buzz = new buzz($storage, $auth);

  // get followers
  $followers = $buzz->followers('@me');

  echo '<h1>Currently being followed by:</h1>';
  foreach ($followers as $person) {
    displayUserBlock($person);
  }

  // get following
  $following = $buzz->following('@me');
  echo '<h1>Currently following:</h1>';
  foreach ($following as $person) {
    displayUserBlock($person);
  }

} catch (Exception $e) {
  echo 'ERROR:' . $e->getMessage();
}

// render user block
function displayUserBlock($person) {
    // get object from global scope
    global $buzz;

    // display user full name
    echo '<strong>' . $person->name . '</strong><br/>';

    // fetch user's public feed
    $result = $buzz->getPosts('@public', $person->id, false, false, 3);

    // iterate through feed data
    echo '<ol>';
    foreach ($result->posts as $post) {
      echo '<li>';
      $url = isset($post->links->self[0]->href) ? 
       $post->links->self[0]->href : '#';
      echo '<a href="' . $url . '">' . $post->title . 
       '</a>';  
      echo ' (' . date("d M Y h:i", strtotime($post->published)) . ')';
      echo '</li>';
    }
    echo '</ol>';
}
?>

목록 11은 먼저 followers() 메소드를 사용하여 인증된 사용자의 팔로워 목록을 검색한다. 이 메소드의 리턴 값은 buzzPerson 오브젝트의 콜렉션이며, 각각은 사용자 정의된 displayUserBlock() 메소드에 전달된다. 이 메소드는 각 팔로워의 이름과 ID를 검색한 후에 두 번째 요청을 만드는 ID를 사용하여, 이번에는 getPosts() 메소드를 통해 팔로워의 세 개의 최신 게시들을 검색한다. 이 정보는 표시를 위해 형식화되었다.

이 후에 following() 메소드를 사용하여 인증된 사용자에 의해 현재 팔로우된 사용자 목록을 검색한다. 이 메소드로 리턴된 콜렉션은 유사한 방식으로 처리된다.

Google Buzz API도 프로그래밍 방식으로 특정 사용자를 팔로우하거나 팔로우 취소할 수 있다. 이러한 API 메소드는 버즈 오브젝트의 follow()unfollow() 메소드에 반영되며, 둘 다 사용자 ID를 수락하며 인증된 사용자의 팔로우 큐에서부터 사용자를 추가하거나 삭제한다.


예제 애플리케이션

이제 Google Buzz API가 작동하는 방식에 대해 조금 알았으니, 이를 대화식으로 사용하는 방법을 시연하는 간단한 웹 애플리케이션을 만들어 보자. 목록 12목록 2를 업데이트하여 추가 양식을 작성하고 각 게시에 삭제 링크를 첨부한다. 이러한 추가를 통해 인증된 사용자는 공개 피드를 볼 수 있고 새 게시를 대화식으로 추가하거나 여기에서부터 기존 게시를 삭제할 수 있다. —이 모두에서 Google Buzz 인터페이스를 사용하지 않는다.


목록 12. 사용자 게시 나열하기
   
<!DOCTYPE html 
  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
    <style>
    body {
      font-family: Verdana;
    }
    li {
      margin: 10px; 
      padding: 2px; 
      width: auto;
      padding-bottom: 20px;
    }
    </style> 
  </head>
  <body>

  <h1>Add New Post</h1>
  <form method="post" action="add.php">
  Message: <br/>
  <textarea name="buzz" cols="60" rows="5"></textarea><br/>
  <input type="submit" name="submit" value="Post!" />
  </form>

  <h1>Recent Posts</h1>
  <?php
  // include PHP client library
  require_once 'buzz.php';

  try {
    // set up file store
    $storage = new buzzFileStorage('/tmp/cache');

    // get user ID
    $uid = 1;

    // perform authentication with Google 
    $auth = buzzOAuth::performOAuthLogin($storage, $uid);

    // initialize Buzz object  
    $buzz = new buzz($storage, $auth);

    // fetch authenticated user's public feed
    $result = $buzz->getPosts('@public', '@me');

    // iterate through feed data
    echo count($result->posts) . ' post(s) found. <br/>';
    echo '<ol>';
    foreach ($result->posts as $post) {
      echo '<li>';
      echo isset($post->links['alternate'][0]->href) ? 
                '<a href="' . $post->links['alternate'][0]->href . 
       '">' . $post->title . '</a>' : $post->title;
      echo ' (' . date("d M Y h:i", strtotime($post->published)) . ') ';
      echo '<a href="delete.php?id=' . $post->id . '">[Delete this post]</a>';
      echo '</li>';
    }
    echo '</ol>';
  } catch (Exception $e) {
    echo 'ERROR:' . $e->getMessage();
  }
  ?>

      </body>
</html>

목록 12는 두 개의 부분으로 구분된다.

  • 첫 번째 부분은 buzz 오브젝트를 초기화하고 getPosts() 메소드를 사용하여 사용자의 공개 피드를 검색한다. 각 게시는 사용자가 delete.php 스크립트를 통해 게시를 삭제할 수 있는 링크가 함께 나와있다. 게시 ID는 표준 GET 매개변수로 delete.php 스크립트로 전달된다.
  • 두 번째 부분에는 HTML 양식이 들어있으며, 이는 사용자가 새 게시를 입력하는 입력 필드가 제공된다. 양식을 통해 제출된 데이터는 POST를 통해 add.php 스크립트로 전송된다.

목록 13에는 add.php 스크립트가 들어있으며, 이는 POST를 통해 입력 데이터를 수신하며 이를 buzzPost 오브젝트로 변환한다. 그러면 이 오브젝트는 이전에 논의한 updatePost() 메소드를 통해 POST 요청으로 Google Buzz 서비스에 전송된다. 목록 13은 코드를 보여준다.


목록 13. 새 게시 추가하기
   
<!DOCTYPE html 
  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
  </head>
  <body>
  <?php
  if (!isset($_POST['buzz'])) {
    die('ERROR: Please enter some Buzz content!');
  }

  // include PHP client library
  require_once 'buzz.php';

  try {
    // set up file store
    $storage = new buzzFileStorage('/tmp/cache');

    // get user ID
    $uid = 1;

    // perform authentication with Google 
    $auth = buzzOAuth::performOAuthLogin($storage, $uid);

    // initialize Buzz object  
    $buzz = new buzz($storage, $auth);

    // add a new post
    $object = new buzzObject($_POST['buzz']);
    $post = buzzPost::createPost($object);
    $result = $buzz->updatePost($post);
    echo 'Added new post with ID: ' . $result->id;  
  } catch (Exception $e) {
    echo 'ERROR:' . $e->getMessage();  
  }
  ?>

      </body>
</html>

목록 14에는 delete.php 스크립트가 들어있으며, 이는 삭제되는 스크립트의 ID를 수신하고 이 ID를 deletePost() 메소드로 전달한다. 이 메소드는 DELETE 요청을 구축하고 이를 실행하기 위해 Google Buzz API로 넘겨준다. 그 코드는 다음과 같다.


목록 14. 게시 삭제하기
   
<!DOCTYPE html 
  PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  <head>
  </head>
  <body>
<?php
  if (!isset($_GET['id'])) {
    die('ERROR: Please provide a valid Buzz ID for deletion');
  }

  // include PHP client library
  require_once 'buzz.php';

  try {
    // set up file store
    $storage = new buzzFileStorage('/tmp/cache');

    // get user ID
    $uid = 1;

    // perform authentication with Google 
    $auth = buzzOAuth::performOAuthLogin($storage, $uid);

    // initialize Buzz object  
    $buzz = new buzz($storage, $auth);

    // delete a post
    $buzz->deletePost($_GET['id']);
    echo 'Deleted post with ID: ' . $id;  
  } catch (Exception $e) {
    echo 'ERROR:' . $e->getMessage();  
  }
  ?>
  </body>
</html>

그림 7은 목록 12의 출력을 표시한다.


그림 7. Google Buzz 상호작용에 대한 웹 양식
Google Buzz 상호작용에 대한 메시지 웹 양식의 화면 캡처; 가장 최신의 6개의 게시들도 보여준다

결론

이러한 예제가 시연하는 대로 Google Buzz API 및 PHP 클라이언트 라이브러리를 통해 버즈 게시들과 액티비티 스트림을 직접 PHP 애플리케이션으로 통합하는 것은 가능하다. 이 기사에서 예제는 단지 빙산의 일각을 다룬 것에 불과하다. Google Buzz로 다음을 비롯하여 훨씬 더 많은 작업을 수행할 수 있다.

  • 비공개(private) 액티비티 작성하기
  • 무음(mute), 무음 취소(unmute) 및 좋아요 게시
  • 댓글 작성 및 편집
  • 고급 검색 쿼리 작성

이 글을 쓰는 시점에도 Google Buzz API는 여전히 개발 중이기 때문에 앞으로 훨씬 더 나은 장점을 기대해 볼 수 있다!

요약하면 Google Buzz API는 개발자들에게 공개 버즈 콘텐츠를 어느 웹 애플리케이션에서나 통합하기 위한 세련되고 양식 중립적인 메커니즘을 제공한다. 이는 매시업이나 Google Buzz로 자체적인 사용자 정의 인터페이스를 빌드하기에 훌륭하다. 한 번 시도해보고 제공 내역을 알아보자!


참고자료

교육

제품 및 기술 얻기

토론

필자소개

Vikram Vaswani là nhà sáng lập và là tổng giám đốc điều hành (CEO) của công ty Melonfire, công ty dịch vụ tư vấn có chuyên môn đặc biệt về công nghệ và các công cụ mã nguồn mở. Ông cũng là tác giả của các cuốn sách: Giải pháp lập trình PHP và PHP: Hướng dẫn cho những người mới bắt đầu.

잘못된 도움말 신고

부정사용 신고

감사합니다. 이 항목은 운영자가 관심을 표시했습니다.


잘못된 도움말 신고

부정사용 신고

제출실패 신고. 나중에 다시 실행해주세요.


디벨로퍼웍스 로그인


IBM ID가 필요하세요?
IBM ID를 잊으셨습니까?


비밀번호를 잊으셨습니까?
비밀번호 변경

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

화면상에 보여지는 닉네임을 정하세요.

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

3개의 &이나 대쉬를 포함해주시고 31글자내로 제한해주세요.


developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


아티클 순위

의견

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=20
Zone=XML, 오픈 소스
ArticleID=632111
ArticleTitle=PHP로 Google Buzz 스트림 검색 및 통합
publish-date=10262010
author1-email=vikram.melonfire@gmail.com
author1-email-cc=

태그

Help
검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오.

태그를 더 많이 보거나 적게 보기 위해 슬라이더 막대를 사용하십시오.

인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다.

내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.

검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오. 인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다. 내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.