#twitterflight: connecting to the pulse of the planet

Download #TwitterFlight: Connecting to the Pulse of the Planet

If you can't read please download the document

Upload: romain-huet

Post on 18-Jul-2015

52 views

Category:

Technology


4 download

TRANSCRIPT

  • #twitterflight

  • October 22, 2014 #twitterflight

    Connecting to the Pulse of the Planet

  • Romain HuetDeveloper Advocate

    @romainhuet

  • 271M+

    500M+

    Active Users

    Tweets per Day

    2006 2014

  • Twitter is global,open and real-time

  • Twitter is the shortest distance between @you and your #interests

  • Twitter is there atworld events

  • Twitter is the pulseof the planet

  • How can you use Twitter Datato power your apps?

  • Data Platform

  • Twitter APIs deal both with the right now and what happened

  • Streaming APIs allow you to ingest whats happening right now

  • Streaming APIs let you ingest whats happening right nowPOST https://stream.twitter.com/1.1/statuses/filter.json

    Returns Tweets matching your criteria.

    Data follow: 3946301 track: #twitterflight locations: 2.1733,41.3633,2.1933,41.4033 language: fr

  • Streaming APIs let you ingest whats happening right nowGET https://stream.twitter.com/1.1/statuses/sample.json

    Returns ~1% of all firehose data, statistically relevant.

    GET https://stream.twitter.com/1.1/statuses/firehose.json

    Returns all firehose data, requires business deal.

  • Streaming APIs let you ingest whats happening right now{"created_at":"Sun Dec 01 21:44:59 +0000 2013","id":407264085194330112,"id_str":"407264085194330112","text":"\u201c@DM_Minions: The minion mobile! http:\/\/t.co\/Tq8AQoXcVy\u201d shall I get it, @CourtneyLouu \ud83d\ude0f\ud83d\ude18","source":"\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":407263303405023232,"in_reply_to_status_id_str":"407263303405023232","in_reply_to_user_id":948825632,"in_reply_to_user_id_str":"948825632","in_reply_to_screen_name":"DM_Minions","user":{"id":404024178,"id_str":"404024178","name":"emilyjade","screen_name":"_emilyjade","location":"","url":null,"description":"'what is essential, is invisible to the eye'","protected":false,"followers_count":156,"friends_count":287,"listed_count":0,"created_at":"Thu Nov 03 10:18:49 +0000 2011","favourites_count":379,"utc_offset":null,"time_zone":null,"geo_enabled":true,"verified":false,"statuses_count":8506,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"EBEBEB","profile_background_image_url":"http:\/\/abs.twimg.com\/images\/themes\/theme7\/bg.gif","profile_background_image_url_https":"https:\/\/abs.twimg.com\/images\/themes\/theme7\/bg.gif","profile_background_tile":false,"profile_image_url":"http:\/\/pbs.twimg.com\/profile_images\/378800000811908687\/bc82e20db7c7812a1f61f72998f948e9_normal.jpeg","profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/378800000811908687\/bc82e20db7c7812a1f61f72998f948e9_normal.jpeg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/404024178\/1385914936","profile_link_color":"990000","profile_sidebar_border_color":"DFDFDF","profile_sidebar_fill_color":"F3F3F3","profile_text_color":"333333","profile_use_background_image":true,"default_profile":false,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":{"type":"Point","coordinates":[51.35264663,-1.15710757]},"coordinates":{"type":"Point","coordinates":[-1.15710757,51.35264663]},"place":{"id":"d009bfdb11c20f3e","url":"https:\/\/api.twitter.com\/1.1\/geo\/id\/d009bfdb11c20f3e.json","place_type":"city","name":"Basingstoke and Deane","full_name":"Basingstoke and Deane, Hampshire","country_code":"GB","country":"United Kingdom","contained_within":[],"bounding_box":{"type":"Polygon","coordinates":[[[-1.4601689999999998,51.133537999999994],[-1.4601689999999998,51.383949],[-0.9748119999999999,51.383949],[-0.9748119999999999,51.133537999999994]]]},"attributes":{}},"contributors":null,"retweet_count":0,"favorite_count":0,"entities":{"hashtags":[],"symbols":[],"urls":[],"user_mentions":[{"screen_name":"DM_Minions","name":"DespicableMe Minions","id":948825632,"id_str":"948825632","indices":[1,12]},{"screen_name":"CourtneyLouu","name":"coourts","id":43456930,"id_str":"43456930","indices":[73,86]}],"media":[{"id":407263303325335552,"id_str":"407263303325335552","indices":[33,55],"media_url":"http:\/\/pbs.twimg.com\/media\/Babj0QzCQAAMrX4.jpg","media_url_https":"https:\/\/pbs.twimg.com\/media\/Babj0QzCQAAMrX4.jpg","url":"http:\/\/t.co\/Tq8AQoXcVy","display_url":"pic.twitter.com\/Tq8AQoXcVy","expanded_url":"http:\/\/twitter.com\/DM_Minions\/status\/407263303405023232\/photo\/1","type":"photo","sizes":{"small":{"w":339,"h":236,"resize":"fit"},"large":{"w":958,"h":666,"resize":"fit"},"thumb":{"w":150,"h":150,"resize":"crop"},"medium":{"w":599,"h":417,"resize":"fit"}},"source_status_id":407263303405023232,"source_status_id_str":"407263303405023232"}]},"favorited":false,"retweeted":false,"possibly_sensitive":false,"filter_level":"medium","lang":"en"}{"created_at":"Sun Dec 01 21:44:59 +0000 2013","id":407264086347747328,"id_str":"407264086347747328","text":"@DannyArratoon already eaten it but you can bring me another one?","source":"\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":407263944844533761,"in_reply_to_status_id_str":"407263944844533761","in_reply_to_user_id":210579473,"in_reply_to_user_id_str":"210579473","in_reply_to_screen_name":"DannyArratoon","user":{"id":495068253,"id_str":"495068253","name":"eleanor","screen_name":"ell_eysselinck","location":"london","url":null,"description":null,"protected":false,"followers_count":430,"friends_count":345,"listed_count":0,"created_at":"Fri Feb 17 15:23:34 +0000 2012","favourites_count":3934,"utc_offset":0,"time_zone":"London","geo_enabled":true,"verified":false,"statuses_count":7800,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"000000","profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\/635582704\/nud5dpj44ngj5bgv5k55.jpeg","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/635582704\/nud5dpj44ngj5bgv5k55.jpeg","profile_background_tile":true,"profile_image_url":"http:\/\/pbs.twimg.com\/profile_images\/378800000812022272\/b0218f45cb51525440be4f5782aaba6b_normal.jpeg","profile_image_url_https":"https:\/\/pbs.twimg.com\/profile_images\/378800000812022272\/b0218f45cb51525440be4f5782aaba6b_normal.jpeg","profile_banner_url":"https:\/\/pbs.twimg.com\/profile_banners\/495068253\/1378837388","profile_link_color":"EB091C","profile_sidebar_border_color":"C0DEED","profile_sidebar_fill_color":"DDEEF6","profile_text_color":"333333","profile_use_background_image":true,"default_profile":false,"default_profile_image":false,"following":null,"follow_request_sent":null,"notifications":null},"geo":{"type":"Point","coordinates":[51.37097685,-0.21992044]},"coordinates":{"type":"Point","coordinates":[-0.21992044,51.37097685]},"place":{"id":"8840213b5fc1032a","url":"https:\/\/api.twitter.com\/1.1\/geo\/id\/8840213b5fc1032a.json","place_type":"city","name":"Sutton","full_name":"Sutton, London","country_code":"GB","country":"United Kingdom","contained_within":[],"bounding_box":{"type":"Polygon","coordinates":[[[-0.24586899999999998,51.321324999999995],[-0.24586899999999998,51.393378999999996],[-0.117306,51.393378999999996],[-0.117306,51.321324999999995]]]},"attributes":{}},"contributors":null,"retweet_count":0,"favorite_count":0,"entities":{"hashtags":[],"symbols":[],"urls":[],"user_mentions":[{"screen_name":"DannyArratoon","name":"Danny","id":210579473,"id_str":"210579473","indices":[0,14]}]},"favorited":false,"retweeted":false,"filter_level":"medium","lang":"en"}{"created_at":"Sun Dec 01 21:44:59 +0000 2013","id":407264087085953025,"id_str":"407264087085953025","text":"@brontemaria22 #firstin","source":"\u003ca href=\"http:\/\/twitter.com\/download\/iphone\" rel=\"nofollow\"\u003eTwitter for iPhone\u003c\/a\u003e","truncated":false,"in_reply_to_status_id":407262865251643392,"in_reply_to_status_id_str":"407262865251643392","in_reply_to_user_id":771468884,"in_reply_to_user_id_str":"771468884","in_reply_to_screen_name":"brontemaria22","user":{"id":442104599,"id_str":"442104599","name":"zolf","screen_name":"FleurMarie32","location":"","url":null,"description":null,"protected":false,"followers_count":360,"friends_count":238,"listed_count":0,"created_at":"Tue Dec 20 19:13:40 +0000 2011","favourites_count":563,"utc_offset":null,"time_zone":null,"geo_enabled":true,"verified":false,"statuses_count":3092,"lang":"en","contributors_enabled":false,"is_translator":false,"profile_background_color":"BADFCD","profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\/

  • Anatomy of a Tweet{ "created_at": "Wed Oct 02 15:53:43 +0000 2013", "id": 385432417126739968, "id_str": "385432417126739968", "text": "Learn more about the powerful #Linux container engine @docker in this video intro with @solomonstre - http:\/\/t.co\/QJLdA1762Y @TwitterOSS", "source": "web", "truncated": false, "in_reply_to_status_id": null, "in_reply_to_status_id_str": null, "in_reply_to_user_id": null, "in_reply_to_user_id_str": null, "in_reply_to_screen_name": null, "user": { "id": 1665823832, "id_str": "1665823832", "name": "Twitter University", "screen_name": "university", "location": "", "description": "Building a culture of learning for @TwitterEng and the world at large", "url": "http:\/\/t.co\/c8IHJLE1Y8", "entities": { "url": { "urls": [{ "url": "http:\/\/t.co\/c8IHJLE1Y8", "expanded_url": "http:\/\/youtube.com\/twitteruniversity", "display_url": "youtube.com\/twitterunivers\u2026", "indices": [0, 22]

  • "favorite_count": 25, "entities": { "hashtags": [{ "text": "Linux", "indices": [30, 36] }], "symbols": [], "urls": [{ "url": "http:\/\/t.co\/QJLdA1762Y", "expanded_url": "http:\/\/youtu.be\/Q5POuMHxW-0", "display_url": "youtu.be\/Q5POuMHxW-0", "indices": [102, 124] }], "user_mentions": [{ "screen_name": "docker", "name": "Docker", "id": 1138959692, "id_str": "1138959692", "indices": [54, 61] }, { "screen_name": "solomonstre", "name": "Solomon Hykes", "id": 9551792, "id_str": "9551792", "indices": [87, 99] }, { "screen_name": "TwitterOSS", "name": "Twitter Open Source", "id": 376825877, "id_str": "376825877", "indices": [125, 136] }] }, "favorited": false, "retweeted": true, "possibly_sensitive": false, "lang": "en"}

  • 143,199Tweets per second

    5,700 TPS on average

  • REST APIs let you perform actions and access what happened

  • REST APIs let you perform actions and access what happenedTweets & Media GET statuses/lookup POST statuses/update

    POST media/upload

    Timelines GET statuses/home_timelineGET statuses/user_timeline

    GET statuses/mentions_timeline

    Search GET tweets/search

    Following GET friends/list

    And many more: Users, Favorites, Direct Messages, Followers, Lists, Trends, Geo, Spam Reporting

  • Demo

    #twitterflight

  • +

  • +

  • Mobile Platform

  • Fabric Sample AppCannonball

    Open source for iOS & Android:github.com/twitterdev

  • NodeCopter.com

  • Demo

    #twitterflight

  • Sign In with Twitter and Digits@IBAction func signInWithTwitter(sender: UIButton) { Twitter.sharedInstance().logInWithCompletion { (session: TWTRSession!, error: NSError!) -> Void in if session != nil { // Save any useful data from the Twitter session, // then move to the next view controller. } } }

    @IBAction func signInWithPhone(sender: UIButton) { Digits.sharedInstance().authenticateWithCompletion { (session: DGTSession!, error: NSError!) -> Void in if session != nil { // Save any useful data from the Digits session, // then move to the next view controller. } } }

  • Adding a Tweet View to the View Controlleroverride func viewDidLoad() { super.viewDidLoad()

    // Request the Twitter API. Twitter.sharedInstance().APIClient.loadTweetWithID(tweetId, completion: { (tweet: TWTRTweet!, error: NSError!) -> Void in // Build the Tweet view. self.tweetView = TWTRTweetView(tweet: tweet, style: .Regular)

    // Add the Tweet view to the main view. self.view.addSubview(self.tweetView) }) }

  • Sharing a Tweet with the Tweet Composer@IBAction func postTweet(sender: AnyObject) { // Use the TwitterKit to create a Tweet composer. let composer = TWTRComposer()

    // Prepare the Tweet text with drone commands. composer.setText(droneCommands)

    // Present the composer to the user. composer.showWithCompletion({ (result: TWTRComposerResult!) -> Void in if result == .Cancelled { println("Tweet composition cancelled") } else { println("Tweeting commands to the drone!") } }) }

  • Displaying Tweets in a Table Viewoverride func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { // Retrieve the Tweet cell. let cell = tableView.dequeueReusableCellWithIdentifier(tweetTableCellReuseIdentifier, forIndexPath: indexPath) as TWTRTweetTableViewCell // Assign the delegate to control events on Tweets. cell.tweetView.delegate = self // Retrieve the Tweet model object from the array of loaded Tweets. let tweet = tweets[indexPath.row] // Configure the cell with the Tweet. cell.configureWithTweet(tweet) // Return the Tweet cell. return cell}

  • Thank You