Twitter Meetup at the Hacker Dojo

5,926 views
5,811 views

Published on

What's Next & Big with Twitter

Published in: Technology
0 Comments
16 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,926
On SlideShare
0
From Embeds
0
Number of Embeds
62
Actions
Shares
0
Downloads
49
Comments
0
Likes
16
Embeds 0
No embeds

No notes for slide

Twitter Meetup at the Hacker Dojo

  1. 1. TM 1
  2. 2. What's Next & Big with Twitter #tmeetup @themattharris @raffi @hackerdojo @hackerdojo TM July 1, 2010 2
  3. 3. About us TM 3
  4. 4. The team TM 4
  5. 5. @themattharris About us TM 5
  6. 6. @raffi About us TM 6
  7. 7. TM 7
  8. 8. 160,000 TM 8
  9. 9. 160,000 Registered third-party Applications TM 9
  10. 10. 75% TM 10
  11. 11. 75% Traffic on Twitter comes from places outside of twitter.com TM 11
  12. 12. 65 Million TM 12
  13. 13. 65 Million Tweets per day TM 13
  14. 14. 65% TM 14
  15. 15. 65% Users are outside of the United States TM 15
  16. 16. 3.5 Billion TM 16
  17. 17. 3.5 Billion Requests per day to the API TM 17
  18. 18. 2,928 TM 18
  19. 19. 2,928 Tweets-per-second (June 14 2010, Brazil vs North Korea) TM 19
  20. 20. 2,928 3,283 Tweets-per-second (June 24 2010, Japan vs Denmark) TM 20
  21. 21. What is ? The Twitter Platform TM 21
  22. 22. What is ? ‣ REST API ‣ provides the “basic” Twitter functionality - tweet, follow, etc. ‣ all functions available on your timeline on twitter.com ‣ Search API ‣ real-time search index ‣ get “top tweets” / relevant search results ‣ Streaming API ‣ HTTP long-poll connection ‣ tweets come out of the system in real-time TM 22
  23. 23. The goals of ‣ To be ridiculously simple ‣ To be obvious ‣ To be self-describing TM 23
  24. 24. Authenticating to ‣ OAuth 1.0a ‣ Signing “write” requests ‣ Give Twitter visibility into the stack ‣ Applications don’t have the user’s username / password ‣ User can change password at any time ‣ User is secure in knowing his/her password is not stored ‣ User can revoke permissions to app at any time ‣ User has one place to see which applications have access to their account TM 24
  25. 25. twurl ‣ http://github.com/marcel/twurl ‣ Command line tool to interact with using OAuth ‣ Transparently handles OAuth signing against ‣ POST and GET data ‣ Trace requests TM 25
  26. 26. Limits ‣ 175 API calls/hour using OAuth against api.twitter.com ‣ Unauthenticated it goes against the source IP address ‣ Authenticated it goes against the calling user ‣ “Natural” limits on ‣ number of tweets sent ‣ number of DMs sent ‣ number of followings / unfollowings ‣ Status limits ‣ No duplicate tweets ‣ No malware links in tweets TM 26
  27. 27. @anywhere TM 27
  28. 28. Core Features ‣ Hovercards ‣ Tweet Box ‣ Follow Buttons ‣ Linkify TM 28
  29. 29. Easiest Example <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-type" content="text/html; charset=utf-8"> <title>Anywhere Sample</title> <script src="http://platform.twitter.com/anywhere.js?id=YOUR_API_KEY&amp;v=1"> </script> <script type="text/javascript"> twttr.anywhere(function(T) { T.hovercards(); T("#follow-placeholder").followButton('themattharris'); T("#tbox").tweetBox(); }); </script> </head> <body> <p>Some text with @twitter screen names in it.</p> <div id="tweets"></div> <div id="tbox"></div> <span id="follow-placeholder"></span> </body> </html> TM 29
  30. 30. Easiest Example TM 30
  31. 31. Easiest Example <head> <script src="http://platform.twitter.com/anywhere.js?id=YOUR_API_KEY&amp;v=1"> </script> <script type="text/javascript"> twttr.anywhere(function(T) { T.hovercards(); T("#follow-placeholder").followButton('themattharris'); T("#tbox").tweetBox(); }); </script> </head> TM 31
  32. 32. Easiest Example <head> <script src="http://platform.twitter.com/anywhere.js?id=YOUR_API_KEY&amp;v=1"> </script> <script type="text/javascript"> twttr.anywhere(function(T) { T.hovercards(); T("#follow-placeholder").followButton('themattharris'); T("#tbox").tweetBox(); }); </script> </head> TM 32
  33. 33. Easiest Example <head> <script src="http://platform.twitter.com/anywhere.js?id=YOUR_API_KEY&amp;v=1"> </script> <script type="text/javascript"> twttr.anywhere(function(T) { T.hovercards(); T("#follow-placeholder").followButton('themattharris'); T("#tbox").tweetBox(); }); </script> </head> TM 33
  34. 34. Easiest Example <head> <script src="http://platform.twitter.com/anywhere.js?id=YOUR_API_KEY&amp;v=1"> </script> <script type="text/javascript"> twttr.anywhere(function(T) { T.hovercards(); T("#follow-placeholder").followButton('themattharris'); T("#tbox").tweetBox(); }); </script> </head> TM 34
  35. 35. Complex Example twttr.anywhere(function (T) { var currentUser, screenName, profileImage, profileImageTag; var onLogin = function() { currentUser = T.currentUser; screenName = currentUser.data('screen_name'); profileImage = currentUser.data('profile_image_url'); profileImageTag = "<img src='" + profileImage + "'/>"; document.getElementById('connect-placeholder').innerHTML = "Logged in as " + profileImageTag + " @" + screenName; document.getElementById('tbox').style.display = 'block'; document.getElementById('follow-placeholder').style.display = 'block'; document.getElementById('signout').style.display = 'block'; T("#follow-placeholder").followButton('themattharris'); T("#tbox").tweetBox({ label: "Careful! This is a real tweet box.", defaultContent: "tweet tweet ", height: 300, width: 700 }); }, TM 35
  36. 36. Complex Example cleanup = function() { document.getElementById('connect-placeholder').innerHTML = ''; document.getElementById('signout').style.display = 'none'; document.getElementById('tbox').style.display = 'none'; document.getElementById('follow-placeholder').style.display = 'none'; }, init = function() { if (T.isConnected()) { onLogin(); } else { T("#connect-placeholder").connectButton({ authComplete: function(user) { onLogin(); }, signOut: function() { cleanup(); init(); } }); } }; init(); T.hovercards({ expanded: true }); }); TM 36
  37. 37. Easiest Example TM 37
  38. 38. More Info... Check out bit.ly/anywhere-begin TM 38
  39. 39. OAuthpocalypse The day is 30th June 16th August 2010 TM 39
  40. 40. What you need to know ‣ All applications must be using OAuth for the REST API ‣ Streaming API will still support Basic Auth ‣ Search API has no auth ‣ OAuth key exchange for Open Source Applications ‣ Replace curl with twurl for debugging http://dev.twitter.com/pages/auth_overview http://github.com/marcel/twurl TM 40
  41. 41. OAuth Methods ‣ Web must use three legged OAuth ‣ Desktop and mobile apps can also use out-of-band OAuth ‣ Some desktop and mobile apps will be considered for xAuth TM 41
  42. 42. xAuth not XAuth xAuth is OAuth http://dev.twitter.com/pages/xauth TM 42
  43. 43. Check your host! api.twitter.com twitter.com TM 43
  44. 44. Libraries ActionScript/Flash Objective-C/Cocoa & iPhone Programming C/C++ Perl C#/.NET PHP Clojure Python Erlang Qt Java Ruby JavaScript Scala http://dev.twitter.com/pages/oauth_libraries TM 44
  45. 45. OAuth Echo TM 45
  46. 46. OAuth Echo ‣ Delegation for Identity Verification ‣ Pass the header needed for an application to confirm your identify with Twitter TM 46
  47. 47. Services offering it ‣ yFrog ‣ Mobypicture ‣ TwitPic ‣ Twitgoo ‣ TwitVid ‣ Posterous ‣ TweetPhoto ‣ img.ly ‣ Vodpod TM 47
  48. 48. Geo TM 48
  49. 49. Endpoints ‣ /1/geo/search ‣ /1/geo/similar_places ‣ /1/geo/reverse_geocode ‣ /1/geo/id/:id ‣ /1/geo/place TM 49
  50. 50. /1/geo/search ‣ Find places to use in status updates ‣ Search by lat, long, IP or free-form name. Also search by attribute. ‣ Limit to poi, neighborhood, city, admin or country ‣ Find only places within another if desired ‣ Set a callback ‣ Use authorisation to bias ordering to the users location history http://api.twitter.com/1/geo/search.json TM 50
  51. 51. /1/geo/similar_places ‣ Find places to use in status updates ‣ Search by lat, long, free-form name. Also search by attribute. ‣ Find only places within another if desired ‣ Set a callback ‣ Search by attribute http://api.twitter.com/1/geo/similar_places.json TM 51
  52. 52. /1/geo/similar_places ‣ Must make this call before creating a place ‣ Returns a creation token http://api.twitter.com/1/geo/similar_places.json TM 52
  53. 53. /1/geo/reverse_geocode ‣ Find 20 places around the provided lat, long ‣ Limit to poi, neighborhood, city, admin or country ‣ Set a callback ‣ /geo/search is better http://api.twitter.com/1/geo/reverse_geocode.json TM 53
  54. 54. /1/geo/id/:id ‣ Information on a place ‣ :id from /geo/search methods http://api.twitter.com/1/geo/id/:id TM 54
  55. 55. /1/geo/place ‣ create a place ‣ must have ‣ name ‣ contained_within - place_id of another place, e.g. city ‣ token ‣ lat, long ‣ Set a callback http://api.twitter.com/1/geo/place TM 55
  56. 56. Create a place - the flow ‣ /1/geo/search ‣ show what’s nearby ‣ /1/geo/similar_places ‣ not found in search, find by name ‣ /1/geo/place ‣ still not found, create a new place http://api.twitter.com/1/geo/place TM 56
  57. 57. Use in search ‣ just pass place:place_id http://search.twitter.com/search?q=place%3A247f43d441defc03 TM 57
  58. 58. Attributes { "name": "Twitter HQ", "polylines": [ ], "country_code": "US", "country": "The United States of America", "attributes": { "street_address": "795 Folsom St", "1166:id": "49547", "623:id": "210176" }, "url": "http://api.twitter.com/1/geo/id/247f43d441defc03.json", "id": "247f43d441defc03", } TM 58
  59. 59. Timelines TM 59
  60. 60. Timeline Endpoints ‣ /1/statuses/public_timeline ‣ /1/statuses/home_timeline ‣ /1/statuses/friends_timeline ‣ /1/statuses/status_timeline ‣ /1/statuses/mentions ‣ /1/statuses/retweeted_by_me ‣ /1/statuses/retweeted_to_me ‣ /1/statuses/retweets_of_me TM 60
  61. 61. Modifiers ‣ include_rts Accepted values: true, 1, t TM 61
  62. 62. Modifiers ‣ include_rts ‣ include_entities Accepted values: true, 1, t TM 62
  63. 63. Modifiers ‣ include_rts ‣ include_entities ‣ trim_user Accepted values: true, 1, t TM 63
  64. 64. What is a Tweet? The anatomy of a status update TM 64
  65. 65. Dissecting a status object The tweet's unique ID. These Text of the tweet. IDs are roughly sorted & Consecutive duplicate tweets developers should treat them are rejected. 140 character as opaque (http://bit.ly/dCkppc). max (http://bit.ly/4ud3he). DEPRECATED {"id"=>12296272736, "text"=> "An early look at Annotations: http://groups.google.com/group/twitter-api-announce/browse_thread/thread/fa5da2608865453", Tweet's "created_at"=>"Fri Apr 16 17:55:46 +0000 2010", creation "in_reply_to_user_id"=>nil, The ID of an existing tweet that date. "in_reply_to_screen_name"=>nil, this tweet is in reply to. Won't "in_reply_to_status_id"=>nil be set unless the author of the The author's The screen name & "favorited"=>false, user ID. user ID of replied to referenced tweet is mentioned. "truncated"=>false, Truncated to 140 characters. Only tweet author. "user"=> possible from SMS. The author's {"id"=>6253282, user name. The author's "screen_name"=>"twitterapi", The author's biography. "name"=>"Twitter API", screen name. ded object can get out of sync. "description"=> "The Real Twitter API. I tweet about API changes, service issues and e author of the tweet. This happily answer questions about Twitter and our API. Don't get an answer? It's on my website.", "url"=>"http://apiwiki.twitter.com", The author's "location"=>"San Francisco, CA", URL. The author's "location". This is a free-form text field, and "profile_background_color"=>"c1dfee", there are no guarantees on whether it can be geocoded. "profile_background_image_url"=> TM "http://a3.twimg.com/profile_background_images/59931895/twitterapi-background-new.png", Rendering information "profile_background_tile"=>false, for the author. Colors "profile_image_url"=>"http://a3.twimg.com/profile_images/689684365/api_normal.png", are encoded in hex "profile_link_color"=>"0000ff", 65
  66. 66. Dissecting a status object The tweet's unique ID. These Text of the tweet. IDs are roughly sorted & Consecutive duplicate tweets developers should treat them are rejected. 140 character as opaque (http://bit.ly/dCkppc). max (http://bit.ly/4ud3he). DEPRECATED {"id"=>12296272736, "text"=> "An early look at Annotations: http://groups.google.com/group/twitter-api-announce/browse_thread/thread/fa5da2608865453", Tweet's "created_at"=>"Fri Apr 16 17:55:46 +0000 2010", creation "in_reply_to_user_id"=>nil, The ID of an existing tweet that date. "in_reply_to_screen_name"=>nil, this tweet is in reply to. Won't "in_reply_to_status_id"=>nil be set unless the author of the The author's The screen name & "favorited"=>false, user ID. user ID of replied to referenced tweet is mentioned. "truncated"=>false, Truncated to 140 characters. Only tweet author. "user"=> possible from SMS. The author's {"id"=>6253282, user name. The author's "screen_name"=>"twitterapi", The author's biography. "name"=>"Twitter API", screen name. n get out of sync. "description"=> "The Real Twitter API. I tweet about API changes, service issues and e tweet. This happily answer questions about Twitter and our API. Don't get an answer? It's on my website.", TM "url"=>"http://apiwiki.twitter.com", The author's "location"=>"San Francisco, CA", URL. The author's "location". This is a free-form text field, and "profile_background_color"=>"c1dfee", there are no guarantees on whether it can be geocoded. 66
  67. 67. The screen name & "favorited"=>false, user ID. The autho referenced tweet is mentioned. user ID of replied to "truncated"=>false, Truncated to 140 characters. Only tweet author. "user"=> possible from SMS. The author's {"id"=>6253282, user name. The author's "screen_name"=>"twitterapi", The author's biography. "name"=>"Twitter API", screen name. embedded object can get out of sync. "description"=> "The Real Twitter API. I tweet about API changes, service issues and The author of the tweet. This happily answer questions about Twitter and our API. Don't get an answer? It's on my website.", "url"=>"http://apiwiki.twitter.com", The author's "location"=>"San Francisco, CA", URL. The author's "location". This is a free-form text field, and "profile_background_color"=>"c1dfee", there are no guarantees on whether it can be geocoded. "profile_background_image_url"=> "http://a3.twimg.com/profile_background_images/59931895/twitterapi-background-new.png", Rendering information "profile_background_tile"=>false, for the author. Colors "profile_image_url"=>"http://a3.twimg.com/profile_images/689684365/api_normal.png", are encoded in hex "profile_link_color"=>"0000ff", values (RGB). "profile_sidebar_border_color"=>"87bc44", The creation date "profile_sidebar_fill_color"=>"e0ff92", for this account. "profile_text_color"=>"000000", Whether this account has "created_at"=>"Wed May 23 06:01:13 +0000 2007", contributors enabled "contributors_enabled"=>true, (http://bit.ly/50npuu). Number of Number of tweets "favourites_count"=>1, favorites this this user has. "statuses_count"=>1628, Number of user has. "friends_count"=>13, users this user "time_zone"=>"Pacific Time (US & Canada)", The timezone and offset is following. "utc_offset"=>-28800, (in seconds) for this user. "lang"=>"en", The user's selected "protected"=>false, language. "followers_count"=>100581, "geo_enabled"=>true, Whether this user is protected enabled (http://bit.ly/4pFY77). "notifications"=>false, DEPRECATED Whether this user has geo or not. If the user is protected, "following"=>true, in this context Number of then this tweet is not visible "verified"=>true}, Whether this user followers for except to "friends". "contributors"=>[3191321], has a verified badge. this user. "geo"=>nil, "coordinates"=>nil, DEPRECATED "place"=> The contributors' (if any) user TM The place ID IDs (http://bit.ly/50npuu). {"id"=>"2b6ff8c22edd9576", "url"=>"http://api.twitter.com/1/geo/id/2b6ff8c22edd9576.json", "name"=>"SoMa", The URL to fetch a detailed 67
  68. 68. Context is everything TM 68
  69. 69. #hashtags Those things you add to a Tweet for grouping TM 69
  70. 70. @mentions Talk about or to another user TM 70
  71. 71. 51.495466,-0.146341 Locates a Tweet TM 71
  72. 72. via My App what created the Tweet TM 72
  73. 73. dev.twitter.com The developer portal TM 73
  74. 74. Creating an app Your own small playground TM 74
  75. 75. TM 75
  76. 76. TM 76
  77. 77. TM 77
  78. 78. Browsing docs Remembering how to read TM 78
  79. 79. TM 79
  80. 80. TM 80
  81. 81. TM 81
  82. 82. Streaming API Near-Realtime Access to Public Statuses TM 82
  83. 83. Streaming API ‣ A persistent connection to Twitter servers ‣ Get pushed a tweet that matches your predicate in “real-time” ‣ Server to server integrations TM 83
  84. 84. Basic Usage ‣ Curl with Basic Auth or Twurl with OAuth ‣ One connection per username permitted http://stream.twitter.com/1/statuses/sample.json TM 84
  85. 85. Follow some users ‣ Curl with Basic Auth or Twurl with OAuth ‣ One connection per username permitted ‣ Pass up to 400 user_ids, comma seperated http://stream.twitter.com/1/statuses/filter.json TM 85
  86. 86. Filter by keyword ‣ Curl with Basic Auth or Twurl with OAuth ‣ One connection per username permitted ‣ Pass up to 200 keywords, comma seperated ‣ Example: Twitter will return statuses which contain: TWITTER, twitter, "Twitter", twitter., #twitter and @twitter http://stream.twitter.com/1/statuses/filter.json TM 86
  87. 87. Streaming API - Access Levels ‣ Default TM 87
  88. 88. Streaming API - Default Level ‣ 200 x Keywords ‣ 400 x Follow userids ‣ 10 x 1-degree location boxes TM 88
  89. 89. Streaming API - Access Levels ‣ Default ‣ Shadow - many followings ‣ Birddog - many more followings ‣ Restricted Track - many keywords ‣ Partner Track - many more keywords ‣ locRestricted - many locations TM 89
  90. 90. Streaming API - Access Levels ‣ Default ‣ Shadow - many followings ‣ Birddog - many more followings ‣ Restricted Track - many keywords ‣ Partner Track - many more keywords ‣ locRestricted - many locations ‣ Firehose - all public statuses TM 90
  91. 91. Streaming API - Firehose TM 91
  92. 92. More Info... Check out bit.ly/streaming_api TM 92
  93. 93. Userstreams Real-time updates of all data needed to update a desktop application display TM 93
  94. 94. TA BE Userstreams Real-time updates of all data needed to update a desktop application display TM 94
  95. 95. TA Keyfacts BE ‣ Rate limits practically eliminated ‣ Hit the API for backfill of data ‣ Transition to userstream for real-time updates ‣ Social events streamed too TM 95
  96. 96. TA BE More Info... Check out bit.ly/userstreams-beta bit.ly/userstreams-overview TM 96
  97. 97. Stay Informed... Join bit.ly/twitter-anywhere-talk bit.ly/twitter-dev-talk Important Stuff @twitterapi status.twitter.com bit.ly/twitter-api-announce TM 97
  98. 98. Help... Check out dev.twitter.com TM 98
  99. 99. Join the Flock! Find out more jobs.twitter.com TM 99
  100. 100. Questions? Follow us at twitter.com/twitterapi twitter.com/themattharris twitter.com/raffi TM 100
  101. 101. TM 101

×