The Google Buzz API and You

Google DevFest Kuala Lumpur, July 16th 2010

Hello
Timothy Jordan
Developer Advocate, Google
buzz.timothyjordan.com
@timothyjordan

Hello
Bob Aman
Developer Programs Engineer, Google
buzz.sporkmonger.com
@sporkmonger

This talk
• Google Buzz & The Conversational Web
• Open Standards
• Google Buzz API
• Examples
• What’s next?

Google Buzz
...and the conversational web

Open Standards
...are a really good thing

Google Buzz API

Warning!

https://www.googleapis.com/buzz/v1/

https://www.googleapis.com/buzz/v1/

https://code.google.com/apis/buzz/docs/

https://www.googleapis.com/buzz/v1/

http://code.google.com/p/oacurl/

https://www.googleapis.com/buzz/v1/

http://code.google.com/p/buzz-php-client/
http://code.google.com/p/buzz-python-client/
http://code.google.com/p/buzz-java-client/

https://www.googleapis.com/buzz/v1/
alt
• alt=atom returns an Atom representation of the data.
• alt=json returns a JSON representation of the data.
prettyprint
• If prettyprint=true, the results
• Default: prettyprint=false

returned by the server will be human readable

https://www.googleapis.com/buzz/v1/activities/@me/@self?alt=json&prettyprint=true

https://www.googleapis.com/buzz/v1/
preview the operation.
maximum number of results.
max-liked=N
maximum number of likes
max-comments=N maximum number of comments
c={token}
continuation token

• preview=true
• max-results=N


https://www.googleapis.com/buzz/v1/activities/@me/@self?max-results=20&c={token}

https://www.googleapis.com/buzz/v1/
• q={query}
• lat, lon, radius
• bbox

search.
geo location.
bounding box.

https://www.googleapis.com/buzz/v1/activities/search?q={q}&lat={l}&lon={l}&radius={r}

Activity Streams

Identity

Identity
Activities

Identity
Activities
Objects

Timothy
Shares
A Link

Barack Obama
Started Following
Timothy Jordan

Timothy Jordan
Started Following
Barack Obama

2010:buzz:z13ispojgwqsinyij04chlupum2ytbspsa4?alt\u003djson",
     "type": "json"
    }
   ],
   "replies": [
    {
     "href": "{url}/{userId}/@self/{commentId}/@comments?alt=json",
     "type": "application/json",
     "count": 2,
     "updated": "2010-05-09T02:53:13.730Z"
    }
   ]
  },

  "actor": {
   "id": "110242419133439594545",
   "name": "Chris Chabot",
   "profileUrl": "{url}/chabotc",
   "thumbnailUrl": "{url}/chabotc/thumb.jpg"
  },
  "verbs": [
   "post"
  ],
  "object": {
   "type": "note",
   "content": "content goes here",
   "links": {
    "alternate": [
     {
      "href": "http://www.google.com/buzz/a/google.com",
      "type": "text/html"
     }
    ]
   }
  },

   ],
   "replies": [
    {
     "href": "{url}/{userId}/@self/{commentId}/@comments?alt=json",
     "type": "application/json",
     "count": 2,
     "updated": "2010-05-09T02:53:13.730Z"
    }
   ]
  },
  "actor": {
   "id": "110242419133439594545",
   "name": "Chris Chabot",
   "profileUrl": "{url}/chabotc",
   "thumbnailUrl": "{url}/chabotc/thumb.jpg"
  },

  "verbs": [
   "post"
  ],
  "object": {
   "type": "note",
   "content": "content goes here",
   "links": {
    "alternate": [
     {
      "href": "http://www.google.com/buzz/a/google.com",
      "type": "text/html"
     }
    ]
   }
  },
  "source": {
   "title": "Buzz"
  },
  "visibility": {
   "entries": [

   ],
   "replies": [
    {
     "href": "{url}/{userId}/@self/{commentId}/@comments?alt=json",
     "type": "application/json",
     "count": 2,
     "updated": "2010-05-09T02:53:13.730Z"
    }
   ]
  },
  "actor": {
   "id": "110242419133439594545",
   "name": "Chris Chabot",
   "profileUrl": "{url}/chabotc",
   "thumbnailUrl": "{url}/chabotc/thumb.jpg"
  },
  "verbs": [
   "post"
  ],

  "object": {
   "type": "note",
   "content": "content goes here"
   }
  },
  "source": {
   "title": "Buzz"
  },
  "visibility": {
   "entries": [
    {
     "id": "https://www.googleapis.com/buzz/v1/people/@me/@groups/@public?alt\u003djson",
     "title": "Public"
    }
   ]
  }
 }

{
  "kind": "buzz#activity",

  "title": "note to self",
  "published": "2010-05-09T02:53:13.000Z",
  "updated": "2010-05-09T02:53:13.730Z",
   "id": "tag:google.com,2010:buzz:foo",
  "links": {
   "liked": [
    {
     "href": "https://www.googleapis.com/buzz/v1/activities/110242419133439594545/@self/tag:google.com,
2010:buzz:z13ispojgwqsinyij04chlupum2ytbspsa4/@liked?alt\u003djson",
     "type": "application/json",
     "count": 0
    }
   ],
   "alternate": [
    {
     "href": "http://www.google.com/buzz/a/google.com",
     "type": "text/html"
    }
   ],
   "self": [
    {
     "href": "https://www.googleapis.com/buzz/v1/activities/110242419133439594545/@self/tag:google.com,
2010:buzz:z13ispojgwqsinyij04chlupum2ytbspsa4?alt\u003djson",

{
  "kind": "buzz#activity",
  "title": "note to self",
  "published": "2010-05-09T02:53:13.000Z",
  "updated": "2010-05-09T02:53:13.730Z",
   "id": "tag:google.com,2010:buzz:foo",
  "links": {

   "liked": [
    {
     "href": "{url}/{userid}/@self/{commentId}/@liked?alt=json",
     "type": "application/json",
     "count": 4,
"updated": "2010-05-09T02:53:13.730Z"
    }
   ],
   "alternate": [
    {
     "href": "http://www.google.com/buzz/a/google.com",
     "type": "text/html"
    }
   ],
   "self": [
    {
     "href": "https://www.googleapis.com/buzz/v1/activities/110242419133439594545/@self/tag:google.com,
2010:buzz:z13ispojgwqsinyij04chlupum2ytbspsa4?alt\u003djson",
     "type": "json"

   "alternate": [
    {
     "href": "http://www.google.com/buzz/a/google.com",
     "type": "text/html"
    }
   ],
   "self": [
    {
     "href": "https://www.googleapis.com/buzz/v1/activities/110242419133439594545/@self/tag:google.com,
2010:buzz:z13ispojgwqsinyij04chlupum2ytbspsa4?alt\u003djson",
     "type": "json"
    }
   ],

"replies": [
    {
     "href": "{url}/{userId}/@self/{commentId}/@comments?alt=json",
     "type": "application/json",
     "count": 2,
     "updated": "2010-05-09T02:53:13.730Z"
    }
   ]
   

  },
  "actor": {
   "id": "110242419133439594545",
   "name": "Chris Chabot",
   "profileUrl": "http://www.google.com/profiles/a/google.com/110242419133439594545",
   "thumbnailUrl": ""
  },
  "verbs": [
   "post"
  ],
  "object": {

  },
  "verbs": [
   "post"
  ],
  "object": {
   "type": "note",
   "content": "content goes here",
   "links": {
    "alternate": [
     {
      "href": "http://www.google.com/buzz/a/google.com",
      "type": "text/html"
     }
    ]
   }
  },

  "source": {
   "title": "Buzz"
  },
  "visibility": {
   "entries": [
    {
     "id": "https://www.googleapis.com/buzz/v1/people/@me/@groups/@public?alt\u003djson",
     "title": "Public"
    }
   ]
  }
 }

  },
  "verbs": [
   "post"
  ],
  "object": {
   "type": "note",
   "content": "content goes here",
   "links": {
    "alternate": [
     {
      "href": "http://www.google.com/buzz/a/google.com",
      "type": "text/html"
     }
    ]
   }
  },
  "source": {
   "title": "Buzz"
  },

"visibility": {
   "entries": [
    {
     "id": "{url}/people/@me/@groups/@public?alt=json",
     "title": "Public"
    }
   ]
  }
  

 }

    "alternate": [
     {
      "href": "http://www.google.com/buzz/a/google.com",
      "type": "text/html"
     }
    ]
   }
  },
  "source": {
   "title": "Buzz"
  },
  "visibility": {
   "entries": [
    {
     "id": "{url}/people/@me/@groups/@public?alt=json",
     "title": "Public"
    }
   ]
},

"geocode": "37.783471 -122.39922",
"address": "701-737 Folsom St, San Francisco, CA 94103, USA",
"placeName": "300 3rd St, San Francisco, CA 94107"
}
 }

  "object": {
   "type": "note",
   "content": "content goes here",

"attachments": [
{
"type": "article",
"title": "Name of the link",
"links": {
"alternate": [
{
"href": "{url}/to/article.html",
"type": "text/html"
}
]
}
}

  }

]

  "object": {
   "type": "note",
   "content": "content goes here",

"attachments": [
     {
      "type": "photo",
      "links": {
       "preview": [
        {
         "href": "{url}/image_thumb.jpg",
         "type": "image/jpeg"
        }
       ],
       "enclosure": [
        {
         "href": "{url}/image.jpg",
         "type": "image/jpeg",
         "height": 190,
         "width": 260
        }
       ]

   

     }
    }
   ]
  }

   "object": {
    "type": "note",
    "content": "content goes here",
"attachments": [
{

"type": "video",
"title": "video description goes here",
"links": {
"alternate": [
{
"href": "http://www.youtube.com/watch?v=abcdef",
"type": "text/html"
}
],
"preview": [
{
"href": "{url}/default.jpg",
"type": "image/jpeg"
},
{
"href": "{url}/proxy?thumbnail_default.jpg",
"type": "image/jpeg"
}
]
}
}
]

Verbs
Favorite
Follow
Friend
Join
Play
Post
Save
Share
Tag
Update

Objects
Article
Audio
Bookmark
Comment
File
Folder
Group
List
Note
Person

Photo
Photo Album
Place
Playlist
Product
Review
Service
Status
Video

Verbs
Favorite
Follow
Friend
Join
Play
Post
Save
Share
Tag
Update

Objects
Article
Audio
Bookmark
Comment
File
Folder
Group
List
Note
Person

Photo
Photo Album
Place
Playlist
Product
Review
Service
Status
Video

Auth url:
scope:
domain:
iconUrl:

https://www.google.com/buzz/api/auth/OAuthAuthorizeToken
https://www.googleapis.com/auth/buzz
www.example.org
http://www.example.org/icon.png

https://www.google.com/buzz/api/auth/OAuthAuthorizeToken
?scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fbuzz
&domain=www.example.org
&oauth_token=

http://code.google.com/p/oacurl/

http://code.google.com/p/oacurl/

mac:~ user$ echo \
  '{
    "data": {
      "object": {
        "type": "note",
        "content": "Bzz! Bzz! via JSON"
      }
    }
   }'| oacurl -t JSON -X POST \
"https://www.googleapis.com/buzz/v1/activities/@me/@self?alt=json"

http://code.google.com/p/oacurl/

http://code.google.com/p/oacurl/

mac:~ user$ echo '' | oacurl -X PUT \
"https://www.googleapis.com/buzz/v1/activities/@me/@liked/{activityId}"

http://code.google.com/p/oacurl/

http://code.google.com/p/oacurl/

mac:~ user$ oacurl -X DELETE \
"https://www.googleapis.com/buzz/v1/activities/@me/@liked/{activityId}"

Examples
...for fun and profit

Ping.fm

Marginize

Socialwok

Tweetdeck

Meebo bar

Shareaholic

Klout

Seesmic

Buzzzy

Boxee

TweetDeck

Seesmic

Buzz Bingo
buzz-bingo.appspot.com

Sign-In & Auth for Buzz

client = buzz.Client()
client.build_oauth_consumer(
  OAUTH_CONSUMER_KEY,
  OAUTH_CONSUMER_SECRET
)
client.oauth_scopes.append(
  buzz.FULL_ACCESS_SCOPE
)

Sign-In & Auth for Buzz

request_token = \
  client.fetch_oauth_request_token(
    'http://example.com/oauth/callback/'
  )
# Save request token to the data store
authorization_url = \
  client.build_oauth_authorization_url(
    request_token
  )

Sign-In & Auth for Buzz

# User visits the authorization_url

Sign-In & Auth for Buzz

verifier = request.get('oauth_verifier')
# Lookup request_token in data store
client.oauth_request_token = request_token
access_token = \
  client.fetch_oauth_access_token(verifier
)
# Save access token to the data store

Board Marked

if post.attachments:
  for attachment in post.attachments:
    if attachment.type == 'article':
      self.award_badge('share')
      break
if post.geocode and \
    post.actor.id != self.key().name():
  self.award_badge('geo')
elif post.geocode:
  self.award_badge('mobile')

Board Marked

# Create the attachments for the post
badge_attachment = buzz.Attachment(
  type='photo', enclosure=badge.badge_icon
)
link_attachment = buzz.Attachment(
  type='article',
  title='Buzz Bingo',
  uri='http://buzz-bingo.appspot.com/'
)

Board Marked

# Assemble our announcement Buzz post
badge_post = buzz.Post(
  content=post_content,
  attachments=[
    badge_attachment,
    link_attachment
  ],
  geocode=VENUE_GEOCODE,
  place_id=VENUE_PLACE_ID
)
# Create the post
self.client.create_post(badge_post)

Bingo!

if (5 in horizontal_counts) or \
    (5 in vertical_counts):
  self.award_badge('bingo')

Buzz Bingo is open source!
code.google.com/p/buzz-bingo
buzz-bingo.appspot.com

Conclusion
What’s next?

https://code.google.com/apis/buzz/docs/

https://groups.google.com/group/google-buzz-api

http://code.google.com/p/oacurl/
http://code.google.com/p/buzz-php-client/
http://code.google.com/p/buzz-python-client/
http://code.google.com/p/buzz-java-client/

Questions and Answers...
Timothy Jordan
Developer Advocate, Google
buzz.timothyjordan.com
@timothyjordan

Bob Aman
Developer Programs Engineer, Google
buzz.sporkmonger.com
@sporkmonger

Starter Projects

code.google.com/p/buzz-codelabs

Master your semester with Scribd & The New York Times

Special offer for students: Only $4.99/month.

Master your semester with Scribd & The New York Times

Cancel anytime.