The Social Web Is Better When It's Open

Google Day, July 14, 2010

Timothy Jordan Developer Advocate, Google

Hello, world!

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

The Social Web Is Better When It's Open

The Social Web Is Better When It's Open
• Let’s talk about us

The Social Web Is Better When It's Open
• Let’s talk about us • Open Standards

The Social Web Is Better When It's Open
• Let’s talk about us • Open Standards • Google Buzz

The Social Web Is Better When It's Open
• Let’s talk about us • Open Standards • Google Buzz • Google Buzz API

The Social Web Is Better When It's Open
• Let’s talk about us • Open Standards • Google Buzz • Google Buzz API • Examples

The Social Web Is Better When It's Open
• Let’s talk about us • Open Standards • Google Buzz • Google Buzz API • Examples • Conclusion

The Social Web Is Better When It's Open
• Let’s talk about us • Open Standards • Google Buzz • Google Buzz API • Examples • Conclusion • Questions and Answers

Let’s talk about us...
May I remind you that you have now been in that bath for over three years?*

*Hitchhiker’s Guide to the Galaxy, Douglas Adams

“We are natural villagers. For most of mankind’s history we have lived in very small communities in which we knew everybody and everybody knew us. But gradually there grew to be far too many of us, and our communities became too large and disparate for us to be able to feel a part of them, and our technologies were unequal to the task of drawing us together. But that is changing.” How to Stop Worrying and Learn to Love the Internet
Douglas Adams

http://www.douglasadams.com/dna/19990901-00-a.html

“Interactivity. Many-to-many communications. Pervasive networking. These are cumbersome new terms for elements in our lives so fundamental that, before we lost them, we didn’t even know to have names for them.” How to Stop Worrying and Learn to Love the Internet
Douglas Adams

http://www.douglasadams.com/dna/19990901-00-a.html

1) everything that’s already in the world when you’re born is just normal

How to Stop Worrying and Learn to Love the Internet
Douglas Adams

http://www.douglasadams.com/dna/19990901-00-a.html

2) anything that gets invented between then and before you turn thirty is incredibly exciting and creative and with any luck you can make a career out of it;

How to Stop Worrying and Learn to Love the Internet
Douglas Adams

http://www.douglasadams.com/dna/19990901-00-a.html

3) anything that gets invented after you’re thirty is against the natural order of things and the beginning of the end of civilisation as we know it until it’s been around for about ten years when it gradually turns out to be alright really. How to Stop Worrying and Learn to Love the Internet
Douglas Adams

http://www.douglasadams.com/dna/19990901-00-a.html

“These tools don’t get socially interesting until they get technologically boring. It isn’t when the shining new tools show up that their uses start permeating society. It’s when everybody is able to take them for granted.” Clay Shirky

http://www.ted.com/talks/clay_shirky_how_cellphones_twitter_facebook_can_make_history.html

context

Open Standards

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

Google Buzz
...and the conversational web

code.google.com/apis/buzz

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=true • max-results=N • • •

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

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

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
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.appspot.com

Buzz Bingo

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

Social?

Social!

This is Natural

Open Standards

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/

Thank you

Questions and Answers

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