Vous êtes sur la page 1sur 139

The Google Buzz API and You

New York City, July 20th, 2010

Google Confidential and Proprietary 1


Hello
Timothy Jordan
Developer Advocate, Google

buzz.timothyjordan.com
@timothyjordan
Tonight

• This Talk

• Answers & Questions

• Hack Time

• Demos & prizes


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
PubSubHubbub
PubSubHubbub

• Discover the Hub


PubSubHubbub

• Discover the Hub


PubSubHubbub

• Discover the Hub

• Subscription Request
PubSubHubbub

• Discover the Hub

• Subscription Request
PubSubHubbub

• Discover the Hub

• Subscription Request

• Verify Subscription Request


PubSubHubbub

• Discover the Hub

• Subscription Request

• Verify Subscription Request


PubSubHubbub

• Discover the Hub

• Subscription Request

• Verify Subscription Request

• Receive Updates
Salmon

Source
Salmon

New
Content

Source
Salmon

New
Content

Source PubSubHubbub Aggregator


Salmon

New New
Content Content

Source PubSubHubbub Aggregator


Salmon

New New
Content Content

Source PubSubHubbub Aggregator New


Comment
Salmon

New New
Content Content

Source Salmon Aggregator New


Comment
Salmon

New New
Content Content

Source New Salmon Aggregator New


Comment Comment
Salmon

New New
Content Content

Source New Salmon Aggregator New


Comment Comment

Salmon

Aggregator
Aggregator
Aggregator
Aggregator
Aggregator
Aggregator
Salmon

New New
Content Content

Source New Salmon Aggregator New


Comment Comment

Salmon
New
New
New
Comment
New
New Comment
New
Comment
New
New New
Comment
Content
New Comment
Content
New New Comment
Content
Content
Content
Aggregator Content
Aggregator
Aggregator
Aggregator
Aggregator
Aggregator
Activity Streams

Identity
Activity Streams

Identity

Activities
Activity Streams

Identity

Activities

Objects
Activity Streams

Timothy

Shares

A Link
Activity Streams

Barack Obama

Started Following

Timothy Jordan
Activity Streams

Timothy Jordan

Started Following

Barack Obama
Activity Streams

Timothy Jordan

Has Tea With

Bella Swan
Activity Streams

Timothy Jordan

Has Tea With

Bella Swan
Google Buzz API

36
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 returned by the server will be human readable
• Default: prettyprint=false

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

• preview=true preview the operation.


• max-results=N maximum number of results.
• max-liked=N maximum number of likes
• max-comments=N maximum number of comments
• c={token} continuation token

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

• q={query} search.
• lat, lon, radius geo location.
• bbox bounding box.

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

Activities

Objects
Timothy

Shares

A Link
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 Objects
Favorite Article Photo
Follow Audio Photo Album
Friend Bookmark Place
Join Comment Playlist
Play File Product
Post Folder Review
Save Group Service
Share List Status
Tag Note Video
Update Person
Verbs Objects
Favorite Article Photo
Follow Audio Photo Album
Friend Bookmark Place
Join Comment Playlist
Play File Product
Post Folder Review
Save Group Service
Share List Status
Tag Note Video
Update Person
Auth url: https://www.google.com/buzz/api/auth/OAuthAuthorizeToken
scope: https://www.googleapis.com/auth/buzz
domain: www.example.org
iconUrl: 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}"
Introducing
Introducing

• Comments by the user


Introducing

• Comments by the user

• Likes by the user


Introducing

• Comments by the user

• Likes by the user

• Shared counts
and...
The Google Buzz Firehose is for everyone!
Examples
...for fun and profit
Ping.fm Marginize Socialwok

Tweetdeck Meebo bar Shareaholic

Klout Seesmic Buzzzy


google.com/buzz/apps
Boxee
boxee.tv
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/
Answers and Questions...

Timothy Jordan
Developer Advocate, Google

buzz.timothyjordan.com
@timothyjordan
Starter Projects

code.google.com/p/buzz-codelabs