Techcrunch   hackathon!
At the Techcr unch Disrupt
Ha ckathon - giving a talk about
@twitte rapi & watching  people hack!
21 May via Twitter for iPhone



  from Pier 94
  755 12th Avenue
  New York, NY
   View Tweets at this place
>660K Developers on @twitterAPI
>900K applications +
The Officially Owned and Operated ones
The opportunity
Analytics
Content           Interpreting user information (for
                  Filtering valuable data data signals
                  Creating rich(real-time) to convey
                  Surfacingreal-time experiences (for the
                  Helping users publish the right content
                  into actionable information for
                  relevant, meaningful conversations
                  ecosystem) in exchange for greater to
                  enterprise users) to facilitate target
                  at the right time to optimize resonance.
Curation          industries
                  audiences.or interests.
                  reach and growth.
                  engagement and manage reputation.

Publishing
Enterprise
Every tweet that comes from quora to
twitter results in 30 clicks per tweet.
⇢ Charlie Cheever, Co-Founder
Flipboard sees 50-80% lift in retention
from users who have signed into
Twitter versus those who have not.
Twitter is just three things:
Tweets,relationships between those three
And the users, anD Timelines
What is the @TwitterAPI?
REST API
⇢provides Twitter functionality
⇢read / write / read DM (Tweet, Follow, DM, etc.)
Search API
⇢real-time search index
Streaming API
⇢HTTP long poll connection
⇢Tweets in real-time
Using the system


    13B API calls       150,000 calls
         per day    ≈   per second
Three main objects

Status Objects → the Tweet (text, author, and metadata)

User objects → username, screen name, avatar

Timelines → orderings of Tweets
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.
bedded 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
Timelines

user → a the Tweets a given user has authored

home → the main timeline you would see in a client

Mentions → all the Tweets that @mention a user
Causing change

Tweeting → a POST to status/update

Following → a POST to friendships/create

DM-ing → a POST to direct_messages/new
Authentication
OAuth 1.0a
⇢ signature based requests
⇢ user driven access to the API
⇢ client differentiated access to the API
Applications don’t have passwords
⇢ applications store tokens for their users
⇢ users can change passwords, but tokens still work
OAuth 2.0
⇢ coming soon!
Limits
350 OAuth calls / user / hour / IP
⇢ authenticated calls goes against calling user
⇢ unauthenticated calls goes against calling IP
“Natural” limits
⇢ limits on number of Tweets / DMs sent
⇢ limits on number of follows / unfollows a day
Status Limits
⇢ can’t send “duplicate” tweets
Streaming API
Persistent connections
⇢get pushed a tweet, in real-time, that matches your predicate
⇢“push” version of search
⇢read-only
User streams / Site streams
⇢re-create the client experience using streams
⇢great for “client” experiences
Latency

200ms

100ms

 0ms
Streaming API’s Sample hose

http://stream.twitter.com/1/statuses/sample.json
use curl
⇢uses basic authentication
⇢one connection per username
Streaming API’s Track and follow
http://stream.twitter.com/1/statuses/filter.json

Track
⇢watch a particular keyword
⇢up to 200 can be sent as CSV with track parameter
Follow
⇢get all the tweets (RTs, etc.) from a particular user
⇢up to 400 can be issued as CSV with follow parameter
Search API
Real-time search index
⇢Tweets indexed in <10 seconds
⇢1.5 billion requests a day
Search Corpus
⇢index goes back 7-10 days depending on traffic
⇢contains the best quality Tweets
Querying the Search API
http://search.twitter.com/search.atom?q= !
Use Curl
⇢ unauthenticated
⇢ rate-limited by IP address
Parameters
⇢ just put your query in the q parameter
⇢ use from to restrict to a particular username
⇢ OR to combine queries (q=techcrunch+OR+disrupt)
⇢ - to negate (q=techcrunch+-from=%3Araffi)
Tools of the Trade
dev.twitter.com
⇢ documentation central
⇢ create and register new applications
twurl
⇢ OAuth enabled version of curl
⇢ allows you to manually test authenticated and unauthenticated REST
Twitter for Mac
⇢ built in “developer console”
Tweet button
Implementing
⇢simple JavaScript to drop
 onto your site
⇢allows you to share URLs,
 and to recommend people to
 follow

Back-end
⇢high speed URL counting API
Follow me at
Questions?   twitter.com/raffi

Developing for @twitterapi (Techcrunch Disrupt Hackathon)

  • 1.
    Techcrunch hackathon!
  • 2.
    At the Techcrunch Disrupt Ha ckathon - giving a talk about @twitte rapi & watching people hack! 21 May via Twitter for iPhone from Pier 94 755 12th Avenue New York, NY View Tweets at this place
  • 3.
  • 4.
    >900K applications + TheOfficially Owned and Operated ones
  • 5.
    The opportunity Analytics Content Interpreting user information (for Filtering valuable data data signals Creating rich(real-time) to convey Surfacingreal-time experiences (for the Helping users publish the right content into actionable information for relevant, meaningful conversations ecosystem) in exchange for greater to enterprise users) to facilitate target at the right time to optimize resonance. Curation industries audiences.or interests. reach and growth. engagement and manage reputation. Publishing Enterprise
  • 6.
    Every tweet thatcomes from quora to twitter results in 30 clicks per tweet. ⇢ Charlie Cheever, Co-Founder
  • 7.
    Flipboard sees 50-80% lift in retention fromusers who have signed into Twitter versus those who have not.
  • 8.
    Twitter is justthree things: Tweets,relationships between those three And the users, anD Timelines
  • 9.
    What is the@TwitterAPI? REST API ⇢provides Twitter functionality ⇢read / write / read DM (Tweet, Follow, DM, etc.) Search API ⇢real-time search index Streaming API ⇢HTTP long poll connection ⇢Tweets in real-time
  • 10.
    Using the system 13B API calls 150,000 calls per day ≈ per second
  • 11.
    Three main objects StatusObjects → the Tweet (text, author, and metadata) User objects → username, screen name, avatar Timelines → orderings of Tweets
  • 12.
    The tweet's uniqueID. 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. bedded 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
  • 13.
    Timelines user → athe Tweets a given user has authored home → the main timeline you would see in a client Mentions → all the Tweets that @mention a user
  • 14.
    Causing change Tweeting →a POST to status/update Following → a POST to friendships/create DM-ing → a POST to direct_messages/new
  • 15.
    Authentication OAuth 1.0a ⇢ signaturebased requests ⇢ user driven access to the API ⇢ client differentiated access to the API Applications don’t have passwords ⇢ applications store tokens for their users ⇢ users can change passwords, but tokens still work OAuth 2.0 ⇢ coming soon!
  • 16.
    Limits 350 OAuth calls/ user / hour / IP ⇢ authenticated calls goes against calling user ⇢ unauthenticated calls goes against calling IP “Natural” limits ⇢ limits on number of Tweets / DMs sent ⇢ limits on number of follows / unfollows a day Status Limits ⇢ can’t send “duplicate” tweets
  • 17.
    Streaming API Persistent connections ⇢getpushed a tweet, in real-time, that matches your predicate ⇢“push” version of search ⇢read-only User streams / Site streams ⇢re-create the client experience using streams ⇢great for “client” experiences
  • 18.
  • 19.
    Streaming API’s Samplehose http://stream.twitter.com/1/statuses/sample.json use curl ⇢uses basic authentication ⇢one connection per username
  • 20.
    Streaming API’s Trackand follow http://stream.twitter.com/1/statuses/filter.json Track ⇢watch a particular keyword ⇢up to 200 can be sent as CSV with track parameter Follow ⇢get all the tweets (RTs, etc.) from a particular user ⇢up to 400 can be issued as CSV with follow parameter
  • 21.
    Search API Real-time searchindex ⇢Tweets indexed in <10 seconds ⇢1.5 billion requests a day Search Corpus ⇢index goes back 7-10 days depending on traffic ⇢contains the best quality Tweets
  • 22.
    Querying the SearchAPI http://search.twitter.com/search.atom?q= ! Use Curl ⇢ unauthenticated ⇢ rate-limited by IP address Parameters ⇢ just put your query in the q parameter ⇢ use from to restrict to a particular username ⇢ OR to combine queries (q=techcrunch+OR+disrupt) ⇢ - to negate (q=techcrunch+-from=%3Araffi)
  • 23.
    Tools of theTrade dev.twitter.com ⇢ documentation central ⇢ create and register new applications twurl ⇢ OAuth enabled version of curl ⇢ allows you to manually test authenticated and unauthenticated REST Twitter for Mac ⇢ built in “developer console”
  • 27.
    Tweet button Implementing ⇢simple JavaScriptto drop onto your site ⇢allows you to share URLs, and to recommend people to follow Back-end ⇢high speed URL counting API
  • 28.
    Follow me at Questions? twitter.com/raffi