Instantly share code, notes, and snippets.
Save igorlima/b31f1a26a5b100186a98 to your computer and use it in GitHub Desktop.
You probably know that to do JavaScript testing is good and some hurdles to overcome is how to test our code in a manner to(i) inject mocks for other modules,(ii) to leak private variables or(iii) override variables within the module.
rewire is a tool for helping us on overcoming these hurdles. It provides us an easy way to dependency injection for unit testing and adds a special setter and getter to modules so we can modify their behaviour for better unit testing. Whatrewire does is to not load the file and eval the contents to emulate the load mechanism.
To get started with dependency injection, we'll createa twitter rest api server and do unit tests using mocks and overriding variables within modules. This example will focus on back-end unit testing but if you want to userewire also on the client-side take a look atclient-side bundlers.
This example is a public HTTP API to retrieve Twitter user timelines. It has basically two files:server.js andtwitter.js.
The first file createsan basic instance ofexpress and definesa route for a GET request method, which is/twitter/timeline/:user.
The second one is a module responsible for retrieving data from Twitter. It requires:
- twit: Twitter API Client for node
- async: is a utility module which provides straight-forward, powerful functions for working with asynchronous JavaScript
- moment: a lightweight JavaScript date library for parsing, validating, manipulating, and formatting dates.
Part of these modules will be mocked and overridden in our tests.
This example is already runningin a cloud. So you can reach the urls below and see it working:
To run it locally, clonethis gist bygit clone https://gist.github.com/b31f1a26a5b100186a98.git twitter-rest-api-server and set five environment variables. Those envs are listed below. For secure reason I won't share my token. To get yours, accessTwitter developer documentation,create a new app and set up your credentials.
ForMac users, you can simply type:
export TwitterConsumerKey="xxxx"export TwitterConsumerSecret="xxxx"export TwitterAccessToken="xxxx"export TwitterAccessTokenSecret="xxxx"export MomentLang="pt-br"ForWindows users, do:
SET TwitterConsumerKey="xxxx"SET TwitterConsumerSecret="xxxx"SET TwitterAccessToken="xxxx"SET TwitterAccessTokenSecret="xxxx"SET MomentLang="pt-br"After setting up the environment variables, go totwitter-rest-api-server folder, install all node dependencies bynpm install, then run via terminalnode server.js. It should be available at the port5000. Go to your browser and reachhttp://localhost:5000/twitter/timeline/igorribeirolima.
Mocha is the JavaScript test framework running we gonna use. It makes asynchronous testing simple and fun.Mocha allows you to use any assertion library you want, if it throws an error, it will work! In this example we are gonna utilizenode's regular assert module.
Imagine you want to test this codetwitter.js:
varTwit=require('twit'),async=require('async'),moment=require('moment'),T=newTwit({consumer_key:process.env.TwitterConsumerKey||'...',consumer_secret:process.env.TwitterConsumerSecret||'...',access_token:process.env.TwitterAccessToken||'...',access_token_secret:process.env.TwitterAccessTokenSecret||'...'}),mapReducingTweets=function(tweet,callback){callback(null,simplify(tweet));},simplify=function(tweet){vardate=moment(tweet.created_at,"ddd MMM DD HH:mm:ss zz YYYY");date.lang(process.env.MomentLang);return{date:date.format('MMMM Do YYYY, h:mm:ss a'),id:tweet.id,user:{id:tweet.user.id},tweet:tweet.text};};module.exports=function(username,callback){T.get("statuses/user_timeline",{screen_name:username,count:25},function(err,tweets){if(err)callback(err);elseasync.map(tweets,mapReducingTweets,function(err,simplified_tweets){callback(null,simplified_tweets);});})};
To do that in a easy and fun way, let load this module usingrewire. So within your test moduletwitter-spec.js:
varrewire=require('rewire'),assert=require('assert'),twitter=rewire('./twitter.js'),mock=require('./twitter-spec-mock-data.js');
rewire acts exactly likerequire. Just with one difference: Your module will now export a special setter and getter for private variables.
myModule.__set__("path","/dev/null");myModule.__get__("path");// = '/dev/null'
This allows you to mock everything in the top-level scope of the module, like thetwitter module for example. Just pass the variable name as first parameter and your mock as second.
You may also override globals. These changes are only within the module, so you don't have to be concerned that other modules are influenced by your mock.
describe('twitter module',function(){describe('simplify function',function(){varsimplify;before(function(){simplify=twitter.__get__('simplify');});it('should be defined',function(){assert.ok(simplify);});describe('simplify a tweet',function(){vartweet,mock;before(function(){mock=mocks[0];tweet=simplify(mock);});it('should have 4 properties',function(){assert.equal(Object.keys(tweet).length,4);});describe('format dates as `MMMM Do YYYY, h:mm:ss a`',function(){describe('English format',function(){before(function(){revert=twitter.__set__('process.env.MomentLang','en');tweet=simplify(mock);});it('should be `March 6th 2015, 2:29:13 am`',function(){assert.equal(tweet.date,'March 6th 2015, 2:29:13 am');});after(function(){revert();});});describe('Brazilian format',function(){before(function(){revert=twitter.__set__('process.env.MomentLang','pt-br');tweet=simplify(mock);});it('should be `Março 6º 2015, 2:29:13 am`',function(){assert.equal(tweet.date,'Março 6º 2015, 2:29:13 am');});after(function(){revert();});});});});});describe('retrieve timeline feed',function(){varrevert;before(function(){revert=twitter.__set__("T.get",function(api,query,callback){callback(null,mocks);});});describe('igorribeirolima timeline',function(){vartweets;before(function(done){twitter('igorribeirolima',function(err,data){tweets=data;done();});});it('should have 19 tweets',function(){assert.equal(tweets.length,19);});});after(function(){revert();});});});
__set__ returns a function which reverts the changes introduced by this particular__set__ call.
Before we get into the test and walk through it, let install mocha CLI bynpm install -g mocha. It will support us on running our tests just typingmocha twitter-spec.js. The following is an image that illustrates the test result.
Take a look on thisvideo and see step by step in detail everything discussed so far.
As you can see it's not painful on overcoming hurdles like(i) injecting mocks for other modules,(ii) leaking private variables or(iii) overriding variables within the module. That's it folks. Hope you catch the idea on how simple and fun is to do dependency injection for unit testing. Thanks for reading.
| { | |
| "name":"twitter-rest-api", | |
| "version":"0.0.0", | |
| "dependencies": { | |
| "connect":"2.9.0", | |
| "express":"~3.4.7", | |
| "twit":"~1.1.11", | |
| "async":"~0.2.9", | |
| "moment":"~2.5.1", | |
| "rewire":"2.3.1" | |
| }, | |
| "engines": { | |
| "node":">=0.10.25" | |
| } | |
| } |
| varexpress=require('express'), | |
| tweets=require('./twitter.js'), | |
| response=function(req,res,err,data){ | |
| if(req.query.callback){ | |
| res.jsonp(err||data); | |
| }else{ | |
| res.json(err||data); | |
| } | |
| }; | |
| varapp=express() | |
| .use(express.static(__dirname+'./')) | |
| .get('/twitter/timeline/:user',function(req,res){ | |
| tweets(req.params.user,function(err,data){ | |
| response(req,res,err,data); | |
| }); | |
| }) | |
| .listen(process.env.PORT||5000); |
| module.exports=[ | |
| { | |
| "created_at":"Fri Mar 06 02:29:13 +0000 2015", | |
| "id":573671644562079740, | |
| "id_str":"573671644562079744", | |
| "text":"RT @TweetSmarter: Explain please… http://t.co/EjoXG50jfM", | |
| "source":"<a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a>", | |
| "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":16436464, | |
| "id_str":"16436464", | |
| "name":"Martha Gabriel", | |
| "screen_name":"marthagabriel", | |
| "location":"São Paulo, Brazil", | |
| "profile_location":null, | |
| "description":"Experiencing Life ;-) Best seller author, MBA professor and consultant in Marketing, Innovation & Education. Keynote & awarded speaker, 4 TEDx, PhD.", | |
| "url":"http://t.co/NQ07sWjCRA", | |
| "entities":{ | |
| "url":{ | |
| "urls":[ | |
| { | |
| "url":"http://t.co/NQ07sWjCRA", | |
| "expanded_url":"http://www.martha.com.br", | |
| "display_url":"martha.com.br", | |
| "indices":[ | |
| 0, | |
| 22 | |
| ] | |
| } | |
| ] | |
| }, | |
| "description":{ | |
| "urls":[] | |
| } | |
| }, | |
| "protected":false, | |
| "followers_count":50977, | |
| "friends_count":308, | |
| "listed_count":1990, | |
| "created_at":"Wed Sep 24 16:19:23 +0000 2008", | |
| "favourites_count":10006, | |
| "utc_offset":-10800, | |
| "time_zone":"Brasilia", | |
| "geo_enabled":true, | |
| "verified":false, | |
| "statuses_count":25473, | |
| "lang":"en", | |
| "contributors_enabled":false, | |
| "is_translator":false, | |
| "is_translation_enabled":false, | |
| "profile_background_color":"666666", | |
| "profile_background_image_url":"http://pbs.twimg.com/profile_background_images/665744661/c13ca3eb52467a18cd3f748d3852479a.png", | |
| "profile_background_image_url_https":"https://pbs.twimg.com/profile_background_images/665744661/c13ca3eb52467a18cd3f748d3852479a.png", | |
| "profile_background_tile":false, | |
| "profile_image_url":"http://pbs.twimg.com/profile_images/1766554716/martha-gabriel-avatar-twitter-2012_normal.jpg", | |
| "profile_image_url_https":"https://pbs.twimg.com/profile_images/1766554716/martha-gabriel-avatar-twitter-2012_normal.jpg", | |
| "profile_banner_url":"https://pbs.twimg.com/profile_banners/16436464/1398558789", | |
| "profile_link_color":"E67512", | |
| "profile_sidebar_border_color":"FFFFFF", | |
| "profile_sidebar_fill_color":"A0C5C7", | |
| "profile_text_color":"000000", | |
| "profile_use_background_image":false, | |
| "default_profile":false, | |
| "default_profile_image":false, | |
| "following":true, | |
| "follow_request_sent":false, | |
| "notifications":false | |
| }, | |
| "geo":null, | |
| "coordinates":null, | |
| "place":null, | |
| "contributors":null, | |
| "retweeted_status":{ | |
| "created_at":"Fri Mar 06 01:27:46 +0000 2015", | |
| "id":573656183149453300, | |
| "id_str":"573656183149453312", | |
| "text":"Explain please… http://t.co/EjoXG50jfM", | |
| "source":"<a href=\"http://twitter.com\" rel=\"nofollow\">Twitter Web Client</a>", | |
| "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":15947185, | |
| "id_str":"15947185", | |
| "name":"TweetSmarter", | |
| "screen_name":"TweetSmarter", | |
| "location":"Minnesota, USA", | |
| "profile_location":null, | |
| "description":"Now in our 8th year helping everyone get the most out of #Twitter and #SocialMedia. Tweet us anytime! Tips, tools, Twitter news and tech support for everyone.", | |
| "url":"http://t.co/hgnDW3vif6", | |
| "entities":{ | |
| "url":{ | |
| "urls":[ | |
| { | |
| "url":"http://t.co/hgnDW3vif6", | |
| "expanded_url":"http://bit.ly/WhoIsTweetSmarter", | |
| "display_url":"bit.ly/WhoIsTweetSmar…", | |
| "indices":[ | |
| 0, | |
| 22 | |
| ] | |
| } | |
| ] | |
| }, | |
| "description":{ | |
| "urls":[] | |
| } | |
| }, | |
| "protected":false, | |
| "followers_count":398852, | |
| "friends_count":144459, | |
| "listed_count":18305, | |
| "created_at":"Fri Aug 22 16:55:46 +0000 2008", | |
| "favourites_count":1888, | |
| "utc_offset":-21600, | |
| "time_zone":"Central Time (US & Canada)", | |
| "geo_enabled":true, | |
| "verified":false, | |
| "statuses_count":116555, | |
| "lang":"en", | |
| "contributors_enabled":false, | |
| "is_translator":false, | |
| "is_translation_enabled":false, | |
| "profile_background_color":"B8D6BF", | |
| "profile_background_image_url":"http://pbs.twimg.com/profile_background_images/314137004/temp_kuvva_restore_production_6262_1.png", | |
| "profile_background_image_url_https":"https://pbs.twimg.com/profile_background_images/314137004/temp_kuvva_restore_production_6262_1.png", | |
| "profile_background_tile":true, | |
| "profile_image_url":"http://pbs.twimg.com/profile_images/572226162508570624/z308_Hpd_normal.jpeg", | |
| "profile_image_url_https":"https://pbs.twimg.com/profile_images/572226162508570624/z308_Hpd_normal.jpeg", | |
| "profile_banner_url":"https://pbs.twimg.com/profile_banners/15947185/1398475198", | |
| "profile_link_color":"2562FD", | |
| "profile_sidebar_border_color":"FFFFFF", | |
| "profile_sidebar_fill_color":"DDEEF6", | |
| "profile_text_color":"1C1200", | |
| "profile_use_background_image":true, | |
| "default_profile":false, | |
| "default_profile_image":false, | |
| "following":false, | |
| "follow_request_sent":false, | |
| "notifications":false | |
| }, | |
| "geo":null, | |
| "coordinates":null, | |
| "place":{ | |
| "id":"8e9665cec9370f0f", | |
| "url":"https://api.twitter.com/1.1/geo/id/8e9665cec9370f0f.json", | |
| "place_type":"city", | |
| "name":"Minneapolis", | |
| "full_name":"Minneapolis, MN", | |
| "country_code":"US", | |
| "country":"United States", | |
| "contained_within":[], | |
| "bounding_box":{ | |
| "type":"Polygon", | |
| "coordinates":[ | |
| [ | |
| [ | |
| -93.329148, | |
| 44.889964 | |
| ], | |
| [ | |
| -93.194578, | |
| 44.889964 | |
| ], | |
| [ | |
| -93.194578, | |
| 45.051257 | |
| ], | |
| [ | |
| -93.329148, | |
| 45.051257 | |
| ] | |
| ] | |
| ] | |
| }, | |
| "attributes":{} | |
| }, | |
| "contributors":null, | |
| "retweet_count":5, | |
| "favorite_count":7, | |
| "entities":{ | |
| "hashtags":[], | |
| "symbols":[], | |
| "user_mentions":[], | |
| "urls":[], | |
| "media":[ | |
| { | |
| "id":573656182415487000, | |
| "id_str":"573656182415486976", | |
| "indices":[ | |
| 16, | |
| 38 | |
| ], | |
| "media_url":"http://pbs.twimg.com/tweet_video_thumb/B_YJQjAU8AAb9Ic.png", | |
| "media_url_https":"https://pbs.twimg.com/tweet_video_thumb/B_YJQjAU8AAb9Ic.png", | |
| "url":"http://t.co/EjoXG50jfM", | |
| "display_url":"pic.twitter.com/EjoXG50jfM", | |
| "expanded_url":"http://twitter.com/TweetSmarter/status/573656183149453312/photo/1", | |
| "type":"photo", | |
| "sizes":{ | |
| "large":{ | |
| "w":480, | |
| "h":240, | |
| "resize":"fit" | |
| }, | |
| "thumb":{ | |
| "w":150, | |
| "h":150, | |
| "resize":"crop" | |
| }, | |
| "small":{ | |
| "w":340, | |
| "h":170, | |
| "resize":"fit" | |
| }, | |
| "medium":{ | |
| "w":480, | |
| "h":240, | |
| "resize":"fit" | |
| } | |
| } | |
| } | |
| ] | |
| }, | |
| "extended_entities":{ | |
| "media":[ | |
| { | |
| "id":573656182415487000, | |
| "id_str":"573656182415486976", | |
| "indices":[ | |
| 16, | |
| 38 | |
| ], | |
| "media_url":"http://pbs.twimg.com/tweet_video_thumb/B_YJQjAU8AAb9Ic.png", | |
| "media_url_https":"https://pbs.twimg.com/tweet_video_thumb/B_YJQjAU8AAb9Ic.png", | |
| "url":"http://t.co/EjoXG50jfM", | |
| "display_url":"pic.twitter.com/EjoXG50jfM", | |
| "expanded_url":"http://twitter.com/TweetSmarter/status/573656183149453312/photo/1", | |
| "type":"animated_gif", | |
| "sizes":{ | |
| "large":{ | |
| "w":480, | |
| "h":240, | |
| "resize":"fit" | |
| }, | |
| "thumb":{ | |
| "w":150, | |
| "h":150, | |
| "resize":"crop" | |
| }, | |
| "small":{ | |
| "w":340, | |
| "h":170, | |
| "resize":"fit" | |
| }, | |
| "medium":{ | |
| "w":480, | |
| "h":240, | |
| "resize":"fit" | |
| } | |
| }, | |
| "video_info":{ | |
| "aspect_ratio":[ | |
| 2, | |
| 1 | |
| ], | |
| "variants":[ | |
| { | |
| "bitrate":0, | |
| "content_type":"video/mp4", | |
| "url":"https://pbs.twimg.com/tweet_video/B_YJQjAU8AAb9Ic.mp4" | |
| } | |
| ] | |
| } | |
| } | |
| ] | |
| }, | |
| "favorited":false, | |
| "retweeted":false, | |
| "possibly_sensitive":false, | |
| "possibly_sensitive_appealable":false, | |
| "lang":"en" | |
| }, | |
| "retweet_count":5, | |
| "favorite_count":0, | |
| "entities":{ | |
| "hashtags":[], | |
| "symbols":[], | |
| "user_mentions":[ | |
| { | |
| "screen_name":"TweetSmarter", | |
| "name":"TweetSmarter", | |
| "id":15947185, | |
| "id_str":"15947185", | |
| "indices":[ | |
| 3, | |
| 16 | |
| ] | |
| } | |
| ], | |
| "urls":[], | |
| "media":[ | |
| { | |
| "id":573656182415487000, | |
| "id_str":"573656182415486976", | |
| "indices":[ | |
| 34, | |
| 56 | |
| ], | |
| "media_url":"http://pbs.twimg.com/tweet_video_thumb/B_YJQjAU8AAb9Ic.png", | |
| "media_url_https":"https://pbs.twimg.com/tweet_video_thumb/B_YJQjAU8AAb9Ic.png", | |
| "url":"http://t.co/EjoXG50jfM", | |
| "display_url":"pic.twitter.com/EjoXG50jfM", | |
| "expanded_url":"http://twitter.com/TweetSmarter/status/573656183149453312/photo/1", | |
| "type":"photo", | |
| "sizes":{ | |
| "large":{ | |
| "w":480, | |
| "h":240, | |
| "resize":"fit" | |
| }, | |
| "thumb":{ | |
| "w":150, | |
| "h":150, | |
| "resize":"crop" | |
| }, | |
| "small":{ | |
| "w":340, | |
| "h":170, | |
| "resize":"fit" | |
| }, | |
| "medium":{ | |
| "w":480, | |
| "h":240, | |
| "resize":"fit" | |
| } | |
| }, | |
| "source_status_id":573656183149453300, | |
| "source_status_id_str":"573656183149453312", | |
| "source_user_id":15947185, | |
| "source_user_id_str":"15947185" | |
| } | |
| ] | |
| }, | |
| "extended_entities":{ | |
| "media":[ | |
| { | |
| "id":573656182415487000, | |
| "id_str":"573656182415486976", | |
| "indices":[ | |
| 34, | |
| 56 | |
| ], | |
| "media_url":"http://pbs.twimg.com/tweet_video_thumb/B_YJQjAU8AAb9Ic.png", | |
| "media_url_https":"https://pbs.twimg.com/tweet_video_thumb/B_YJQjAU8AAb9Ic.png", | |
| "url":"http://t.co/EjoXG50jfM", | |
| "display_url":"pic.twitter.com/EjoXG50jfM", | |
| "expanded_url":"http://twitter.com/TweetSmarter/status/573656183149453312/photo/1", | |
| "type":"animated_gif", | |
| "sizes":{ | |
| "large":{ | |
| "w":480, | |
| "h":240, | |
| "resize":"fit" | |
| }, | |
| "thumb":{ | |
| "w":150, | |
| "h":150, | |
| "resize":"crop" | |
| }, | |
| "small":{ | |
| "w":340, | |
| "h":170, | |
| "resize":"fit" | |
| }, | |
| "medium":{ | |
| "w":480, | |
| "h":240, | |
| "resize":"fit" | |
| } | |
| }, | |
| "source_status_id":573656183149453300, | |
| "source_status_id_str":"573656183149453312", | |
| "source_user_id":15947185, | |
| "source_user_id_str":"15947185", | |
| "video_info":{ | |
| "aspect_ratio":[ | |
| 2, | |
| 1 | |
| ], | |
| "variants":[ | |
| { | |
| "bitrate":0, | |
| "content_type":"video/mp4", | |
| "url":"https://pbs.twimg.com/tweet_video/B_YJQjAU8AAb9Ic.mp4" | |
| } | |
| ] | |
| } | |
| } | |
| ] | |
| }, | |
| "favorited":false, | |
| "retweeted":false, | |
| "possibly_sensitive":false, | |
| "possibly_sensitive_appealable":false, | |
| "lang":"en" | |
| }, | |
| { | |
| "created_at":"Fri Mar 06 02:22:11 +0000 2015", | |
| "id":573669877375877100, | |
| "id_str":"573669877375877121", | |
| "text":"Hard work, odd coincidences, fortuitous timing, personal networks—and dumb luck. “How They Got There” #design @khoi http://t.co/dYLwH9gJhK", | |
| "source":"<a href=\"https://about.twitter.com/products/tweetdeck\" rel=\"nofollow\">TweetDeck</a>", | |
| "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":61133, | |
| "id_str":"61133", | |
| "name":"Jeffrey Zeldman", | |
| "screen_name":"zeldman", | |
| "location":"New York, NY", | |
| "profile_location":null, | |
| "description":"Founder, Happy Cog studios. Author, Designing With Web Standards. Publisher, A List Apart, A Book Apart. Co-founder, An Event Apart. Host, Big Web Show.", | |
| "url":"http://t.co/DTN2fH5Q7F", | |
| "entities":{ | |
| "url":{ | |
| "urls":[ | |
| { | |
| "url":"http://t.co/DTN2fH5Q7F", | |
| "expanded_url":"http://www.zeldman.com/", | |
| "display_url":"zeldman.com", | |
| "indices":[ | |
| 0, | |
| 22 | |
| ] | |
| } | |
| ] | |
| }, | |
| "description":{ | |
| "urls":[] | |
| } | |
| }, | |
| "protected":false, | |
| "followers_count":337837, | |
| "friends_count":2833, | |
| "listed_count":10812, | |
| "created_at":"Tue Dec 12 17:11:41 +0000 2006", | |
| "favourites_count":26579, | |
| "utc_offset":-18000, | |
| "time_zone":"Eastern Time (US & Canada)", | |
| "geo_enabled":true, | |
| "verified":true, | |
| "statuses_count":39702, | |
| "lang":"en", | |
| "contributors_enabled":false, | |
| "is_translator":false, | |
| "is_translation_enabled":false, | |
| "profile_background_color":"FFFFFF", | |
| "profile_background_image_url":"http://pbs.twimg.com/profile_background_images/668422421/92c825dcac4081c34500cf2109158de9.png", | |
| "profile_background_image_url_https":"https://pbs.twimg.com/profile_background_images/668422421/92c825dcac4081c34500cf2109158de9.png", | |
| "profile_background_tile":true, | |
| "profile_image_url":"http://pbs.twimg.com/profile_images/556907824723161088/6pEAR3vw_normal.jpeg", | |
| "profile_image_url_https":"https://pbs.twimg.com/profile_images/556907824723161088/6pEAR3vw_normal.jpeg", | |
| "profile_banner_url":"https://pbs.twimg.com/profile_banners/61133/1421612609", | |
| "profile_link_color":"CC0033", | |
| "profile_sidebar_border_color":"FFFFFF", | |
| "profile_sidebar_fill_color":"FF6600", | |
| "profile_text_color":"000000", | |
| "profile_use_background_image":false, | |
| "default_profile":false, | |
| "default_profile_image":false, | |
| "following":true, | |
| "follow_request_sent":false, | |
| "notifications":false | |
| }, | |
| "geo":null, | |
| "coordinates":null, | |
| "place":null, | |
| "contributors":null, | |
| "retweet_count":3, | |
| "favorite_count":5, | |
| "entities":{ | |
| "hashtags":[ | |
| { | |
| "text":"design", | |
| "indices":[ | |
| 102, | |
| 109 | |
| ] | |
| } | |
| ], | |
| "symbols":[], | |
| "user_mentions":[ | |
| { | |
| "screen_name":"khoi", | |
| "name":"Khoi Vinh", | |
| "id":78453, | |
| "id_str":"78453", | |
| "indices":[ | |
| 110, | |
| 115 | |
| ] | |
| } | |
| ], | |
| "urls":[ | |
| { | |
| "url":"http://t.co/dYLwH9gJhK", | |
| "expanded_url":"http://howtheygotthere.us", | |
| "display_url":"howtheygotthere.us", | |
| "indices":[ | |
| 116, | |
| 138 | |
| ] | |
| } | |
| ] | |
| }, | |
| "favorited":false, | |
| "retweeted":false, | |
| "possibly_sensitive":false, | |
| "possibly_sensitive_appealable":false, | |
| "lang":"en" | |
| }, | |
| { | |
| "created_at":"Fri Mar 06 02:15:22 +0000 2015", | |
| "id":573668159464538100, | |
| "id_str":"573668159464538112", | |
| "text":"Words We Love Too Much http://t.co/eNINsyBJMw #grammarstuff #feedly", | |
| "source":"<a href=\"http://www.hootsuite.com\" rel=\"nofollow\">Hootsuite</a>", | |
| "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":84136684, | |
| "id_str":"84136684", | |
| "name":"Pronuncian", | |
| "screen_name":"pronuncian", | |
| "location":"Seattle", | |
| "profile_location":null, | |
| "description":"American English pronunciation lessons, podcasts, news, and other interesting English bits.", | |
| "url":"http://t.co/pe38XIyEzu", | |
| "entities":{ | |
| "url":{ | |
| "urls":[ | |
| { | |
| "url":"http://t.co/pe38XIyEzu", | |
| "expanded_url":"http://www.pronuncian.com", | |
| "display_url":"pronuncian.com", | |
| "indices":[ | |
| 0, | |
| 22 | |
| ] | |
| } | |
| ] | |
| }, | |
| "description":{ | |
| "urls":[] | |
| } | |
| }, | |
| "protected":false, | |
| "followers_count":2175, | |
| "friends_count":89, | |
| "listed_count":96, | |
| "created_at":"Wed Oct 21 19:04:06 +0000 2009", | |
| "favourites_count":35, | |
| "utc_offset":-28800, | |
| "time_zone":"Pacific Time (US & Canada)", | |
| "geo_enabled":false, | |
| "verified":false, | |
| "statuses_count":2162, | |
| "lang":"en", | |
| "contributors_enabled":false, | |
| "is_translator":false, | |
| "is_translation_enabled":false, | |
| "profile_background_color":"1EA4C0", | |
| "profile_background_image_url":"http://pbs.twimg.com/profile_background_images/378800000108604168/f89ff292247b64b7ed6a528daf7b3cb8.jpeg", | |
| "profile_background_image_url_https":"https://pbs.twimg.com/profile_background_images/378800000108604168/f89ff292247b64b7ed6a528daf7b3cb8.jpeg", | |
| "profile_background_tile":false, | |
| "profile_image_url":"http://pbs.twimg.com/profile_images/821520382/logo_small_normal.gif", | |
| "profile_image_url_https":"https://pbs.twimg.com/profile_images/821520382/logo_small_normal.gif", | |
| "profile_link_color":"0084B4", | |
| "profile_sidebar_border_color":"FFFFFF", | |
| "profile_sidebar_fill_color":"DDEEF6", | |
| "profile_text_color":"333333", | |
| "profile_use_background_image":true, | |
| "default_profile":false, | |
| "default_profile_image":false, | |
| "following":true, | |
| "follow_request_sent":false, | |
| "notifications":false | |
| }, | |
| "geo":null, | |
| "coordinates":null, | |
| "place":null, | |
| "contributors":null, | |
| "retweet_count":0, | |
| "favorite_count":1, | |
| "entities":{ | |
| "hashtags":[ | |
| { | |
| "text":"grammarstuff", | |
| "indices":[ | |
| 46, | |
| 59 | |
| ] | |
| }, | |
| { | |
| "text":"feedly", | |
| "indices":[ | |
| 60, | |
| 67 | |
| ] | |
| } | |
| ], | |
| "symbols":[], | |
| "user_mentions":[], | |
| "urls":[ | |
| { | |
| "url":"http://t.co/eNINsyBJMw", | |
| "expanded_url":"http://afterdeadline.blogs.nytimes.com/2015/03/03/words-we-love-too-much-15/", | |
| "display_url":"afterdeadline.blogs.nytimes.com/2015/03/03/wor…", | |
| "indices":[ | |
| 23, | |
| 45 | |
| ] | |
| } | |
| ] | |
| }, | |
| "favorited":false, | |
| "retweeted":false, | |
| "possibly_sensitive":false, | |
| "possibly_sensitive_appealable":false, | |
| "lang":"en" | |
| }, | |
| { | |
| "created_at":"Fri Mar 06 02:14:10 +0000 2015", | |
| "id":573667860205060100, | |
| "id_str":"573667860205060096", | |
| "text":"RT @briantford: Angular is in a great place to help foster diversity in the open source world, says @judytuna #ngconf http://t.co/NCA4QbOSjt", | |
| "source":"<a href=\"http://twitter.com/download/android\" rel=\"nofollow\">Twitter for Android</a>", | |
| "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":16604718, | |
| "id_str":"16604718", | |
| "name":"Brad Green", | |
| "screen_name":"bradlygreen", | |
| "location":"Mountain View, CA", | |
| "profile_location":null, | |
| "description":"I work at Google where I manage AngularJS and Google's internal sales productivity applications. I'm a dad.", | |
| "url":"http://t.co/spxfRmI7Pw", | |
| "entities":{ | |
| "url":{ | |
| "urls":[ | |
| { | |
| "url":"http://t.co/spxfRmI7Pw", | |
| "expanded_url":"http://google.com/+BradGreen", | |
| "display_url":"google.com/+BradGreen", | |
| "indices":[ | |
| 0, | |
| 22 | |
| ] | |
| } | |
| ] | |
| }, | |
| "description":{ | |
| "urls":[] | |
| } | |
| }, | |
| "protected":false, | |
| "followers_count":11308, | |
| "friends_count":175, | |
| "listed_count":530, | |
| "created_at":"Sun Oct 05 19:23:12 +0000 2008", | |
| "favourites_count":1517, | |
| "utc_offset":-28800, | |
| "time_zone":"Pacific Time (US & Canada)", | |
| "geo_enabled":true, | |
| "verified":false, | |
| "statuses_count":2441, | |
| "lang":"en", | |
| "contributors_enabled":false, | |
| "is_translator":false, | |
| "is_translation_enabled":false, | |
| "profile_background_color":"308EBA", | |
| "profile_background_image_url":"http://pbs.twimg.com/profile_background_images/378800000120361082/ea22a975d89accbb6bf7ca0b352e1f7d.png", | |
| "profile_background_image_url_https":"https://pbs.twimg.com/profile_background_images/378800000120361082/ea22a975d89accbb6bf7ca0b352e1f7d.png", | |
| "profile_background_tile":true, | |
| "profile_image_url":"http://pbs.twimg.com/profile_images/2344189796/o5u8bz6cep1bfkasvsm1_normal.jpeg", | |
| "profile_image_url_https":"https://pbs.twimg.com/profile_images/2344189796/o5u8bz6cep1bfkasvsm1_normal.jpeg", | |
| "profile_banner_url":"https://pbs.twimg.com/profile_banners/16604718/1398364530", | |
| "profile_link_color":"0084B4", | |
| "profile_sidebar_border_color":"FFFFFF", | |
| "profile_sidebar_fill_color":"DDEEF6", | |
| "profile_text_color":"333333", | |
| "profile_use_background_image":true, | |
| "default_profile":false, | |
| "default_profile_image":false, | |
| "following":true, | |
| "follow_request_sent":false, | |
| "notifications":false | |
| }, | |
| "geo":null, | |
| "coordinates":null, | |
| "place":null, | |
| "contributors":null, | |
| "retweeted_status":{ | |
| "created_at":"Thu Mar 05 21:16:21 +0000 2015", | |
| "id":573592910953779200, | |
| "id_str":"573592910953779200", | |
| "text":"Angular is in a great place to help foster diversity in the open source world, says @judytuna #ngconf http://t.co/NCA4QbOSjt", | |
| "source":"<a href=\"http://twitter.com/download/android\" rel=\"nofollow\">Twitter for Android</a>", | |
| "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":290864535, | |
| "id_str":"290864535", | |
| "name":"Brian Ford ", | |
| "screen_name":"briantford", | |
| "location":"San Francisco", | |
| "profile_location":null, | |
| "description":"@angularjs at @google ✨ javascript mystic ✨ the most millennial person in the room", | |
| "url":"http://t.co/H4yEfDYOjh", | |
| "entities":{ | |
| "url":{ | |
| "urls":[ | |
| { | |
| "url":"http://t.co/H4yEfDYOjh", | |
| "expanded_url":"http://briantford.com", | |
| "display_url":"briantford.com", | |
| "indices":[ | |
| 0, | |
| 22 | |
| ] | |
| } | |
| ] | |
| }, | |
| "description":{ | |
| "urls":[] | |
| } | |
| }, | |
| "protected":false, | |
| "followers_count":9301, | |
| "friends_count":691, | |
| "listed_count":480, | |
| "created_at":"Sun May 01 02:30:04 +0000 2011", | |
| "favourites_count":6385, | |
| "utc_offset":-28800, | |
| "time_zone":"Pacific Time (US & Canada)", | |
| "geo_enabled":true, | |
| "verified":false, | |
| "statuses_count":7115, | |
| "lang":"en", | |
| "contributors_enabled":false, | |
| "is_translator":false, | |
| "is_translation_enabled":false, | |
| "profile_background_color":"FEFEFE", | |
| "profile_background_image_url":"http://abs.twimg.com/images/themes/theme14/bg.gif", | |
| "profile_background_image_url_https":"https://abs.twimg.com/images/themes/theme14/bg.gif", | |
| "profile_background_tile":true, | |
| "profile_image_url":"http://pbs.twimg.com/profile_images/561959487872200705/Do-3xJ0U_normal.jpeg", | |
| "profile_image_url_https":"https://pbs.twimg.com/profile_images/561959487872200705/Do-3xJ0U_normal.jpeg", | |
| "profile_banner_url":"https://pbs.twimg.com/profile_banners/290864535/1424285509", | |
| "profile_link_color":"444444", | |
| "profile_sidebar_border_color":"FFFFFF", | |
| "profile_sidebar_fill_color":"EFEFEF", | |
| "profile_text_color":"333333", | |
| "profile_use_background_image":true, | |
| "default_profile":false, | |
| "default_profile_image":false, | |
| "following":false, | |
| "follow_request_sent":false, | |
| "notifications":false | |
| }, | |
| "geo":{ | |
| "type":"Point", | |
| "coordinates":[ | |
| 40.7581107, | |
| -111.891409 | |
| ] | |
| }, | |
| "coordinates":{ | |
| "type":"Point", | |
| "coordinates":[ | |
| -111.891409, | |
| 40.7581107 | |
| ] | |
| }, | |
| "place":{ | |
| "id":"bd7c511e9f8bc5da", | |
| "url":"https://api.twitter.com/1.1/geo/id/bd7c511e9f8bc5da.json", | |
| "place_type":"city", | |
| "name":"Salt Lake City", | |
| "full_name":"Salt Lake City, UT", | |
| "country_code":"US", | |
| "country":"United States", | |
| "contained_within":[], | |
| "bounding_box":{ | |
| "type":"Polygon", | |
| "coordinates":[ | |
| [ | |
| [ | |
| -112.0383105, | |
| 40.6998952 | |
| ], | |
| [ | |
| -111.795741, | |
| 40.6998952 | |
| ], | |
| [ | |
| -111.795741, | |
| 40.8317151 | |
| ], | |
| [ | |
| -112.0383105, | |
| 40.8317151 | |
| ] | |
| ] | |
| ] | |
| }, | |
| "attributes":{} | |
| }, | |
| "contributors":null, | |
| "retweet_count":12, | |
| "favorite_count":17, | |
| "entities":{ | |
| "hashtags":[ | |
| { | |
| "text":"ngconf", | |
| "indices":[ | |
| 94, | |
| 101 | |
| ] | |
| } | |
| ], | |
| "symbols":[], | |
| "user_mentions":[ | |
| { | |
| "screen_name":"judytuna", | |
| "name":"judytuna", | |
| "id":759694, | |
| "id_str":"759694", | |
| "indices":[ | |
| 84, | |
| 93 | |
| ] | |
| } | |
| ], | |
| "urls":[], | |
| "media":[ | |
| { | |
| "id":573592905383723000, | |
| "id_str":"573592905383723008", | |
| "indices":[ | |
| 102, | |
| 124 | |
| ], | |
| "media_url":"http://pbs.twimg.com/media/B_XPtVsUwAAU9f2.jpg", | |
| "media_url_https":"https://pbs.twimg.com/media/B_XPtVsUwAAU9f2.jpg", | |
| "url":"http://t.co/NCA4QbOSjt", | |
| "display_url":"pic.twitter.com/NCA4QbOSjt", | |
| "expanded_url":"http://twitter.com/briantford/status/573592910953779200/photo/1", | |
| "type":"photo", | |
| "sizes":{ | |
| "small":{ | |
| "w":340, | |
| "h":340, | |
| "resize":"fit" | |
| }, | |
| "thumb":{ | |
| "w":150, | |
| "h":150, | |
| "resize":"crop" | |
| }, | |
| "medium":{ | |
| "w":600, | |
| "h":600, | |
| "resize":"fit" | |
| }, | |
| "large":{ | |
| "w":1024, | |
| "h":1024, | |
| "resize":"fit" | |
| } | |
| } | |
| } | |
| ] | |
| }, | |
| "extended_entities":{ | |
| "media":[ | |
| { | |
| "id":573592905383723000, | |
| "id_str":"573592905383723008", | |
| "indices":[ | |
| 102, | |
| 124 | |
| ], | |
| "media_url":"http://pbs.twimg.com/media/B_XPtVsUwAAU9f2.jpg", | |
| "media_url_https":"https://pbs.twimg.com/media/B_XPtVsUwAAU9f2.jpg", | |
| "url":"http://t.co/NCA4QbOSjt", | |
| "display_url":"pic.twitter.com/NCA4QbOSjt", | |
| "expanded_url":"http://twitter.com/briantford/status/573592910953779200/photo/1", | |
| "type":"photo", | |
| "sizes":{ | |
| "small":{ | |
| "w":340, | |
| "h":340, | |
| "resize":"fit" | |
| }, | |
| "thumb":{ | |
| "w":150, | |
| "h":150, | |
| "resize":"crop" | |
| }, | |
| "medium":{ | |
| "w":600, | |
| "h":600, | |
| "resize":"fit" | |
| }, | |
| "large":{ | |
| "w":1024, | |
| "h":1024, | |
| "resize":"fit" | |
| } | |
| } | |
| } | |
| ] | |
| }, | |
| "favorited":false, | |
| "retweeted":false, | |
| "possibly_sensitive":false, | |
| "possibly_sensitive_appealable":false, | |
| "lang":"en" | |
| }, | |
| "retweet_count":12, | |
| "favorite_count":0, | |
| "entities":{ | |
| "hashtags":[ | |
| { | |
| "text":"ngconf", | |
| "indices":[ | |
| 110, | |
| 117 | |
| ] | |
| } | |
| ], | |
| "symbols":[], | |
| "user_mentions":[ | |
| { | |
| "screen_name":"briantford", | |
| "name":"Brian Ford ", | |
| "id":290864535, | |
| "id_str":"290864535", | |
| "indices":[ | |
| 3, | |
| 14 | |
| ] | |
| }, | |
| { | |
| "screen_name":"judytuna", | |
| "name":"judytuna", | |
| "id":759694, | |
| "id_str":"759694", | |
| "indices":[ | |
| 100, | |
| 109 | |
| ] | |
| } | |
| ], | |
| "urls":[], | |
| "media":[ | |
| { | |
| "id":573592905383723000, | |
| "id_str":"573592905383723008", | |
| "indices":[ | |
| 118, | |
| 140 | |
| ], | |
| "media_url":"http://pbs.twimg.com/media/B_XPtVsUwAAU9f2.jpg", | |
| "media_url_https":"https://pbs.twimg.com/media/B_XPtVsUwAAU9f2.jpg", | |
| "url":"http://t.co/NCA4QbOSjt", | |
| "display_url":"pic.twitter.com/NCA4QbOSjt", | |
| "expanded_url":"http://twitter.com/briantford/status/573592910953779200/photo/1", | |
| "type":"photo", | |
| "sizes":{ | |
| "small":{ | |
| "w":340, | |
| "h":340, | |
| "resize":"fit" | |
| }, | |
| "thumb":{ | |
| "w":150, | |
| "h":150, | |
| "resize":"crop" | |
| }, | |
| "medium":{ | |
| "w":600, | |
| "h":600, | |
| "resize":"fit" | |
| }, | |
| "large":{ | |
| "w":1024, | |
| "h":1024, | |
| "resize":"fit" | |
| } | |
| }, | |
| "source_status_id":573592910953779200, | |
| "source_status_id_str":"573592910953779200", | |
| "source_user_id":290864535, | |
| "source_user_id_str":"290864535" | |
| } | |
| ] | |
| }, | |
| "extended_entities":{ | |
| "media":[ | |
| { | |
| "id":573592905383723000, | |
| "id_str":"573592905383723008", | |
| "indices":[ | |
| 118, | |
| 140 | |
| ], | |
| "media_url":"http://pbs.twimg.com/media/B_XPtVsUwAAU9f2.jpg", | |
| "media_url_https":"https://pbs.twimg.com/media/B_XPtVsUwAAU9f2.jpg", | |
| "url":"http://t.co/NCA4QbOSjt", | |
| "display_url":"pic.twitter.com/NCA4QbOSjt", | |
| "expanded_url":"http://twitter.com/briantford/status/573592910953779200/photo/1", | |
| "type":"photo", | |
| "sizes":{ | |
| "small":{ | |
| "w":340, | |
| "h":340, | |
| "resize":"fit" | |
| }, | |
| "thumb":{ | |
| "w":150, | |
| "h":150, | |
| "resize":"crop" | |
| }, | |
| "medium":{ | |
| "w":600, | |
| "h":600, | |
| "resize":"fit" | |
| }, | |
| "large":{ | |
| "w":1024, | |
| "h":1024, | |
| "resize":"fit" | |
| } | |
| }, | |
| "source_status_id":573592910953779200, | |
| "source_status_id_str":"573592910953779200", | |
| "source_user_id":290864535, | |
| "source_user_id_str":"290864535" | |
| } | |
| ] | |
| }, | |
| "favorited":false, | |
| "retweeted":false, | |
| "possibly_sensitive":false, | |
| "possibly_sensitive_appealable":false, | |
| "lang":"en" | |
| }, | |
| { | |
| "created_at":"Fri Mar 06 02:07:56 +0000 2015", | |
| "id":573666291459956740, | |
| "id_str":"573666291459956737", | |
| "text":"RT @tenderlove: This means @united has direct flights to literally everywhere!!! https://t.co/iuoXh3dtAs", | |
| "source":"<a href=\"http://twitter.com\" rel=\"nofollow\">Twitter Web Client</a>", | |
| "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":52593, | |
| "id_str":"52593", | |
| "name":"Avdi Grimm", | |
| "screen_name":"avdi", | |
| "location":"York, PA", | |
| "profile_location":null, | |
| "description":"80% angel, 10% daemon, the rest is hard to explain.", | |
| "url":"http://t.co/vCUY54FsV1", | |
| "entities":{ | |
| "url":{ | |
| "urls":[ | |
| { | |
| "url":"http://t.co/vCUY54FsV1", | |
| "expanded_url":"http://avdi.org", | |
| "display_url":"avdi.org", | |
| "indices":[ | |
| 0, | |
| 22 | |
| ] | |
| } | |
| ] | |
| }, | |
| "description":{ | |
| "urls":[] | |
| } | |
| }, | |
| "protected":false, | |
| "followers_count":13766, | |
| "friends_count":43, | |
| "listed_count":798, | |
| "created_at":"Sat Dec 09 01:37:40 +0000 2006", | |
| "favourites_count":1473, | |
| "utc_offset":-18000, | |
| "time_zone":"Eastern Time (US & Canada)", | |
| "geo_enabled":true, | |
| "verified":false, | |
| "statuses_count":44181, | |
| "lang":"en", | |
| "contributors_enabled":false, | |
| "is_translator":false, | |
| "is_translation_enabled":false, | |
| "profile_background_color":"9AE4E8", | |
| "profile_background_image_url":"http://abs.twimg.com/images/themes/theme1/bg.png", | |
| "profile_background_image_url_https":"https://abs.twimg.com/images/themes/theme1/bg.png", | |
| "profile_background_tile":false, | |
| "profile_image_url":"http://pbs.twimg.com/profile_images/436586539229777920/4NQoTOEN_normal.png", | |
| "profile_image_url_https":"https://pbs.twimg.com/profile_images/436586539229777920/4NQoTOEN_normal.png", | |
| "profile_link_color":"0000FF", | |
| "profile_sidebar_border_color":"87BC44", | |
| "profile_sidebar_fill_color":"E0FF92", | |
| "profile_text_color":"000000", | |
| "profile_use_background_image":true, | |
| "default_profile":false, | |
| "default_profile_image":false, | |
| "following":true, | |
| "follow_request_sent":false, | |
| "notifications":true | |
| }, | |
| "geo":null, | |
| "coordinates":null, | |
| "place":null, | |
| "contributors":null, | |
| "retweeted_status":{ | |
| "created_at":"Thu Mar 05 23:37:56 +0000 2015", | |
| "id":573628543323664400, | |
| "id_str":"573628543323664384", | |
| "text":"This means @united has direct flights to literally everywhere!!! https://t.co/iuoXh3dtAs", | |
| "source":"<a href=\"http://www.echofon.com/\" rel=\"nofollow\">Echofon</a>", | |
| "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":14761655, | |
| "id_str":"14761655", | |
| "name":"Aaron Patterson", | |
| "screen_name":"tenderlove", | |
| "location":"Seattle, WA", | |
| "profile_location":null, | |
| "description":"ひげの山男。 When I'm not trimming my beard, I'm hanging out with my wife, @ebiltwin.", | |
| "url":"http://t.co/gN1GLubxAe", | |
| "entities":{ | |
| "url":{ | |
| "urls":[ | |
| { | |
| "url":"http://t.co/gN1GLubxAe", | |
| "expanded_url":"http://tenderlovemaking.com", | |
| "display_url":"tenderlovemaking.com", | |
| "indices":[ | |
| 0, | |
| 22 | |
| ] | |
| } | |
| ] | |
| }, | |
| "description":{ | |
| "urls":[] | |
| } | |
| }, | |
| "protected":false, | |
| "followers_count":25262, | |
| "friends_count":512, | |
| "listed_count":1433, | |
| "created_at":"Tue May 13 17:25:31 +0000 2008", | |
| "favourites_count":4259, | |
| "utc_offset":-28800, | |
| "time_zone":"Pacific Time (US & Canada)", | |
| "geo_enabled":true, | |
| "verified":false, | |
| "statuses_count":35572, | |
| "lang":"en", | |
| "contributors_enabled":false, | |
| "is_translator":false, | |
| "is_translation_enabled":false, | |
| "profile_background_color":"C0DEED", | |
| "profile_background_image_url":"http://abs.twimg.com/images/themes/theme1/bg.png", | |
| "profile_background_image_url_https":"https://abs.twimg.com/images/themes/theme1/bg.png", | |
| "profile_background_tile":false, | |
| "profile_image_url":"http://pbs.twimg.com/profile_images/378800000325798111/ca48276f8ebbbbac9c6ce83aac3c8548_normal.jpeg", | |
| "profile_image_url_https":"https://pbs.twimg.com/profile_images/378800000325798111/ca48276f8ebbbbac9c6ce83aac3c8548_normal.jpeg", | |
| "profile_banner_url":"https://pbs.twimg.com/profile_banners/14761655/1425591616", | |
| "profile_link_color":"0084B4", | |
| "profile_sidebar_border_color":"C0DEED", | |
| "profile_sidebar_fill_color":"DDEEF6", | |
| "profile_text_color":"333333", | |
| "profile_use_background_image":true, | |
| "default_profile":true, | |
| "default_profile_image":false, | |
| "following":false, | |
| "follow_request_sent":false, | |
| "notifications":false | |
| }, | |
| "geo":null, | |
| "coordinates":null, | |
| "place":null, | |
| "contributors":null, | |
| "retweet_count":17, | |
| "favorite_count":14, | |
| "entities":{ | |
| "hashtags":[], | |
| "symbols":[], | |
| "user_mentions":[ | |
| { | |
| "screen_name":"united", | |
| "name":"United", | |
| "id":260907612, | |
| "id_str":"260907612", | |
| "indices":[ | |
| 11, | |
| 18 | |
| ] | |
| } | |
| ], | |
| "urls":[ | |
| { | |
| "url":"https://t.co/iuoXh3dtAs", | |
| "expanded_url":"https://twitter.com/united/status/573625507843043328", | |
| "display_url":"twitter.com/united/status/…", | |
| "indices":[ | |
| 65, | |
| 88 | |
| ] | |
| } | |
| ] | |
| }, | |
| "favorited":false, | |
| "retweeted":false, | |
| "possibly_sensitive":false, | |
| "possibly_sensitive_appealable":false, | |
| "lang":"en" | |
| }, | |
| "retweet_count":17, | |
| "favorite_count":0, | |
| "entities":{ | |
| "hashtags":[], | |
| "symbols":[], | |
| "user_mentions":[ | |
| { | |
| "screen_name":"tenderlove", | |
| "name":"Aaron Patterson", | |
| "id":14761655, | |
| "id_str":"14761655", | |
| "indices":[ | |
| 3, | |
| 14 | |
| ] | |
| }, | |
| { | |
| "screen_name":"united", | |
| "name":"United", | |
| "id":260907612, | |
| "id_str":"260907612", | |
| "indices":[ | |
| 27, | |
| 34 | |
| ] | |
| } | |
| ], | |
| "urls":[ | |
| { | |
| "url":"https://t.co/iuoXh3dtAs", | |
| "expanded_url":"https://twitter.com/united/status/573625507843043328", | |
| "display_url":"twitter.com/united/status/…", | |
| "indices":[ | |
| 81, | |
| 104 | |
| ] | |
| } | |
| ] | |
| }, | |
| "favorited":false, | |
| "retweeted":false, | |
| "possibly_sensitive":false, | |
| "possibly_sensitive_appealable":false, | |
| "lang":"en" | |
| }, | |
| { | |
| "created_at":"Fri Mar 06 02:05:22 +0000 2015", | |
| "id":573665642542428160, | |
| "id_str":"573665642542428162", | |
| "text":". @united @tenderlove @searls I suggest you go on to prove that black is white. Watch out for zebras.", | |
| "source":"<a href=\"http://twitter.com\" rel=\"nofollow\">Twitter Web Client</a>", | |
| "truncated":false, | |
| "in_reply_to_status_id":573625507843043300, | |
| "in_reply_to_status_id_str":"573625507843043328", | |
| "in_reply_to_user_id":260907612, | |
| "in_reply_to_user_id_str":"260907612", | |
| "in_reply_to_screen_name":"united", | |
| "user":{ | |
| "id":52593, | |
| "id_str":"52593", | |
| "name":"Avdi Grimm", | |
| "screen_name":"avdi", | |
| "location":"York, PA", | |
| "profile_location":null, | |
| "description":"80% angel, 10% daemon, the rest is hard to explain.", | |
| "url":"http://t.co/vCUY54FsV1", | |
| "entities":{ | |
| "url":{ | |
| "urls":[ | |
| { | |
| "url":"http://t.co/vCUY54FsV1", | |
| "expanded_url":"http://avdi.org", | |
| "display_url":"avdi.org", | |
| "indices":[ | |
| 0, | |
| 22 | |
| ] | |
| } | |
| ] | |
| }, | |
| "description":{ | |
| "urls":[] | |
| } | |
| }, | |
| "protected":false, | |
| "followers_count":13766, | |
| "friends_count":43, | |
| "listed_count":798, | |
| "created_at":"Sat Dec 09 01:37:40 +0000 2006", | |
| "favourites_count":1473, | |
| "utc_offset":-18000, | |
| "time_zone":"Eastern Time (US & Canada)", | |
| "geo_enabled":true, | |
| "verified":false, | |
| "statuses_count":44181, | |
| "lang":"en", | |
| "contributors_enabled":false, | |
| "is_translator":false, | |
| "is_translation_enabled":false, | |
| "profile_background_color":"9AE4E8", | |
| "profile_background_image_url":"http://abs.twimg.com/images/themes/theme1/bg.png", | |
| "profile_background_image_url_https":"https://abs.twimg.com/images/themes/theme1/bg.png", | |
| "profile_background_tile":false, | |
| "profile_image_url":"http://pbs.twimg.com/profile_images/436586539229777920/4NQoTOEN_normal.png", | |
| "profile_image_url_https":"https://pbs.twimg.com/profile_images/436586539229777920/4NQoTOEN_normal.png", | |
| "profile_link_color":"0000FF", | |
| "profile_sidebar_border_color":"87BC44", | |
| "profile_sidebar_fill_color":"E0FF92", | |
| "profile_text_color":"000000", | |
| "profile_use_background_image":true, | |
| "default_profile":false, | |
| "default_profile_image":false, | |
| "following":true, | |
| "follow_request_sent":false, | |
| "notifications":true | |
| }, | |
| "geo":null, | |
| "coordinates":null, | |
| "place":null, | |
| "contributors":null, | |
| "retweet_count":0, | |
| "favorite_count":2, | |
| "entities":{ | |
| "hashtags":[], | |
| "symbols":[], | |
| "user_mentions":[ | |
| { | |
| "screen_name":"united", | |
| "name":"United", | |
| "id":260907612, | |
| "id_str":"260907612", | |
| "indices":[ | |
| 2, | |
| 9 | |
| ] | |
| }, | |
| { | |
| "screen_name":"tenderlove", | |
| "name":"Aaron Patterson", | |
| "id":14761655, | |
| "id_str":"14761655", | |
| "indices":[ | |
| 10, | |
| 21 | |
| ] | |
| }, | |
| { | |
| "screen_name":"searls", | |
| "name":"Justin Searls", | |
| "id":9038902, | |
| "id_str":"9038902", | |
| "indices":[ | |
| 22, | |
| 29 | |
| ] | |
| } | |
| ], | |
| "urls":[] | |
| }, | |
| "favorited":false, | |
| "retweeted":false, | |
| "lang":"en" | |
| }, | |
| { | |
| "created_at":"Fri Mar 06 02:04:37 +0000 2015", | |
| "id":573665457217093600, | |
| "id_str":"573665457217093633", | |
| "text":"RT @united: @searls A direct flight means that there is a stop & a possible change of gates/planes. A non-stop flight means that there is n…", | |
| "source":"<a href=\"http://twitter.com\" rel=\"nofollow\">Twitter Web Client</a>", | |
| "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":52593, | |
| "id_str":"52593", | |
| "name":"Avdi Grimm", | |
| "screen_name":"avdi", | |
| "location":"York, PA", | |
| "profile_location":null, | |
| "description":"80% angel, 10% daemon, the rest is hard to explain.", | |
| "url":"http://t.co/vCUY54FsV1", | |
| "entities":{ | |
| "url":{ | |
| "urls":[ | |
| { | |
| "url":"http://t.co/vCUY54FsV1", | |
| "expanded_url":"http://avdi.org", | |
| "display_url":"avdi.org", | |
| "indices":[ | |
| 0, | |
| 22 | |
| ] | |
| } | |
| ] | |
| }, | |
| "description":{ | |
| "urls":[] | |
| } | |
| }, | |
| "protected":false, | |
| "followers_count":13766, | |
| "friends_count":43, | |
| "listed_count":798, | |
| "created_at":"Sat Dec 09 01:37:40 +0000 2006", | |
| "favourites_count":1473, | |
| "utc_offset":-18000, | |
| "time_zone":"Eastern Time (US & Canada)", | |
| "geo_enabled":true, | |
| "verified":false, | |
| "statuses_count":44181, | |
| "lang":"en", | |
| "contributors_enabled":false, | |
| "is_translator":false, | |
| "is_translation_enabled":false, | |
| "profile_background_color":"9AE4E8", | |
| "profile_background_image_url":"http://abs.twimg.com/images/themes/theme1/bg.png", | |
| "profile_background_image_url_https":"https://abs.twimg.com/images/themes/theme1/bg.png", | |
| "profile_background_tile":false, | |
| "profile_image_url":"http://pbs.twimg.com/profile_images/436586539229777920/4NQoTOEN_normal.png", | |
| "profile_image_url_https":"https://pbs.twimg.com/profile_images/436586539229777920/4NQoTOEN_normal.png", | |
| "profile_link_color":"0000FF", | |
| "profile_sidebar_border_color":"87BC44", | |
| "profile_sidebar_fill_color":"E0FF92", | |
| "profile_text_color":"000000", | |
| "profile_use_background_image":true, | |
| "default_profile":false, | |
| "default_profile_image":false, | |
| "following":true, | |
| "follow_request_sent":false, | |
| "notifications":true | |
| }, | |
| "geo":null, | |
| "coordinates":null, | |
| "place":null, | |
| "contributors":null, | |
| "retweeted_status":{ | |
| "created_at":"Thu Mar 05 23:25:53 +0000 2015", | |
| "id":573625507843043300, | |
| "id_str":"573625507843043328", | |
| "text":"@searls A direct flight means that there is a stop & a possible change of gates/planes. A non-stop flight means that there is no stop. ^GJ", | |
| "source":"<a href=\"http://www.radian6.com\" rel=\"nofollow\">Radian6 -Social Media Management</a>", | |
| "truncated":false, | |
| "in_reply_to_status_id":573614339132796900, | |
| "in_reply_to_status_id_str":"573614339132796928", | |
| "in_reply_to_user_id":9038902, | |
| "in_reply_to_user_id_str":"9038902", | |
| "in_reply_to_screen_name":"searls", | |
| "user":{ | |
| "id":260907612, | |
| "id_str":"260907612", | |
| "name":"United", | |
| "screen_name":"united", | |
| "location":"", | |
| "profile_location":null, | |
| "description":"Welcome to our official Twitter page, where our conversations with you are 140 characters-friendly. We like hearing from you. Tweet us anytime.", | |
| "url":"http://t.co/C3OPYCDhGt", | |
| "entities":{ | |
| "url":{ | |
| "urls":[ | |
| { | |
| "url":"http://t.co/C3OPYCDhGt", | |
| "expanded_url":"http://unitedhub.com", | |
| "display_url":"unitedhub.com", | |
| "indices":[ | |
| 0, | |
| 22 | |
| ] | |
| } | |
| ] | |
| }, | |
| "description":{ | |
| "urls":[] | |
| } | |
| }, | |
| "protected":false, | |
| "followers_count":625269, | |
| "friends_count":35063, | |
| "listed_count":4492, | |
| "created_at":"Fri Mar 04 21:23:11 +0000 2011", | |
| "favourites_count":510, | |
| "utc_offset":-21600, | |
| "time_zone":"Central Time (US & Canada)", | |
| "geo_enabled":false, | |
| "verified":true, | |
| "statuses_count":401588, | |
| "lang":"en", | |
| "contributors_enabled":false, | |
| "is_translator":false, | |
| "is_translation_enabled":false, | |
| "profile_background_color":"000000", | |
| "profile_background_image_url":"http://pbs.twimg.com/profile_background_images/454004296250454016/RQtA5shm.png", | |
| "profile_background_image_url_https":"https://pbs.twimg.com/profile_background_images/454004296250454016/RQtA5shm.png", | |
| "profile_background_tile":false, | |
| "profile_image_url":"http://pbs.twimg.com/profile_images/2449279853/Twitter-profile-mobile_0005_6_normal.jpg", | |
| "profile_image_url_https":"https://pbs.twimg.com/profile_images/2449279853/Twitter-profile-mobile_0005_6_normal.jpg", | |
| "profile_banner_url":"https://pbs.twimg.com/profile_banners/260907612/1411648983", | |
| "profile_link_color":"0084B4", | |
| "profile_sidebar_border_color":"FFFFFF", | |
| "profile_sidebar_fill_color":"DDEEF6", | |
| "profile_text_color":"333333", | |
| "profile_use_background_image":true, | |
| "default_profile":false, | |
| "default_profile_image":false, | |
| "following":false, | |
| "follow_request_sent":false, | |
| "notifications":false | |
| }, | |
| "geo":null, | |
| "coordinates":null, | |
| "place":null, | |
| "contributors":null, | |
| "retweet_count":96, | |
| "favorite_count":23, | |
| "entities":{ | |
| "hashtags":[], | |
| "symbols":[], | |
| "user_mentions":[ | |
| { | |
| "screen_name":"searls", | |
| "name":"Justin Searls", | |
| "id":9038902, | |
| "id_str":"9038902", | |
| "indices":[ | |
| 0, | |
| 7 | |
| ] | |
| } | |
| ], | |
| "urls":[] | |
| }, | |
| "favorited":false, | |
| "retweeted":false, | |
| "lang":"en" | |
| }, | |
| "retweet_count":96, | |
| "favorite_count":0, | |
| "entities":{ | |
| "hashtags":[], | |
| "symbols":[], | |
| "user_mentions":[ | |
| { | |
| "screen_name":"united", | |
| "name":"United", | |
| "id":260907612, | |
| "id_str":"260907612", | |
| "indices":[ | |
| 3, | |
| 10 | |
| ] | |
| }, | |
| { | |
| "screen_name":"searls", | |
| "name":"Justin Searls", | |
| "id":9038902, | |
| "id_str":"9038902", | |
| "indices":[ | |
| 12, | |
| 19 | |
| ] | |
| } | |
| ], | |
| "urls":[] | |
| }, | |
| "favorited":false, | |
| "retweeted":false, | |
| "lang":"en" | |
| }, | |
| { | |
| "created_at":"Fri Mar 06 02:00:17 +0000 2015", | |
| "id":573664365523509250, | |
| "id_str":"573664365523509248", | |
| "text":"RT @billwscott: The more talent density u have the less process you need. The more process u create the less talent you retain.\n\n-- Reed Ha…", | |
| "source":"<a href=\"http://tapbots.com/tweetbot\" rel=\"nofollow\">Tweetbot for iΟS</a>", | |
| "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":697893, | |
| "id_str":"697893", | |
| "name":"Brandon Keepers", | |
| "screen_name":"bkeepers", | |
| "location":"Holland, MI, USA", | |
| "profile_location":null, | |
| "description":"Open Source at GitHub. In a previous life I was probably a hermit. In the life before that, I was most definitely an explorer.", | |
| "url":"http://t.co/55BXm287SP", | |
| "entities":{ | |
| "url":{ | |
| "urls":[ | |
| { | |
| "url":"http://t.co/55BXm287SP", | |
| "expanded_url":"http://opensoul.org", | |
| "display_url":"opensoul.org", | |
| "indices":[ | |
| 0, | |
| 22 | |
| ] | |
| } | |
| ] | |
| }, | |
| "description":{ | |
| "urls":[] | |
| } | |
| }, | |
| "protected":false, | |
| "followers_count":3246, | |
| "friends_count":667, | |
| "listed_count":197, | |
| "created_at":"Thu Jan 25 01:28:46 +0000 2007", | |
| "favourites_count":858, | |
| "utc_offset":-18000, | |
| "time_zone":"Eastern Time (US & Canada)", | |
| "geo_enabled":true, | |
| "verified":false, | |
| "statuses_count":10470, | |
| "lang":"en", | |
| "contributors_enabled":false, | |
| "is_translator":false, | |
| "is_translation_enabled":false, | |
| "profile_background_color":"1A1B1F", | |
| "profile_background_image_url":"http://abs.twimg.com/images/themes/theme9/bg.gif", | |
| "profile_background_image_url_https":"https://abs.twimg.com/images/themes/theme9/bg.gif", | |
| "profile_background_tile":false, | |
| "profile_image_url":"http://pbs.twimg.com/profile_images/552937026094239744/LOMJGQZL_normal.jpeg", | |
| "profile_image_url_https":"https://pbs.twimg.com/profile_images/552937026094239744/LOMJGQZL_normal.jpeg", | |
| "profile_link_color":"2FC2EF", | |
| "profile_sidebar_border_color":"181A1E", | |
| "profile_sidebar_fill_color":"252429", | |
| "profile_text_color":"666666", | |
| "profile_use_background_image":true, | |
| "default_profile":false, | |
| "default_profile_image":false, | |
| "following":true, | |
| "follow_request_sent":false, | |
| "notifications":false | |
| }, | |
| "geo":null, | |
| "coordinates":null, | |
| "place":null, | |
| "contributors":null, | |
| "retweeted_status":{ | |
| "created_at":"Sat Feb 28 20:00:49 +0000 2015", | |
| "id":571761964839505900, | |
| "id_str":"571761964839505920", | |
| "text":"The more talent density u have the less process you need. The more process u create the less talent you retain.\n\n-- Reed Hastings (@netflix)", | |
| "source":"<a href=\"http://twitter.com/download/iphone\" rel=\"nofollow\">Twitter for iPhone</a>", | |
| "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":17383191, | |
| "id_str":"17383191", | |
| "name":"Bill Scott", | |
| "screen_name":"billwscott", | |
| "location":"Morgan Hill, CA", | |
| "profile_location":null, | |
| "description":"VP, Payment Products, PayPal. Eng & UX Thought Leader, Author, Speaker, Lean UX/Lean Eng advocate. Former @netflix & @yahoo. Early Mac Game Developer (GATO)", | |
| "url":"http://t.co/wjoQpahmwe", | |
| "entities":{ | |
| "url":{ | |
| "urls":[ | |
| { | |
| "url":"http://t.co/wjoQpahmwe", | |
| "expanded_url":"http://looksgoodworkswell.com", | |
| "display_url":"looksgoodworkswell.com", | |
| "indices":[ | |
| 0, | |
| 22 | |
| ] | |
| } | |
| ] | |
| }, | |
| "description":{ | |
| "urls":[] | |
| } | |
| }, | |
| "protected":false, | |
| "followers_count":9357, | |
| "friends_count":1060, | |
| "listed_count":792, | |
| "created_at":"Fri Nov 14 07:09:53 +0000 2008", | |
| "favourites_count":4005, | |
| "utc_offset":-28800, | |
| "time_zone":"Pacific Time (US & Canada)", | |
| "geo_enabled":true, | |
| "verified":false, | |
| "statuses_count":6722, | |
| "lang":"en", | |
| "contributors_enabled":false, | |
| "is_translator":false, | |
| "is_translation_enabled":false, | |
| "profile_background_color":"C0DEED", | |
| "profile_background_image_url":"http://abs.twimg.com/images/themes/theme1/bg.png", | |
| "profile_background_image_url_https":"https://abs.twimg.com/images/themes/theme1/bg.png", | |
| "profile_background_tile":false, | |
| "profile_image_url":"http://pbs.twimg.com/profile_images/555602433498701824/vY5RzWYo_normal.jpeg", | |
| "profile_image_url_https":"https://pbs.twimg.com/profile_images/555602433498701824/vY5RzWYo_normal.jpeg", | |
| "profile_banner_url":"https://pbs.twimg.com/profile_banners/17383191/1393734401", | |
| "profile_link_color":"0084B4", | |
| "profile_sidebar_border_color":"C0DEED", | |
| "profile_sidebar_fill_color":"DDEEF6", | |
| "profile_text_color":"333333", | |
| "profile_use_background_image":true, | |
| "default_profile":true, | |
| "default_profile_image":false, | |
| "following":false, | |
| "follow_request_sent":false, | |
| "notifications":false | |
| }, | |
| "geo":null, | |
| "coordinates":null, | |
| "place":null, | |
| "contributors":null, | |
| "retweet_count":1349, | |
| "favorite_count":963, | |
| "entities":{ | |
| "hashtags":[], | |
| "symbols":[], | |
| "user_mentions":[ | |
| { | |
| "screen_name":"netflix", | |
| "name":"Netflix US", | |
| "id":16573941, | |
| "id_str":"16573941", | |
| "indices":[ | |
| 131, | |
| 139 | |
| ] | |
| } | |
| ], | |
| "urls":[] | |
| }, | |
| "favorited":false, | |
| "retweeted":false, | |
| "lang":"en" | |
| }, | |
| "retweet_count":1349, | |
| "favorite_count":0, | |
| "entities":{ | |
| "hashtags":[], | |
| "symbols":[], | |
| "user_mentions":[ | |
| { | |
| "screen_name":"billwscott", | |
| "name":"Bill Scott", | |
| "id":17383191, | |
| "id_str":"17383191", | |
| "indices":[ | |
| 3, | |
| 14 | |
| ] | |
| }, | |
| { | |
| "screen_name":"netflix", | |
| "name":"Netflix US", | |
| "id":16573941, | |
| "id_str":"16573941", | |
| "indices":[ | |
| 139, | |
| 140 | |
| ] | |
| } | |
| ], | |
| "urls":[] | |
| }, | |
| "favorited":false, | |
| "retweeted":false, | |
| "lang":"en" | |
| }, | |
| { | |
| "created_at":"Fri Mar 06 01:15:31 +0000 2015", | |
| "id":573653097265893400, | |
| "id_str":"573653097265893377", | |
| "text":"A Firefox Experience for iOS https://t.co/YDF708fTfs via @tanay1337", | |
| "source":"<a href=\"http://www.hootsuite.com\" rel=\"nofollow\">Hootsuite</a>", | |
| "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":14490962, | |
| "id_str":"14490962", | |
| "name":"Tuts+ Code", | |
| "screen_name":"TutsPlusCode", | |
| "location":"", | |
| "profile_location":null, | |
| "description":"Tutorials, articles, tips, and community for web developers. Incorporating @nettuts, @mobiletuts, @wptuts and @activetuts.", | |
| "url":"http://t.co/wTPX3qkZJq", | |
| "entities":{ | |
| "url":{ | |
| "urls":[ | |
| { | |
| "url":"http://t.co/wTPX3qkZJq", | |
| "expanded_url":"http://code.tutsplus.com", | |
| "display_url":"code.tutsplus.com", | |
| "indices":[ | |
| 0, | |
| 22 | |
| ] | |
| } | |
| ] | |
| }, | |
| "description":{ | |
| "urls":[] | |
| } | |
| }, | |
| "protected":false, | |
| "followers_count":144426, | |
| "friends_count":292, | |
| "listed_count":7318, | |
| "created_at":"Wed Apr 23 10:18:17 +0000 2008", | |
| "favourites_count":128, | |
| "utc_offset":-18000, | |
| "time_zone":"Quito", | |
| "geo_enabled":false, | |
| "verified":false, | |
| "statuses_count":13761, | |
| "lang":"en", | |
| "contributors_enabled":false, | |
| "is_translator":false, | |
| "is_translation_enabled":false, | |
| "profile_background_color":"2A3745", | |
| "profile_background_image_url":"http://pbs.twimg.com/profile_background_images/709535255/cda9eb737de0613a506bddfd7a73d315.png", | |
| "profile_background_image_url_https":"https://pbs.twimg.com/profile_background_images/709535255/cda9eb737de0613a506bddfd7a73d315.png", | |
| "profile_background_tile":false, | |
| "profile_image_url":"http://pbs.twimg.com/profile_images/440360139866910721/CSiOk6MT_normal.png", | |
| "profile_image_url_https":"https://pbs.twimg.com/profile_images/440360139866910721/CSiOk6MT_normal.png", | |
| "profile_banner_url":"https://pbs.twimg.com/profile_banners/14490962/1404878993", | |
| "profile_link_color":"488276", | |
| "profile_sidebar_border_color":"000000", | |
| "profile_sidebar_fill_color":"D5D3CD", | |
| "profile_text_color":"333333", | |
| "profile_use_background_image":false, | |
| "default_profile":false, | |
| "default_profile_image":false, | |
| "following":true, | |
| "follow_request_sent":false, | |
| "notifications":false | |
| }, | |
| "geo":null, | |
| "coordinates":null, | |
| "place":null, | |
| "contributors":null, | |
| "retweet_count":2, | |
| "favorite_count":7, | |
| "entities":{ | |
| "hashtags":[], | |
| "symbols":[], | |
| "user_mentions":[ | |
| { | |
| "screen_name":"tanay1337", | |
| "name":"Tanay Pant", | |
| "id":2254315993, | |
| "id_str":"2254315993", | |
| "indices":[ | |
| 57, | |
| 67 | |
| ] | |
| } | |
| ], | |
| "urls":[ | |
| { | |
| "url":"https://t.co/YDF708fTfs", | |
| "expanded_url":"https://code.tutsplus.com/articles/a-firefox-experience-for-ios--cms-23247", | |
| "display_url":"code.tutsplus.com/articles/a-fir…", | |
| "indices":[ | |
| 29, | |
| 52 | |
| ] | |
| } | |
| ] | |
| }, | |
| "favorited":false, | |
| "retweeted":false, | |
| "possibly_sensitive":false, | |
| "possibly_sensitive_appealable":false, | |
| "lang":"en" | |
| }, | |
| { | |
| "created_at":"Fri Mar 06 01:11:52 +0000 2015", | |
| "id":573652180172939260, | |
| "id_str":"573652180172939264", | |
| "text":"AMS new feature proposal \"Adding fetch_multi to Cache Strategy\" would like to hear some thoughts. https://t.co/GofyCAsAix :)", | |
| "source":"<a href=\"http://itunes.apple.com/us/app/twitter/id409789998?mt=12\" rel=\"nofollow\">Twitter for Mac</a>", | |
| "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":42511667, | |
| "id_str":"42511667", | |
| "name":"João Moura", | |
| "screen_name":"joaomdmoura", | |
| "location":"Brazil", | |
| "profile_location":null, | |
| "description":"CEO & Founder at @ giocohq, a gamification platform. I'm an FullStack Developer and a Passionate Speaker, that also loves Open Source.", | |
| "url":"http://t.co/kMDMH9bY0Z", | |
| "entities":{ | |
| "url":{ | |
| "urls":[ | |
| { | |
| "url":"http://t.co/kMDMH9bY0Z", | |
| "expanded_url":"http://goo.gl/SA3tiI", | |
| "display_url":"goo.gl/SA3tiI", | |
| "indices":[ | |
| 0, | |
| 22 | |
| ] | |
| } | |
| ] | |
| }, | |
| "description":{ | |
| "urls":[] | |
| } | |
| }, | |
| "protected":false, | |
| "followers_count":571, | |
| "friends_count":473, | |
| "listed_count":38, | |
| "created_at":"Mon May 25 23:21:48 +0000 2009", | |
| "favourites_count":684, | |
| "utc_offset":-7200, | |
| "time_zone":"Mid-Atlantic", | |
| "geo_enabled":true, | |
| "verified":false, | |
| "statuses_count":3282, | |
| "lang":"en", | |
| "contributors_enabled":false, | |
| "is_translator":false, | |
| "is_translation_enabled":false, | |
| "profile_background_color":"FFFFFF", | |
| "profile_background_image_url":"http://pbs.twimg.com/profile_background_images/82438834/lo_jm3.jpg", | |
| "profile_background_image_url_https":"https://pbs.twimg.com/profile_background_images/82438834/lo_jm3.jpg", | |
| "profile_background_tile":false, | |
| "profile_image_url":"http://pbs.twimg.com/profile_images/520837701235261442/gAMwuIu-_normal.jpeg", | |
| "profile_image_url_https":"https://pbs.twimg.com/profile_images/520837701235261442/gAMwuIu-_normal.jpeg", | |
| "profile_banner_url":"https://pbs.twimg.com/profile_banners/42511667/1358599052", | |
| "profile_link_color":"5BAAC7", | |
| "profile_sidebar_border_color":"CEE5F0", | |
| "profile_sidebar_fill_color":"F7F7F7", | |
| "profile_text_color":"333333", | |
| "profile_use_background_image":false, | |
| "default_profile":false, | |
| "default_profile_image":false, | |
| "following":true, | |
| "follow_request_sent":false, | |
| "notifications":false | |
| }, | |
| "geo":null, | |
| "coordinates":null, | |
| "place":null, | |
| "contributors":null, | |
| "retweet_count":2, | |
| "favorite_count":3, | |
| "entities":{ | |
| "hashtags":[], | |
| "symbols":[], | |
| "user_mentions":[], | |
| "urls":[ | |
| { | |
| "url":"https://t.co/GofyCAsAix", | |
| "expanded_url":"https://github.com/rails-api/active_model_serializers/issues/827", | |
| "display_url":"github.com/rails-api/acti…", | |
| "indices":[ | |
| 98, | |
| 121 | |
| ] | |
| } | |
| ] | |
| }, | |
| "favorited":false, | |
| "retweeted":false, | |
| "possibly_sensitive":false, | |
| "possibly_sensitive_appealable":false, | |
| "lang":"en" | |
| }, | |
| { | |
| "created_at":"Fri Mar 06 01:11:08 +0000 2015", | |
| "id":573651994998542340, | |
| "id_str":"573651994998542337", | |
| "text":"Wabi Sabi, the cure to OCD.", | |
| "source":"<a href=\"http://tapbots.com/software/tweetbot/mac\" rel=\"nofollow\">Tweetbot for Mac</a>", | |
| "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":6896972, | |
| "id_str":"6896972", | |
| "name":"◖(•_•)◗", | |
| "screen_name":"simurai", | |
| "location":"Sapporo, Japan", | |
| "profile_location":null, | |
| "description":"Kanonenfutter Designer", | |
| "url":"http://t.co/ZKdG5qt57y", | |
| "entities":{ | |
| "url":{ | |
| "urls":[ | |
| { | |
| "url":"http://t.co/ZKdG5qt57y", | |
| "expanded_url":"http://simurai.com", | |
| "display_url":"simurai.com", | |
| "indices":[ | |
| 0, | |
| 22 | |
| ] | |
| } | |
| ] | |
| }, | |
| "description":{ | |
| "urls":[] | |
| } | |
| }, | |
| "protected":false, | |
| "followers_count":11906, | |
| "friends_count":144, | |
| "listed_count":859, | |
| "created_at":"Mon Jun 18 18:22:20 +0000 2007", | |
| "favourites_count":323, | |
| "utc_offset":32400, | |
| "time_zone":"Sapporo", | |
| "geo_enabled":true, | |
| "verified":false, | |
| "statuses_count":11388, | |
| "lang":"en", | |
| "contributors_enabled":false, | |
| "is_translator":false, | |
| "is_translation_enabled":false, | |
| "profile_background_color":"FAF8ED", | |
| "profile_background_image_url":"http://pbs.twimg.com/profile_background_images/383373883/project_papper.png", | |
| "profile_background_image_url_https":"https://pbs.twimg.com/profile_background_images/383373883/project_papper.png", | |
| "profile_background_tile":false, | |
| "profile_image_url":"http://pbs.twimg.com/profile_images/497627360162623489/T2LXKQuJ_normal.jpeg", | |
| "profile_image_url_https":"https://pbs.twimg.com/profile_images/497627360162623489/T2LXKQuJ_normal.jpeg", | |
| "profile_banner_url":"https://pbs.twimg.com/profile_banners/6896972/1348061248", | |
| "profile_link_color":"FB7C61", | |
| "profile_sidebar_border_color":"FFFFFF", | |
| "profile_sidebar_fill_color":"F0FDFF", | |
| "profile_text_color":"333333", | |
| "profile_use_background_image":false, | |
| "default_profile":false, | |
| "default_profile_image":false, | |
| "following":true, | |
| "follow_request_sent":false, | |
| "notifications":false | |
| }, | |
| "geo":null, | |
| "coordinates":null, | |
| "place":null, | |
| "contributors":null, | |
| "retweet_count":0, | |
| "favorite_count":5, | |
| "entities":{ | |
| "hashtags":[], | |
| "symbols":[], | |
| "user_mentions":[], | |
| "urls":[] | |
| }, | |
| "favorited":false, | |
| "retweeted":false, | |
| "lang":"tl" | |
| }, | |
| { | |
| "created_at":"Fri Mar 06 01:03:13 +0000 2015", | |
| "id":573650002515525600, | |
| "id_str":"573650002515525633", | |
| "text":"DEVWEEKVIX!!! Foi incrivel. Obg a todos :)\n#devweekvix #developerweek https://t.co/kof7WsU3mO", | |
| "source":"<a href=\"http://instagram.com\" rel=\"nofollow\">Instagram</a>", | |
| "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":17681607, | |
| "id_str":"17681607", | |
| "name":"bernarddeluna", | |
| "screen_name":"bernarddeluna", | |
| "location":"Rio de Janeiro, Brazil", | |
| "profile_location":null, | |
| "description":"I'm Product Manager at iMasters ✦ Founder of 3Days ✦ http://t.co/tf3VIS3dyn co-Founder ✦ Startups Mentor ✦ Sexy web projects Specialist ✦ Speaker and Dancer", | |
| "url":"http://t.co/VHw5XFP9JA", | |
| "entities":{ | |
| "url":{ | |
| "urls":[ | |
| { | |
| "url":"http://t.co/VHw5XFP9JA", | |
| "expanded_url":"http://bernarddeluna.com", | |
| "display_url":"bernarddeluna.com", | |
| "indices":[ | |
| 0, | |
| 22 | |
| ] | |
| } | |
| ] | |
| }, | |
| "description":{ | |
| "urls":[ | |
| { | |
| "url":"http://t.co/tf3VIS3dyn", | |
| "expanded_url":"http://Freteiros.com", | |
| "display_url":"Freteiros.com", | |
| "indices":[ | |
| 53, | |
| 75 | |
| ] | |
| } | |
| ] | |
| } | |
| }, | |
| "protected":false, | |
| "followers_count":3996, | |
| "friends_count":209, | |
| "listed_count":170, | |
| "created_at":"Thu Nov 27 16:10:23 +0000 2008", | |
| "favourites_count":621, | |
| "utc_offset":-10800, | |
| "time_zone":"Santiago", | |
| "geo_enabled":true, | |
| "verified":false, | |
| "statuses_count":9621, | |
| "lang":"en", | |
| "contributors_enabled":false, | |
| "is_translator":false, | |
| "is_translation_enabled":false, | |
| "profile_background_color":"F5F5F5", | |
| "profile_background_image_url":"http://pbs.twimg.com/profile_background_images/653436003/fex1gq0kbxvux5jpzmku.jpeg", | |
| "profile_background_image_url_https":"https://pbs.twimg.com/profile_background_images/653436003/fex1gq0kbxvux5jpzmku.jpeg", | |
| "profile_background_tile":true, | |
| "profile_image_url":"http://pbs.twimg.com/profile_images/3116572592/fb0023861300f52bc9c65d35761c2dfc_normal.jpeg", | |
| "profile_image_url_https":"https://pbs.twimg.com/profile_images/3116572592/fb0023861300f52bc9c65d35761c2dfc_normal.jpeg", | |
| "profile_banner_url":"https://pbs.twimg.com/profile_banners/17681607/1396539642", | |
| "profile_link_color":"E74C3C", | |
| "profile_sidebar_border_color":"000000", | |
| "profile_sidebar_fill_color":"FFFFFF", | |
| "profile_text_color":"3D3D3D", | |
| "profile_use_background_image":false, | |
| "default_profile":false, | |
| "default_profile_image":false, | |
| "following":true, | |
| "follow_request_sent":false, | |
| "notifications":true | |
| }, | |
| "geo":null, | |
| "coordinates":null, | |
| "place":null, | |
| "contributors":null, | |
| "retweet_count":2, | |
| "favorite_count":5, | |
| "entities":{ | |
| "hashtags":[ | |
| { | |
| "text":"devweekvix", | |
| "indices":[ | |
| 43, | |
| 54 | |
| ] | |
| }, | |
| { | |
| "text":"developerweek", | |
| "indices":[ | |
| 55, | |
| 69 | |
| ] | |
| } | |
| ], | |
| "symbols":[], | |
| "user_mentions":[], | |
| "urls":[ | |
| { | |
| "url":"https://t.co/kof7WsU3mO", | |
| "expanded_url":"https://instagram.com/p/z3frwKzeiT/", | |
| "display_url":"instagram.com/p/z3frwKzeiT/", | |
| "indices":[ | |
| 70, | |
| 93 | |
| ] | |
| } | |
| ] | |
| }, | |
| "favorited":false, | |
| "retweeted":false, | |
| "possibly_sensitive":false, | |
| "possibly_sensitive_appealable":false, | |
| "lang":"pt" | |
| }, | |
| { | |
| "created_at":"Fri Mar 06 00:30:10 +0000 2015", | |
| "id":573641686640762900, | |
| "id_str":"573641686640762880", | |
| "text":"Apple Watch vs. Android Wear, in screenshots\nhttp://t.co/g6Rp0F8uKr\n\nht/ @malpern http://t.co/tV4vrJscbV", | |
| "source":"<a href=\"http://itunes.apple.com/us/app/twitter/id409789998?mt=12\" rel=\"nofollow\">Twitter for Mac</a>", | |
| "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":13889622, | |
| "id_str":"13889622", | |
| "name":"Luke Wroblewski", | |
| "screen_name":"lukew", | |
| "location":"Silicon Valley", | |
| "profile_location":null, | |
| "description":"Humanizing technology. Founded: Polar (Google acquired) Bagcheck (Twitter acquired) Wrote: Mobile First, Web Form Design, Site Seeing. Worked: Yahoo, eBay, NCSA", | |
| "url":"http://t.co/xvfIIovxoh", | |
| "entities":{ | |
| "url":{ | |
| "urls":[ | |
| { | |
| "url":"http://t.co/xvfIIovxoh", | |
| "expanded_url":"http://www.lukew.com", | |
| "display_url":"lukew.com", | |
| "indices":[ | |
| 0, | |
| 22 | |
| ] | |
| } | |
| ] | |
| }, | |
| "description":{ | |
| "urls":[] | |
| } | |
| }, | |
| "protected":false, | |
| "followers_count":115800, | |
| "friends_count":93, | |
| "listed_count":7393, | |
| "created_at":"Sun Feb 24 04:01:42 +0000 2008", | |
| "favourites_count":2929, | |
| "utc_offset":-28800, | |
| "time_zone":"Pacific Time (US & Canada)", | |
| "geo_enabled":true, | |
| "verified":false, | |
| "statuses_count":14953, | |
| "lang":"en", | |
| "contributors_enabled":false, | |
| "is_translator":false, | |
| "is_translation_enabled":false, | |
| "profile_background_color":"FFFFFF", | |
| "profile_background_image_url":"http://pbs.twimg.com/profile_background_images/333653482/Screen_shot_2011-09-20_at_10.32.22_AM.png", | |
| "profile_background_image_url_https":"https://pbs.twimg.com/profile_background_images/333653482/Screen_shot_2011-09-20_at_10.32.22_AM.png", | |
| "profile_background_tile":false, | |
| "profile_image_url":"http://pbs.twimg.com/profile_images/477610446917103616/_cjU3_ga_normal.png", | |
| "profile_image_url_https":"https://pbs.twimg.com/profile_images/477610446917103616/_cjU3_ga_normal.png", | |
| "profile_banner_url":"https://pbs.twimg.com/profile_banners/13889622/1404191333", | |
| "profile_link_color":"449400", | |
| "profile_sidebar_border_color":"88D822", | |
| "profile_sidebar_fill_color":"E3F8AF", | |
| "profile_text_color":"484242", | |
| "profile_use_background_image":true, | |
| "default_profile":false, | |
| "default_profile_image":false, | |
| "following":true, | |
| "follow_request_sent":false, | |
| "notifications":false | |
| }, | |
| "geo":null, | |
| "coordinates":null, | |
| "place":null, | |
| "contributors":null, | |
| "retweet_count":33, | |
| "favorite_count":43, | |
| "entities":{ | |
| "hashtags":[], | |
| "symbols":[], | |
| "user_mentions":[ | |
| { | |
| "screen_name":"malpern", | |
| "name":"Micah Alpern", | |
| "id":1483, | |
| "id_str":"1483", | |
| "indices":[ | |
| 73, | |
| 81 | |
| ] | |
| } | |
| ], | |
| "urls":[ | |
| { | |
| "url":"http://t.co/g6Rp0F8uKr", | |
| "expanded_url":"http://arstechnica.com/apple/2014/09/smartwatch-wars-the-apple-watch-versus-android-wear-in-screenshots/", | |
| "display_url":"arstechnica.com/apple/2014/09/…", | |
| "indices":[ | |
| 45, | |
| 67 | |
| ] | |
| } | |
| ], | |
| "media":[ | |
| { | |
| "id":573641684468138000, | |
| "id_str":"573641684468137984", | |
| "indices":[ | |
| 82, | |
| 104 | |
| ], | |
| "media_url":"http://pbs.twimg.com/media/B_X8Ep8UgAAYBXc.png", | |
| "media_url_https":"https://pbs.twimg.com/media/B_X8Ep8UgAAYBXc.png", | |
| "url":"http://t.co/tV4vrJscbV", | |
| "display_url":"pic.twitter.com/tV4vrJscbV", | |
| "expanded_url":"http://twitter.com/lukew/status/573641686640762880/photo/1", | |
| "type":"photo", | |
| "sizes":{ | |
| "large":{ | |
| "w":1024, | |
| "h":530, | |
| "resize":"fit" | |
| }, | |
| "thumb":{ | |
| "w":150, | |
| "h":150, | |
| "resize":"crop" | |
| }, | |
| "small":{ | |
| "w":340, | |
| "h":175, | |
| "resize":"fit" | |
| }, | |
| "medium":{ | |
| "w":600, | |
| "h":310, | |
| "resize":"fit" | |
| } | |
| } | |
| } | |
| ] | |
| }, | |
| "extended_entities":{ | |
| "media":[ | |
| { | |
| "id":573641684468138000, | |
| "id_str":"573641684468137984", | |
| "indices":[ | |
| 82, | |
| 104 | |
| ], | |
| "media_url":"http://pbs.twimg.com/media/B_X8Ep8UgAAYBXc.png", | |
| "media_url_https":"https://pbs.twimg.com/media/B_X8Ep8UgAAYBXc.png", | |
| "url":"http://t.co/tV4vrJscbV", | |
| "display_url":"pic.twitter.com/tV4vrJscbV", | |
| "expanded_url":"http://twitter.com/lukew/status/573641686640762880/photo/1", | |
| "type":"photo", | |
| "sizes":{ | |
| "large":{ | |
| "w":1024, | |
| "h":530, | |
| "resize":"fit" | |
| }, | |
| "thumb":{ | |
| "w":150, | |
| "h":150, | |
| "resize":"crop" | |
| }, | |
| "small":{ | |
| "w":340, | |
| "h":175, | |
| "resize":"fit" | |
| }, | |
| "medium":{ | |
| "w":600, | |
| "h":310, | |
| "resize":"fit" | |
| } | |
| } | |
| } | |
| ] | |
| }, | |
| "favorited":false, | |
| "retweeted":false, | |
| "possibly_sensitive":false, | |
| "possibly_sensitive_appealable":false, | |
| "lang":"en" | |
| }, | |
| { | |
| "created_at":"Fri Mar 06 00:27:12 +0000 2015", | |
| "id":573640941497679900, | |
| "id_str":"573640941497679872", | |
| "text":"O @lfcipriani do twitter falando sobre o Fabric.\n#devweekvix #developerweek \n@imasters https://t.co/uDwxjXaZRt", | |
| "source":"<a href=\"http://instagram.com\" rel=\"nofollow\">Instagram</a>", | |
| "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":17681607, | |
| "id_str":"17681607", | |
| "name":"bernarddeluna", | |
| "screen_name":"bernarddeluna", | |
| "location":"Rio de Janeiro, Brazil", | |
| "profile_location":null, | |
| "description":"I'm Product Manager at iMasters ✦ Founder of 3Days ✦ http://t.co/tf3VIS3dyn co-Founder ✦ Startups Mentor ✦ Sexy web projects Specialist ✦ Speaker and Dancer", | |
| "url":"http://t.co/VHw5XFP9JA", | |
| "entities":{ | |
| "url":{ | |
| "urls":[ | |
| { | |
| "url":"http://t.co/VHw5XFP9JA", | |
| "expanded_url":"http://bernarddeluna.com", | |
| "display_url":"bernarddeluna.com", | |
| "indices":[ | |
| 0, | |
| 22 | |
| ] | |
| } | |
| ] | |
| }, | |
| "description":{ | |
| "urls":[ | |
| { | |
| "url":"http://t.co/tf3VIS3dyn", | |
| "expanded_url":"http://Freteiros.com", | |
| "display_url":"Freteiros.com", | |
| "indices":[ | |
| 53, | |
| 75 | |
| ] | |
| } | |
| ] | |
| } | |
| }, | |
| "protected":false, | |
| "followers_count":3996, | |
| "friends_count":209, | |
| "listed_count":170, | |
| "created_at":"Thu Nov 27 16:10:23 +0000 2008", | |
| "favourites_count":621, | |
| "utc_offset":-10800, | |
| "time_zone":"Santiago", | |
| "geo_enabled":true, | |
| "verified":false, | |
| "statuses_count":9621, | |
| "lang":"en", | |
| "contributors_enabled":false, | |
| "is_translator":false, | |
| "is_translation_enabled":false, | |
| "profile_background_color":"F5F5F5", | |
| "profile_background_image_url":"http://pbs.twimg.com/profile_background_images/653436003/fex1gq0kbxvux5jpzmku.jpeg", | |
| "profile_background_image_url_https":"https://pbs.twimg.com/profile_background_images/653436003/fex1gq0kbxvux5jpzmku.jpeg", | |
| "profile_background_tile":true, | |
| "profile_image_url":"http://pbs.twimg.com/profile_images/3116572592/fb0023861300f52bc9c65d35761c2dfc_normal.jpeg", | |
| "profile_image_url_https":"https://pbs.twimg.com/profile_images/3116572592/fb0023861300f52bc9c65d35761c2dfc_normal.jpeg", | |
| "profile_banner_url":"https://pbs.twimg.com/profile_banners/17681607/1396539642", | |
| "profile_link_color":"E74C3C", | |
| "profile_sidebar_border_color":"000000", | |
| "profile_sidebar_fill_color":"FFFFFF", | |
| "profile_text_color":"3D3D3D", | |
| "profile_use_background_image":false, | |
| "default_profile":false, | |
| "default_profile_image":false, | |
| "following":true, | |
| "follow_request_sent":false, | |
| "notifications":true | |
| }, | |
| "geo":null, | |
| "coordinates":null, | |
| "place":null, | |
| "contributors":null, | |
| "retweet_count":1, | |
| "favorite_count":2, | |
| "entities":{ | |
| "hashtags":[ | |
| { | |
| "text":"devweekvix", | |
| "indices":[ | |
| 49, | |
| 60 | |
| ] | |
| }, | |
| { | |
| "text":"developerweek", | |
| "indices":[ | |
| 61, | |
| 75 | |
| ] | |
| } | |
| ], | |
| "symbols":[], | |
| "user_mentions":[ | |
| { | |
| "screen_name":"lfcipriani", | |
| "name":"Luis Cipriani", | |
| "id":17347849, | |
| "id_str":"17347849", | |
| "indices":[ | |
| 2, | |
| 13 | |
| ] | |
| }, | |
| { | |
| "screen_name":"iMasters", | |
| "name":"iMasters", | |
| "id":9105972, | |
| "id_str":"9105972", | |
| "indices":[ | |
| 77, | |
| 86 | |
| ] | |
| } | |
| ], | |
| "urls":[ | |
| { | |
| "url":"https://t.co/uDwxjXaZRt", | |
| "expanded_url":"https://instagram.com/p/z3bkCfTerX/", | |
| "display_url":"instagram.com/p/z3bkCfTerX/", | |
| "indices":[ | |
| 87, | |
| 110 | |
| ] | |
| } | |
| ] | |
| }, | |
| "favorited":false, | |
| "retweeted":false, | |
| "possibly_sensitive":false, | |
| "possibly_sensitive_appealable":false, | |
| "lang":"pt" | |
| }, | |
| { | |
| "created_at":"Fri Mar 06 00:21:31 +0000 2015", | |
| "id":573639507846651900, | |
| "id_str":"573639507846651906", | |
| "text":"RT @DZoneLinks: Demo of Node.js Process Manager with nginx and Multi-Host Support Plus a GUI - http://t.co/DP8rIADFeG - @DZoneLinks Big Lin…", | |
| "source":"<a href=\"http://sproutsocial.com\" rel=\"nofollow\">Sprout Social</a>", | |
| "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":1002392005, | |
| "id_str":"1002392005", | |
| "name":"StrongLoop", | |
| "screen_name":"StrongLoop", | |
| "location":"San Francisco & Amsterdam", | |
| "profile_location":null, | |
| "description":"Develop, manage and scale REST APIs with Node.js", | |
| "url":"http://t.co/VMoxuFnPwD", | |
| "entities":{ | |
| "url":{ | |
| "urls":[ | |
| { | |
| "url":"http://t.co/VMoxuFnPwD", | |
| "expanded_url":"http://strongloop.com", | |
| "display_url":"strongloop.com", | |
| "indices":[ | |
| 0, | |
| 22 | |
| ] | |
| } | |
| ] | |
| }, | |
| "description":{ | |
| "urls":[] | |
| } | |
| }, | |
| "protected":false, | |
| "followers_count":4081, | |
| "friends_count":245, | |
| "listed_count":197, | |
| "created_at":"Mon Dec 10 20:05:57 +0000 2012", | |
| "favourites_count":13, | |
| "utc_offset":-28800, | |
| "time_zone":"Pacific Time (US & Canada)", | |
| "geo_enabled":false, | |
| "verified":false, | |
| "statuses_count":3306, | |
| "lang":"en", | |
| "contributors_enabled":false, | |
| "is_translator":false, | |
| "is_translation_enabled":false, | |
| "profile_background_color":"C0DEED", | |
| "profile_background_image_url":"http://abs.twimg.com/images/themes/theme1/bg.png", | |
| "profile_background_image_url_https":"https://abs.twimg.com/images/themes/theme1/bg.png", | |
| "profile_background_tile":false, | |
| "profile_image_url":"http://pbs.twimg.com/profile_images/483653379021746176/dzkYsMnH_normal.png", | |
| "profile_image_url_https":"https://pbs.twimg.com/profile_images/483653379021746176/dzkYsMnH_normal.png", | |
| "profile_link_color":"0084B4", | |
| "profile_sidebar_border_color":"C0DEED", | |
| "profile_sidebar_fill_color":"DDEEF6", | |
| "profile_text_color":"333333", | |
| "profile_use_background_image":true, | |
| "default_profile":true, | |
| "default_profile_image":false, | |
| "following":true, | |
| "follow_request_sent":false, | |
| "notifications":false | |
| }, | |
| "geo":null, | |
| "coordinates":null, | |
| "place":null, | |
| "contributors":null, | |
| "retweeted_status":{ | |
| "created_at":"Fri Mar 06 00:06:10 +0000 2015", | |
| "id":573635647233110000, | |
| "id_str":"573635647233110016", | |
| "text":"Demo of Node.js Process Manager with nginx and Multi-Host Support Plus a GUI - http://t.co/DP8rIADFeG - @DZoneLinks Big Link by stronglooper", | |
| "source":"<a href=\"http://www.dzone.com/links\" rel=\"nofollow\">DZone Links</a>", | |
| "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":2375301294, | |
| "id_str":"2375301294", | |
| "name":"DZone Links", | |
| "screen_name":"DZoneLinks", | |
| "location":"Cary, NC USA", | |
| "profile_location":null, | |
| "description":"The best and most popular links from DZone's global community of technology experts and professionals. Get connected with DZone today!", | |
| "url":"http://t.co/4l9DkonFmN", | |
| "entities":{ | |
| "url":{ | |
| "urls":[ | |
| { | |
| "url":"http://t.co/4l9DkonFmN", | |
| "expanded_url":"http://dzone.com", | |
| "display_url":"dzone.com", | |
| "indices":[ | |
| 0, | |
| 22 | |
| ] | |
| } | |
| ] | |
| }, | |
| "description":{ | |
| "urls":[] | |
| } | |
| }, | |
| "protected":false, | |
| "followers_count":1165, | |
| "friends_count":191, | |
| "listed_count":55, | |
| "created_at":"Thu Mar 06 12:36:48 +0000 2014", | |
| "favourites_count":7, | |
| "utc_offset":-18000, | |
| "time_zone":"Eastern Time (US & Canada)", | |
| "geo_enabled":false, | |
| "verified":false, | |
| "statuses_count":9133, | |
| "lang":"en", | |
| "contributors_enabled":false, | |
| "is_translator":false, | |
| "is_translation_enabled":false, | |
| "profile_background_color":"A3A3A3", | |
| "profile_background_image_url":"http://pbs.twimg.com/profile_background_images/441954371434078208/QUcVAi3Y.jpeg", | |
| "profile_background_image_url_https":"https://pbs.twimg.com/profile_background_images/441954371434078208/QUcVAi3Y.jpeg", | |
| "profile_background_tile":false, | |
| "profile_image_url":"http://pbs.twimg.com/profile_images/441695143964319744/40oMPffR_normal.png", | |
| "profile_image_url_https":"https://pbs.twimg.com/profile_images/441695143964319744/40oMPffR_normal.png", | |
| "profile_banner_url":"https://pbs.twimg.com/profile_banners/2375301294/1394143316", | |
| "profile_link_color":"6EAF34", | |
| "profile_sidebar_border_color":"FFFFFF", | |
| "profile_sidebar_fill_color":"DDEEF6", | |
| "profile_text_color":"333333", | |
| "profile_use_background_image":true, | |
| "default_profile":false, | |
| "default_profile_image":false, | |
| "following":false, | |
| "follow_request_sent":false, | |
| "notifications":false | |
| }, | |
| "geo":null, | |
| "coordinates":null, | |
| "place":null, | |
| "contributors":null, | |
| "retweet_count":2, | |
| "favorite_count":1, | |
| "entities":{ | |
| "hashtags":[], | |
| "symbols":[], | |
| "user_mentions":[ | |
| { | |
| "screen_name":"DZoneLinks", | |
| "name":"DZone Links", | |
| "id":2375301294, | |
| "id_str":"2375301294", | |
| "indices":[ | |
| 104, | |
| 115 | |
| ] | |
| } | |
| ], | |
| "urls":[ | |
| { | |
| "url":"http://t.co/DP8rIADFeG", | |
| "expanded_url":"http://dzone.com/POxQ0", | |
| "display_url":"dzone.com/POxQ0", | |
| "indices":[ | |
| 79, | |
| 101 | |
| ] | |
| } | |
| ] | |
| }, | |
| "favorited":false, | |
| "retweeted":false, | |
| "possibly_sensitive":false, | |
| "possibly_sensitive_appealable":false, | |
| "lang":"en" | |
| }, | |
| "retweet_count":2, | |
| "favorite_count":0, | |
| "entities":{ | |
| "hashtags":[], | |
| "symbols":[], | |
| "user_mentions":[ | |
| { | |
| "screen_name":"DZoneLinks", | |
| "name":"DZone Links", | |
| "id":2375301294, | |
| "id_str":"2375301294", | |
| "indices":[ | |
| 3, | |
| 14 | |
| ] | |
| }, | |
| { | |
| "screen_name":"DZoneLinks", | |
| "name":"DZone Links", | |
| "id":2375301294, | |
| "id_str":"2375301294", | |
| "indices":[ | |
| 120, | |
| 131 | |
| ] | |
| } | |
| ], | |
| "urls":[ | |
| { | |
| "url":"http://t.co/DP8rIADFeG", | |
| "expanded_url":"http://dzone.com/POxQ0", | |
| "display_url":"dzone.com/POxQ0", | |
| "indices":[ | |
| 95, | |
| 117 | |
| ] | |
| } | |
| ] | |
| }, | |
| "favorited":false, | |
| "retweeted":false, | |
| "possibly_sensitive":false, | |
| "possibly_sensitive_appealable":false, | |
| "lang":"en" | |
| }, | |
| { | |
| "created_at":"Fri Mar 06 00:15:45 +0000 2015", | |
| "id":573638060111368200, | |
| "id_str":"573638060111368192", | |
| "text":"Our operations engineer @_MattTse discusses expanded beta for private backups in Firebase: https://t.co/ySk4iYdNbl", | |
| "source":"<a href=\"http://twitter.com\" rel=\"nofollow\">Twitter Web Client</a>", | |
| "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":447644824, | |
| "id_str":"447644824", | |
| "name":"Firebase", | |
| "screen_name":"Firebase", | |
| "location":"San Francisco", | |
| "profile_location":null, | |
| "description":"The Realtime App Platform. Build realtime mobile and web apps in minutes. // Status: @FirebaseStatus", | |
| "url":"https://t.co/Rv5rRk5xTJ", | |
| "entities":{ | |
| "url":{ | |
| "urls":[ | |
| { | |
| "url":"https://t.co/Rv5rRk5xTJ", | |
| "expanded_url":"https://Firebase.com", | |
| "display_url":"Firebase.com", | |
| "indices":[ | |
| 0, | |
| 23 | |
| ] | |
| } | |
| ] | |
| }, | |
| "description":{ | |
| "urls":[] | |
| } | |
| }, | |
| "protected":false, | |
| "followers_count":23718, | |
| "friends_count":3, | |
| "listed_count":535, | |
| "created_at":"Tue Dec 27 03:47:52 +0000 2011", | |
| "favourites_count":4720, | |
| "utc_offset":-32400, | |
| "time_zone":"Alaska", | |
| "geo_enabled":true, | |
| "verified":false, | |
| "statuses_count":1246, | |
| "lang":"en", | |
| "contributors_enabled":false, | |
| "is_translator":false, | |
| "is_translation_enabled":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":true, | |
| "profile_image_url":"http://pbs.twimg.com/profile_images/1974595305/firebase_branding_r4_FINAL_03_normal.png", | |
| "profile_image_url_https":"https://pbs.twimg.com/profile_images/1974595305/firebase_branding_r4_FINAL_03_normal.png", | |
| "profile_banner_url":"https://pbs.twimg.com/profile_banners/447644824/1399680183", | |
| "profile_link_color":"0073FF", | |
| "profile_sidebar_border_color":"DFDFDF", | |
| "profile_sidebar_fill_color":"F3F3F3", | |
| "profile_text_color":"333333", | |
| "profile_use_background_image":false, | |
| "default_profile":false, | |
| "default_profile_image":false, | |
| "following":true, | |
| "follow_request_sent":false, | |
| "notifications":false | |
| }, | |
| "geo":null, | |
| "coordinates":null, | |
| "place":null, | |
| "contributors":null, | |
| "retweet_count":0, | |
| "favorite_count":1, | |
| "entities":{ | |
| "hashtags":[], | |
| "symbols":[], | |
| "user_mentions":[ | |
| { | |
| "screen_name":"_MattTse", | |
| "name":"Matthew Tse", | |
| "id":322368276, | |
| "id_str":"322368276", | |
| "indices":[ | |
| 24, | |
| 33 | |
| ] | |
| } | |
| ], | |
| "urls":[ | |
| { | |
| "url":"https://t.co/ySk4iYdNbl", | |
| "expanded_url":"https://www.firebase.com/blog/2015-03-05-private-backups-for-firebase-data.html", | |
| "display_url":"firebase.com/blog/2015-03-0…", | |
| "indices":[ | |
| 91, | |
| 114 | |
| ] | |
| } | |
| ] | |
| }, | |
| "favorited":false, | |
| "retweeted":false, | |
| "possibly_sensitive":false, | |
| "possibly_sensitive_appealable":false, | |
| "lang":"en" | |
| }, | |
| { | |
| "created_at":"Fri Mar 06 00:10:00 +0000 2015", | |
| "id":573636613617492000, | |
| "id_str":"573636613617491968", | |
| "text":"HypnotoadSVN: Plugin for SublimeText3 that enables SVN commands. http://t.co/J1ABGgK5TE", | |
| "source":"<a href=\"http://twitterfeed.com\" rel=\"nofollow\">twitterfeed</a>", | |
| "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":610648816, | |
| "id_str":"610648816", | |
| "name":"Sublime Packages", | |
| "screen_name":"SublimePackages", | |
| "location":"", | |
| "profile_location":null, | |
| "description":"Latest published packages for #SublimeText 2 & 3, news, tutorials, tips & tricks from the users community. Gently curated by @n1k0.", | |
| "url":"http://t.co/6mH5hVQass", | |
| "entities":{ | |
| "url":{ | |
| "urls":[ | |
| { | |
| "url":"http://t.co/6mH5hVQass", | |
| "expanded_url":"http://sublime.wbond.net/", | |
| "display_url":"sublime.wbond.net", | |
| "indices":[ | |
| 0, | |
| 22 | |
| ] | |
| } | |
| ] | |
| }, | |
| "description":{ | |
| "urls":[] | |
| } | |
| }, | |
| "protected":false, | |
| "followers_count":10169, | |
| "friends_count":6, | |
| "listed_count":362, | |
| "created_at":"Sun Jun 17 08:56:56 +0000 2012", | |
| "favourites_count":1, | |
| "utc_offset":null, | |
| "time_zone":null, | |
| "geo_enabled":false, | |
| "verified":false, | |
| "statuses_count":2637, | |
| "lang":"fr", | |
| "contributors_enabled":false, | |
| "is_translator":false, | |
| "is_translation_enabled":false, | |
| "profile_background_color":"C0DEED", | |
| "profile_background_image_url":"http://abs.twimg.com/images/themes/theme1/bg.png", | |
| "profile_background_image_url_https":"https://abs.twimg.com/images/themes/theme1/bg.png", | |
| "profile_background_tile":false, | |
| "profile_image_url":"http://pbs.twimg.com/profile_images/2316722487/sublimepackages_icon_normal.png", | |
| "profile_image_url_https":"https://pbs.twimg.com/profile_images/2316722487/sublimepackages_icon_normal.png", | |
| "profile_link_color":"0084B4", | |
| "profile_sidebar_border_color":"C0DEED", | |
| "profile_sidebar_fill_color":"DDEEF6", | |
| "profile_text_color":"333333", | |
| "profile_use_background_image":true, | |
| "default_profile":true, | |
| "default_profile_image":false, | |
| "following":true, | |
| "follow_request_sent":false, | |
| "notifications":false | |
| }, | |
| "geo":null, | |
| "coordinates":null, | |
| "place":null, | |
| "contributors":null, | |
| "retweet_count":1, | |
| "favorite_count":3, | |
| "entities":{ | |
| "hashtags":[], | |
| "symbols":[], | |
| "user_mentions":[], | |
| "urls":[ | |
| { | |
| "url":"http://t.co/J1ABGgK5TE", | |
| "expanded_url":"http://bit.ly/1CDXsgw", | |
| "display_url":"bit.ly/1CDXsgw", | |
| "indices":[ | |
| 65, | |
| 87 | |
| ] | |
| } | |
| ] | |
| }, | |
| "favorited":false, | |
| "retweeted":false, | |
| "possibly_sensitive":false, | |
| "possibly_sensitive_appealable":false, | |
| "lang":"en" | |
| }, | |
| { | |
| "created_at":"Fri Mar 06 00:10:00 +0000 2015", | |
| "id":573636612724150300, | |
| "id_str":"573636612724150273", | |
| "text":"Terminal In Packages: Sublime text plugin for opening a terminal in the packages directory http://t.co/zPW9J2k7dA", | |
| "source":"<a href=\"http://twitterfeed.com\" rel=\"nofollow\">twitterfeed</a>", | |
| "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":610648816, | |
| "id_str":"610648816", | |
| "name":"Sublime Packages", | |
| "screen_name":"SublimePackages", | |
| "location":"", | |
| "profile_location":null, | |
| "description":"Latest published packages for #SublimeText 2 & 3, news, tutorials, tips & tricks from the users community. Gently curated by @n1k0.", | |
| "url":"http://t.co/6mH5hVQass", | |
| "entities":{ | |
| "url":{ | |
| "urls":[ | |
| { | |
| "url":"http://t.co/6mH5hVQass", | |
| "expanded_url":"http://sublime.wbond.net/", | |
| "display_url":"sublime.wbond.net", | |
| "indices":[ | |
| 0, | |
| 22 | |
| ] | |
| } | |
| ] | |
| }, | |
| "description":{ | |
| "urls":[] | |
| } | |
| }, | |
| "protected":false, | |
| "followers_count":10169, | |
| "friends_count":6, | |
| "listed_count":362, | |
| "created_at":"Sun Jun 17 08:56:56 +0000 2012", | |
| "favourites_count":1, | |
| "utc_offset":null, | |
| "time_zone":null, | |
| "geo_enabled":false, | |
| "verified":false, | |
| "statuses_count":2637, | |
| "lang":"fr", | |
| "contributors_enabled":false, | |
| "is_translator":false, | |
| "is_translation_enabled":false, | |
| "profile_background_color":"C0DEED", | |
| "profile_background_image_url":"http://abs.twimg.com/images/themes/theme1/bg.png", | |
| "profile_background_image_url_https":"https://abs.twimg.com/images/themes/theme1/bg.png", | |
| "profile_background_tile":false, | |
| "profile_image_url":"http://pbs.twimg.com/profile_images/2316722487/sublimepackages_icon_normal.png", | |
| "profile_image_url_https":"https://pbs.twimg.com/profile_images/2316722487/sublimepackages_icon_normal.png", | |
| "profile_link_color":"0084B4", | |
| "profile_sidebar_border_color":"C0DEED", | |
| "profile_sidebar_fill_color":"DDEEF6", | |
| "profile_text_color":"333333", | |
| "profile_use_background_image":true, | |
| "default_profile":true, | |
| "default_profile_image":false, | |
| "following":true, | |
| "follow_request_sent":false, | |
| "notifications":false | |
| }, | |
| "geo":null, | |
| "coordinates":null, | |
| "place":null, | |
| "contributors":null, | |
| "retweet_count":1, | |
| "favorite_count":2, | |
| "entities":{ | |
| "hashtags":[], | |
| "symbols":[], | |
| "user_mentions":[], | |
| "urls":[ | |
| { | |
| "url":"http://t.co/zPW9J2k7dA", | |
| "expanded_url":"http://bit.ly/1CDXpRY", | |
| "display_url":"bit.ly/1CDXpRY", | |
| "indices":[ | |
| 91, | |
| 113 | |
| ] | |
| } | |
| ] | |
| }, | |
| "favorited":false, | |
| "retweeted":false, | |
| "possibly_sensitive":false, | |
| "possibly_sensitive_appealable":false, | |
| "lang":"en" | |
| }, | |
| { | |
| "created_at":"Fri Mar 06 00:00:03 +0000 2015", | |
| "id":573634107659317250, | |
| "id_str":"573634107659317248", | |
| "text":"All it takes is npm install -g strongloop to get started building APIs in #nodejs - Check out how easy it is: http://t.co/tAxGc335jB", | |
| "source":"<a href=\"http://sproutsocial.com\" rel=\"nofollow\">Sprout Social</a>", | |
| "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":1002392005, | |
| "id_str":"1002392005", | |
| "name":"StrongLoop", | |
| "screen_name":"StrongLoop", | |
| "location":"San Francisco & Amsterdam", | |
| "profile_location":null, | |
| "description":"Develop, manage and scale REST APIs with Node.js", | |
| "url":"http://t.co/VMoxuFnPwD", | |
| "entities":{ | |
| "url":{ | |
| "urls":[ | |
| { | |
| "url":"http://t.co/VMoxuFnPwD", | |
| "expanded_url":"http://strongloop.com", | |
| "display_url":"strongloop.com", | |
| "indices":[ | |
| 0, | |
| 22 | |
| ] | |
| } | |
| ] | |
| }, | |
| "description":{ | |
| "urls":[] | |
| } | |
| }, | |
| "protected":false, | |
| "followers_count":4081, | |
| "friends_count":245, | |
| "listed_count":197, | |
| "created_at":"Mon Dec 10 20:05:57 +0000 2012", | |
| "favourites_count":13, | |
| "utc_offset":-28800, | |
| "time_zone":"Pacific Time (US & Canada)", | |
| "geo_enabled":false, | |
| "verified":false, | |
| "statuses_count":3306, | |
| "lang":"en", | |
| "contributors_enabled":false, | |
| "is_translator":false, | |
| "is_translation_enabled":false, | |
| "profile_background_color":"C0DEED", | |
| "profile_background_image_url":"http://abs.twimg.com/images/themes/theme1/bg.png", | |
| "profile_background_image_url_https":"https://abs.twimg.com/images/themes/theme1/bg.png", | |
| "profile_background_tile":false, | |
| "profile_image_url":"http://pbs.twimg.com/profile_images/483653379021746176/dzkYsMnH_normal.png", | |
| "profile_image_url_https":"https://pbs.twimg.com/profile_images/483653379021746176/dzkYsMnH_normal.png", | |
| "profile_link_color":"0084B4", | |
| "profile_sidebar_border_color":"C0DEED", | |
| "profile_sidebar_fill_color":"DDEEF6", | |
| "profile_text_color":"333333", | |
| "profile_use_background_image":true, | |
| "default_profile":true, | |
| "default_profile_image":false, | |
| "following":true, | |
| "follow_request_sent":false, | |
| "notifications":false | |
| }, | |
| "geo":null, | |
| "coordinates":null, | |
| "place":null, | |
| "contributors":null, | |
| "retweet_count":2, | |
| "favorite_count":2, | |
| "entities":{ | |
| "hashtags":[ | |
| { | |
| "text":"nodejs", | |
| "indices":[ | |
| 74, | |
| 81 | |
| ] | |
| } | |
| ], | |
| "symbols":[], | |
| "user_mentions":[], | |
| "urls":[ | |
| { | |
| "url":"http://t.co/tAxGc335jB", | |
| "expanded_url":"http://bit.ly/1KWEpA7", | |
| "display_url":"bit.ly/1KWEpA7", | |
| "indices":[ | |
| 110, | |
| 132 | |
| ] | |
| } | |
| ] | |
| }, | |
| "favorited":false, | |
| "retweeted":false, | |
| "possibly_sensitive":false, | |
| "possibly_sensitive_appealable":false, | |
| "lang":"en" | |
| } | |
| ]; |
| varrewire=require('rewire'), | |
| assert=require('assert'), | |
| twitter=rewire('./twitter.js'), | |
| mocks=require('./twitter-spec-mock-data.js'); | |
| describe('twitter module',function(){ | |
| describe('simplify function',function(){ | |
| varsimplify; | |
| before(function(){ | |
| simplify=twitter.__get__('simplify'); | |
| }); | |
| it('should be defined',function(){ | |
| assert.ok(simplify); | |
| }); | |
| describe('simplify a tweet',function(){ | |
| vartweet,mock; | |
| before(function(){ | |
| mock=mocks[0]; | |
| tweet=simplify(mock); | |
| }); | |
| it('should have 4 properties',function(){ | |
| assert.equal(Object.keys(tweet).length,4); | |
| }); | |
| it('should have date property',function(){ | |
| assert.ok(tweet.date); | |
| }); | |
| it('should have id property',function(){ | |
| assert.ok(tweet.id); | |
| }); | |
| it('should have user property',function(){ | |
| assert.ok(tweet.user); | |
| }); | |
| it('should have id property within user',function(){ | |
| assert.ok(tweet.user.id); | |
| }); | |
| it('should have tweet property',function(){ | |
| assert.ok(tweet.tweet); | |
| }); | |
| describe('format dates as `MMMM Do YYYY, h:mm:ss a`',function(){ | |
| varrevert; | |
| describe('English format',function(){ | |
| before(function(){ | |
| revert=twitter.__set__('process.env.MomentLang','en'); | |
| tweet=simplify(mock); | |
| }); | |
| it('should be `March 6th 2015, 2:29:13 am`',function(){ | |
| assert.equal(tweet.date,'March 6th 2015, 2:29:13 am'); | |
| }); | |
| after(function(){ | |
| revert(); | |
| }); | |
| }); | |
| describe('Brazilian format',function(){ | |
| before(function(){ | |
| revert=twitter.__set__('process.env.MomentLang','pt-br'); | |
| tweet=simplify(mock); | |
| }); | |
| it('should be `Março 6º 2015, 2:29:13 am`',function(){ | |
| assert.equal(tweet.date,'Março 6º 2015, 2:29:13 am'); | |
| }); | |
| after(function(){ | |
| revert(); | |
| }); | |
| }); | |
| }); | |
| }); | |
| }); | |
| describe('retrieve timeline feed',function(){ | |
| varrevert; | |
| before(function(){ | |
| revert=twitter.__set__("T.get",function(api,query,callback){ | |
| callback(null,mocks); | |
| }); | |
| }); | |
| describe('igorribeirolima timeline',function(){ | |
| vartweets; | |
| before(function(done){ | |
| twitter('igorribeirolima',function(err,data){ | |
| tweets=data; | |
| done(); | |
| }); | |
| }); | |
| it('should have 19 tweets',function(){ | |
| assert.equal(tweets.length,19); | |
| }); | |
| }); | |
| after(function(){ | |
| revert(); | |
| }); | |
| }); | |
| }); |
| varTwit=require('twit'), | |
| async=require('async'), | |
| moment=require('moment'), | |
| T=newTwit({ | |
| consumer_key:process.env.TwitterConsumerKey||'...', | |
| consumer_secret:process.env.TwitterConsumerSecret||'...', | |
| access_token:process.env.TwitterAccessToken||'...', | |
| access_token_secret:process.env.TwitterAccessTokenSecret||'...' | |
| }), | |
| mapReducingTweets=function(tweet,callback){ | |
| callback(null,simplify(tweet)); | |
| }, | |
| simplify=function(tweet){ | |
| vardate=moment(tweet.created_at,"ddd MMM DD HH:mm:ss zz YYYY"); | |
| date.lang(process.env.MomentLang); | |
| return{ | |
| date:date.format('MMMM Do YYYY, h:mm:ss a'), | |
| id:tweet.id, | |
| user:{ | |
| id:tweet.user.id | |
| }, | |
| tweet:tweet.text | |
| }; | |
| }; | |
| module.exports=function(username,callback){ | |
| T.get("statuses/user_timeline",{ | |
| screen_name:username, | |
| count:25 | |
| },function(err,tweets){ | |
| if(err)callback(err); | |
| elseasync.map(tweets,mapReducingTweets,function(err,simplified_tweets){ | |
| callback(null,simplified_tweets); | |
| }); | |
| }) | |
| }; |

