Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

Always return URIs instead of strings

Standardize on URI over URL.
  • Loading branch information...
commit 341f68d1a46667a820754d30ffa6ec2f50034afc 1 parent f6deb7d
Erik Michaels-Ober authored
81 README.md
View
@@ -200,23 +200,23 @@ end</code></pre>
</tbody>
</table>
-In the examples above, *n* is dependent on the number of people the
-authenticated user follows on Twitter (divided by 20, the number of friends you
-can fetch per request). So, if the user followers 85 people, calling
-`Twitter.friends.take(20)` would make 6 HTTP requests in version 4. In version
+In the examples above, *n* varies with the number of people the authenticated
+user follows on Twitter. This resource returns up to 20 friends per HTTP GET,
+so if the authenticated user follows 200 people, calling
+`Twitter.friends.take(20)` would make 11 HTTP requests in version 4. In version
5, it makes just 1 HTTP request. Keep in mind, eliminating a single HTTP
request to the Twitter API will reduce the latency of your application by
[about 500 ms][status].
[status]: https://dev.twitter.com/status
-The last example might seem contrived ("Why would I need to call
+The last example might seem contrived ("Why would I call
`Twitter.friends.take(20)` twice?") but it applies to any
[`Enumerable`][enumerable] method you might call on a cursor, including:
`#all?`, `#collect`, `#count`, `#each`, `#inject`, `#max`, `#min`, `#reject`,
`#reverse_each`, `#select`, `#sort`, `#sort_by`, and `#to_a`. In version 4,
each time you called one of those methods, it would perform *n+1* HTTP
-requests. In version 5, it will only perform those HTTP requests the first time
+requests. In version 5, it only performs those HTTP requests the first time any
one of those methods is called. Each subsequent call fetches data from a
[cache][].
@@ -232,10 +232,10 @@ before yielding any data.
Here is a list of the interface changes to `Twitter::Cursor`:
+* `#all` has been replaced by `#to_a`.
+* `#last` has been replaced by `#last?`.
* `#first` has been replaced by `#first?`.
* `#first` now returns the first element in the collection, as prescribed by `Enumerable`.
-* `#last` has been replaced by `#last?`.
-* `#all` has been replaced by `#to_a`.
* `#collection` and its aliases have been removed.
### Search Results
@@ -243,23 +243,24 @@ The `Twitter::SearchResults` class has also been redesigned to have an
[`Enumerable`][enumerable] interface. The `#statuses` method and its aliases
(`#collection` and `#results`) have been replaced by `#to_a`. Additionally,
this class no longer inherits from `Twitter::Base`. As a result, the `#[]`
-method has been removed without replacement.
+method has been removed.
### Trend Results
The `Twitter.trends` method now returns an [`Enumerable`][enumerable]
-`Twitter::TrendResults` object instead of an array. This object exposes the
-recency of the trend (via `#as_of`), when the trend started (via
-`#created_at`), and the location of the trend (via `#location`). This
-information was previously unavailable.
+`Twitter::TrendResults` object instead of an array. This object provides
+methods to determinte the recency of the trend (`#as_of`), when the trend
+started (`#created_at`), and the location of the trend (`#location`). This data
+was previously unavailable.
### Geo Results
-The `Twitter.reverse_geocode`, `Twitter.geo_search`, and
+Similarly, the `Twitter.reverse_geocode`, `Twitter.geo_search`, and
`Twitter.similar_places` methods now return an [`Enumerable`][enumerable]
-`Twitter::GeoResults` object instead of an array. This object exposes the token
-to create a new place (via `#token`), which was previously unavailable.
+`Twitter::GeoResults` object instead of an array. This object provides access
+to the token to create a new place (`#token`), which was previously
+unavailable.
-### Users
-The `Twitter::User` object has been cleaned up. The following methods have been
+### Tweets
+The `Twitter::Tweet` object has been cleaned up. The following methods have been
removed:
* `#from_user`
@@ -271,17 +272,14 @@ removed:
* `#profile_image_url`
* `#profile_image_url_https`
-These attributes can be accessed through the `#user` method.
+These attributes can be accessed on the `Twitter::User` object, returned
+through the `#user` method.
### Null Objects
In version 4, methods you would expect to return a `Twitter` object would
-return `nil` if that object was missing. This may have resulted in errors like
-this:
-
- NoMethodError: undefined method for nil:NilClass
-
-To prevent such errors, you may have introduced checks for the truthiness of
-the response, for example:
+return `nil` if that object was missing. This may have resulted in a
+`NoMethodError`. To prevent such errors, you may have introduced checks for the
+truthiness of the response, for example:
```ruby
status = Twitter.status(55709764298092545)
@@ -306,23 +304,18 @@ elsif status.geo?
end
```
-### URL Methods
-`Twitter::List`, `Twitter::Tweet`, and `Twitter::User` objects all have `#url`
-methods, which generate an HTTPS URL to twitter.com. You may specify a
-different protocol by passing it to the `#url` method. For example:
-
-```ruby
-status = Twitter.status(55709764298092545)
-status.url #=> https://twitter.com/sferik/status/55709764298092545
-status.url("http") #=> http://twitter.com/sferik/status/55709764298092545
-```
+### URI Methods
+The `Twitter::List`, `Twitter::Tweet`, and `Twitter::User` objects all have a
+`#uri` method, which returnis an HTTPS URI to twitter.com. This clobbers the
+`Twitter::List#uri` method, which previously returned the list URI's path (not
+a URI).
-`Twitter::User` previously had a method called `#url`, which returned the URL
-to the user's website. This URL is now accessible via the `#website` method.
+These methods are aliased to `#url` for users who prefer that nomenclature.
+`Twitter::User` previously had a `#url` method, which returned the user's
+website. This URI is now available via the `#website` method.
-These methods are aliased to `#uri`, for users who prefer that nomenclature.
-This clobbers the `Twitter::List#uri` method, which previously returned the
-list's path (not a full URI).
+All `#uri` methods now return `URI` objects instead of strings. To convert a
+`URI` object to a string, call `#to_s` on it.
## Configuration
Twitter API v1.1 requires you to authenticate via OAuth, so you'll need to
@@ -525,9 +518,9 @@ recommend [Oj][].
## Statistics
Here are some fun facts about this library:
-* It is implemented in just 2,000 lines of Ruby code
-* With over 5,000 lines of specs, the spec-to-code ratio is about 2.5:1
-* The spec suite contains over 800 examples and runs in about 5 seconds
+* It is implemented in just 2,500 lines of Ruby code
+* With over 6,250 lines of specs, the spec-to-code ratio is about 2.5:1
+* The spec suite contains over 900 examples and runs in about 5 seconds
* It has 100% C0 code coverage (the tests execute every line of
source code at least once)
* It is comprehensive: you can request all documented Twitter REST API
3  lib/twitter.rb
View
@@ -8,7 +8,7 @@
require 'twitter/entity'
require 'twitter/entity/hashtag'
require 'twitter/entity/symbol'
-require 'twitter/entity/url'
+require 'twitter/entity/uri'
require 'twitter/entity/user_mention'
require 'twitter/geo_factory'
require 'twitter/language'
@@ -30,6 +30,7 @@
require 'twitter/trend'
require 'twitter/tweet'
require 'twitter/user'
+require 'uri'
module Twitter
class << self
8 lib/twitter/api/undocumented.rb
View
@@ -38,19 +38,19 @@ def following_followers_of(*args)
cursor_from_response_with_user(:users, Twitter::User, :get, "/users/following_followers_of.json", args)
end
- # Returns Tweets count for a URL
+ # Returns Tweets count for a URI
#
# @note Undocumented
# @rate_limited No
# @authentication Not required
# @return [Integer]
- # @param url [Integer] A URL.
+ # @param uri [String, URI] A URI.
# @param options [Hash] A customizable set of options.
# @example Return Tweet count for http://twitter.com
# Twitter.tweet_count("http://twitter.com/")
- def tweet_count(url, options={})
+ def tweet_count(uri, options={})
connection = Faraday.new("https://cdn.api.twitter.com", @connection_options.merge(:builder => @middleware))
- connection.get("/1/urls/count.json", options.merge(:url => url)).body[:count]
+ connection.get("/1/urls/count.json", options.merge(:url => uri.to_s)).body[:count]
end
end
10 lib/twitter/api/utils.rb
View
@@ -18,11 +18,11 @@ module Utils
# @return [Integer]
def extract_id(object)
case object
- when Integer
+ when ::Integer
object
- when String
+ when ::String
object.split("/").last.to_i
- when URI
+ when ::URI
object.path.split("/").last.to_i
when Twitter::Identity
object.id
@@ -167,7 +167,7 @@ def merge_user!(hash, user, prefix=nil)
else
hash[[prefix, "screen_name"].compact.join("_").to_sym] = user
end
- when URI
+ when ::URI
hash[[prefix, "screen_name"].compact.join("_").to_sym] = user.path.split("/").last
when Twitter::User
hash[[prefix, "user_id"].compact.join("_").to_sym] = user.id
@@ -201,7 +201,7 @@ def merge_users!(hash, users)
else
screen_names << user
end
- when URI
+ when ::URI
screen_names << user.path.split("/").last
when Twitter::User
user_ids << user.id
2  lib/twitter/client.rb
View
@@ -137,7 +137,7 @@ def bearer_auth_header
end
def oauth_auth_header(method, path, params={})
- uri = URI(@endpoint + path)
+ uri = ::URI.parse(@endpoint + path)
SimpleOAuth::Header.new(method, uri, params, credentials)
end
end
2  lib/twitter/configuration.rb
View
@@ -4,6 +4,8 @@ module Twitter
class Configuration < Twitter::Base
attr_reader :characters_reserved_per_media, :max_media_per_upload,
:non_username_paths, :photo_size_limit, :short_url_length, :short_url_length_https
+ alias short_uri_length short_url_length
+ alias short_uri_length_https short_url_length_https
# Returns an array of photo sizes
#
49 lib/twitter/entity/uri.rb
View
@@ -0,0 +1,49 @@
+require 'twitter/entity'
+
+module Twitter
+ class Entity
+ class URI < Twitter::Entity
+
+ # @return [URI]
+ def display_uri
+ @display_uri ||= ::URI.parse(@attrs[:display_url]) if display_uri?
+ end
+ alias display_url display_uri
+
+ # @return [Boolean]
+ def display_uri?
+ !!@attrs[:display_url]
+ end
+ alias display_url? display_uri?
+
+ # @return [URI]
+ def expanded_uri
+ @expanded_uri ||= ::URI.parse(@attrs[:expanded_url]) if expanded_uri?
+ end
+ alias expanded_url expanded_uri
+
+ # @return [Boolean]
+ def expanded_uri?
+ !!@attrs[:expanded_url]
+ end
+ alias expanded_url? expanded_uri?
+
+ # @return [URI]
+ def uri
+ @uri ||= ::URI.parse(@attrs[:url]) if uri?
+ end
+ alias url uri
+
+ # @return [Boolean]
+ def uri?
+ !!@attrs[:url]
+ end
+ alias url? uri?
+
+ end
+
+ Uri = URI
+ URL = URI
+ Url = URI
+ end
+end
9 lib/twitter/entity/url.rb
View
@@ -1,9 +0,0 @@
-require 'twitter/entity'
-
-module Twitter
- class Entity
- class Url < Twitter::Entity
- attr_reader :display_url, :expanded_url, :url
- end
- end
-end
24 lib/twitter/list.rb
View
@@ -8,23 +8,23 @@ class List < Twitter::Identity
:mode, :name, :slug, :subscriber_count
object_attr_reader :User, :user
- # @return [String] The URL to the list members.
- def members_url(protocol="https")
- "#{protocol}://twitter.com/#{user.screen_name}/#{slug}/members"
+ # @return [URI] The URI to the list members.
+ def members_uri
+ @members_uri ||= ::URI.parse("https://twitter.com/#{user.screen_name}/#{slug}/members")
end
- alias members_uri members_url
+ alias members_url members_uri
- # @return [String] The URL to the list subscribers.
- def subscribers_url(protocol="https")
- "#{protocol}://twitter.com/#{user.screen_name}/#{slug}/subscribers"
+ # @return [URI] The URI to the list subscribers.
+ def subscribers_uri
+ @subscribers_uri ||= ::URI.parse("https://twitter.com/#{user.screen_name}/#{slug}/subscribers")
end
- alias subscribers_uri subscribers_url
+ alias subscribers_url subscribers_uri
- # @return [String] The URL to the list.
- def url(protocol="https")
- "#{protocol}://twitter.com/#{user.screen_name}/#{slug}"
+ # @return [URI] The URI to the list.
+ def uri
+ @uri ||= ::URI.parse("https://twitter.com/#{user.screen_name}/#{slug}")
end
- alias uri url
+ alias url uri
end
end
63 lib/twitter/media/photo.rb
View
@@ -3,8 +3,7 @@
module Twitter
module Media
class Photo < Twitter::Identity
- attr_reader :display_url, :expanded_url, :indices, :media_url,
- :media_url_https, :url
+ attr_reader :indices
# Returns an array of photo sizes
#
@@ -15,6 +14,66 @@ def sizes
end
end
+ # @return [URI]
+ def display_uri
+ @display_uri ||= ::URI.parse(@attrs[:display_url]) if display_uri?
+ end
+ alias display_url display_uri
+
+ # @return [Boolean]
+ def display_uri?
+ !!@attrs[:display_url]
+ end
+ alias display_url? display_uri?
+
+ # @return [URI]
+ def expanded_uri
+ @expanded_uri ||= ::URI.parse(@attrs[:expanded_url]) if expanded_uri?
+ end
+ alias expanded_url expanded_uri
+
+ # @return [Boolean]
+ def expanded_uri?
+ !!@attrs[:expanded_url]
+ end
+ alias expanded_url? expanded_uri?
+
+ # @return [URI]
+ def media_uri
+ @media_uri ||= ::URI.parse(@attrs[:media_url]) if media_uri?
+ end
+ alias media_url media_uri
+
+ # @return [Boolean]
+ def media_uri?
+ !!@attrs[:media_url]
+ end
+ alias media_url? media_uri?
+
+ # @return [URI]
+ def media_uri_https
+ @media_uri_https ||= ::URI.parse(@attrs[:media_url_https]) if media_uri_https?
+ end
+ alias media_url_https media_uri_https
+
+ # @return [Boolean]
+ def media_uri_https?
+ !!@attrs[:media_url_https]
+ end
+ alias media_url_https? media_uri_https?
+
+ # @return [URI]
+ def uri
+ @uri ||= ::URI.parse(@attrs[:url]) if uri?
+ end
+ alias url uri
+
+ # @return [Boolean]
+ def uri?
+ !!@attrs[:url]
+ end
+ alias url? uri?
+
end
end
end
40 lib/twitter/oembed.rb
View
@@ -2,8 +2,42 @@
module Twitter
class OEmbed < Twitter::Base
- attr_reader :author_name, :author_url, :cache_age, :height, :html,
- :provider_name, :provider_url, :type, :url, :version, :width
- alias uri url
+ attr_reader :author_name, :cache_age, :height, :html, :provider_name,
+ :type, :version, :width
+
+ # @return [URI]
+ def author_uri
+ @author_uri ||= ::URI.parse(@attrs[:author_url]) if author_uri?
+ end
+ alias author_url author_uri
+
+ # @return [Boolean]
+ def author_uri?
+ !!@attrs[:author_url]
+ end
+
+ # @return [URI]
+ def provider_uri
+ @provider_uri ||= ::URI.parse(@attrs[:provider_url]) if provider_uri?
+ end
+ alias provider_url provider_uri
+
+ # @return [Boolean]
+ def provider_uri?
+ !!@attrs[:provider_url]
+ end
+
+ # @return [URI] The URI to the tweet.
+ def uri
+ @uri ||= ::URI.parse(@attrs[:url]) if uri?
+ end
+ alias url uri
+
+ # @return [Boolean]
+ def uri?
+ !!@attrs[:url]
+ end
+ alias url? uri?
+
end
end
16 lib/twitter/place.rb
View
@@ -2,8 +2,7 @@
module Twitter
class Place < Twitter::Identity
- attr_reader :attributes, :country, :full_name, :name, :url, :woeid
- alias uri url
+ attr_reader :attributes, :country, :full_name, :name, :woeid
alias woe_id woeid
object_attr_reader :GeoFactory, :bounding_box
object_attr_reader :Place, :contained_within
@@ -30,9 +29,22 @@ def place_type
end
end
+ # return [Integer]
def id
@attrs[:id] || @attrs[:woeid]
end
+ # @return [URI] The URI to the place.
+ def uri
+ @uri ||= ::URI.parse(@attrs[:url]) if uri?
+ end
+ alias url uri
+
+ # return [Boolean]
+ def uri?
+ !!@attrs[:url]
+ end
+ alias url? uri?
+
end
end
4 lib/twitter/search_results.rb
View
@@ -85,11 +85,11 @@ def next_results
#
# @note Returned Hash can be merged into the previous search options list to easily access the refresh page.
# @return [Hash] The parameters needed to refresh the page.
- def refresh_url
+ def refresh_results
query_string = strip_first_character(@attrs[:search_metadata][:refresh_url])
query_string_to_hash(query_string)
end
- alias refresh_page refresh_url
+ alias refresh_page refresh_results
private
15 lib/twitter/trend.rb
View
@@ -2,8 +2,7 @@
module Twitter
class Trend < Twitter::Base
- attr_reader :events, :name, :promoted_content, :query, :url
- alias uri url
+ attr_reader :events, :name, :promoted_content, :query
# @param other [Twitter::Trend]
# @return [Boolean]
@@ -11,5 +10,17 @@ def ==(other)
super || attr_equal(:name, other) || attrs_equal(other)
end
+ # @return [URI] The URI to the trend.
+ def uri
+ @uri ||= ::URI.parse(@attrs[:url]) if uri?
+ end
+ alias url uri
+
+ # @return [Boolean]
+ def uri?
+ !!@attrs[:url]
+ end
+ alias url? uri?
+
end
end
15 lib/twitter/tweet.rb
View
@@ -76,18 +76,19 @@ def symbols
end
# @return [String] The URL to the tweet.
- def url(protocol="https")
- "#{protocol}://twitter.com/#{user.screen_name}/status/#{id}"
+ def uri
+ @uri ||= ::URI.parse("https://twitter.com/#{user.screen_name}/status/#{id}")
end
- alias uri url
+ alias url uri
# @note Must include entities in your request for this method to work
- # @return [Array<Twitter::Entity::Url>]
- def urls
- memoize(:urls) do
- entities(Twitter::Entity::Url, :urls)
+ # @return [Array<Twitter::Entity::URI>]
+ def uris
+ memoize(:uris) do
+ entities(Twitter::Entity::URI, :urls)
end
end
+ alias urls uris
# @note Must include entities in your request for this method to work
# @return [Array<Twitter::Entity::UserMention>]
59 lib/twitter/user.rb
View
@@ -22,6 +22,8 @@ class User < Twitter::BasicUser
alias favouriters_count favourites_count
alias follower_count followers_count
alias friend_count friends_count
+ alias profile_background_image_uri profile_background_image_url
+ alias profile_background_image_uri_https profile_background_image_url_https
alias status_count statuses_count
alias translator is_translator
alias translator? is_translator?
@@ -35,82 +37,97 @@ class User < Twitter::BasicUser
alias tweeted? status?
# @return [Array<Twitter::Entity::Url>]
- def description_urls
+ def description_uris
memoize(:description_urls) do
Array(@attrs[:entities][:description][:urls]).map do |entity|
Twitter::Entity::Url.new(entity)
end
end
end
+ alias description_urls description_uris
# Return the URL to the user's profile banner image
#
# @param size [String, Symbol] The size of the image. Must be one of: 'mobile', 'mobile_retina', 'web', 'web_retina', 'ipad', or 'ipad_retina'
# @return [String]
- def profile_banner_url(size=:web)
- insecure_url([@attrs[:profile_banner_url], size].join('/')) if profile_banner_url?
+ def profile_banner_uri(size=:web)
+ ::URI.parse(insecure_uri([@attrs[:profile_banner_url], size].join('/'))) if profile_banner_uri?
end
+ alias profile_banner_url profile_banner_uri
# Return the secure URL to the user's profile banner image
#
# @param size [String, Symbol] The size of the image. Must be one of: 'mobile', 'mobile_retina', 'web', 'web_retina', 'ipad', or 'ipad_retina'
# @return [String]
- def profile_banner_url_https(size=:web)
- [@attrs[:profile_banner_url], size].join('/') if profile_banner_url?
+ def profile_banner_uri_https(size=:web)
+ ::URI.parse([@attrs[:profile_banner_url], size].join('/')) if profile_banner_uri?
end
+ alias profile_banner_url_https profile_banner_uri_https
- def profile_banner_url?
+ def profile_banner_uri?
!!@attrs[:profile_banner_url]
end
- alias profile_banner_url_https? profile_banner_url?
+ alias profile_banner_url? profile_banner_uri?
+ alias profile_banner_uri_https? profile_banner_uri?
+ alias profile_banner_url_https? profile_banner_uri?
# Return the URL to the user's profile image
#
# @param size [String, Symbol] The size of the image. Must be one of: 'mini', 'normal', 'bigger' or 'original'
# @return [String]
- def profile_image_url(size=:normal)
- insecure_url(profile_image_url_https(size)) if profile_image_url?
+ def profile_image_uri(size=:normal)
+ ::URI.parse(insecure_uri(profile_image_uri_https(size))) if profile_image_uri?
end
+ alias profile_image_url profile_image_uri
# Return the secure URL to the user's profile image
#
# @param size [String, Symbol] The size of the image. Must be one of: 'mini', 'normal', 'bigger' or 'original'
# @return [String]
- def profile_image_url_https(size=:normal)
+ def profile_image_uri_https(size=:normal)
# The profile image URL comes in looking like like this:
# https://a0.twimg.com/profile_images/1759857427/image1326743606_normal.png
# It can be converted to any of the following sizes:
# https://a0.twimg.com/profile_images/1759857427/image1326743606.png
# https://a0.twimg.com/profile_images/1759857427/image1326743606_mini.png
# https://a0.twimg.com/profile_images/1759857427/image1326743606_bigger.png
- resize_profile_image_url(@attrs[:profile_image_url_https], size) if profile_image_url?
+ ::URI.parse(resize_profile_image_uri(@attrs[:profile_image_url_https], size)) if profile_image_uri?
end
+ alias profile_image_url_https profile_image_uri_https
- def profile_image_url?
+ def profile_image_uri?
!!@attrs[:profile_image_url_https]
end
- alias profile_image_url_https? profile_image_url?
+ alias profile_image_url? profile_image_uri?
+ alias profile_image_uri_https? profile_image_uri?
+ alias profile_image_url_https? profile_image_uri?
# @return [String] The URL to the user.
- def url(protocol="https")
- "#{protocol}://twitter.com/#{screen_name}"
+ def uri
+ @uri ||= ::URI.parse("https://twitter.com/#{screen_name}")
end
- alias uri url
+ alias url uri
# @return [String] The URL to the user's website.
def website
- @attrs[:url]
+ @website ||= ::URI.parse(@attrs[:url]) if website?
+ end
+
+ def website?
+ !!@attrs[:url]
end
private
- def insecure_url(url)
- url.sub(/^https/i, 'http')
+ def insecure_uri(uri)
+ uri.to_s.sub(/^https/i, 'http')
end
+ alias insecure_url insecure_uri
- def resize_profile_image_url(url, size)
- url.sub(PROFILE_IMAGE_SUFFIX_REGEX, profile_image_suffix(size))
+ def resize_profile_image_uri(uri, size)
+ uri.sub(PROFILE_IMAGE_SUFFIX_REGEX, profile_image_suffix(size))
end
+ alias resize_profile_image_url resize_profile_image_uri
def profile_image_suffix(size)
if :original == size.to_sym
1  spec/fixtures/phoenix_search.phoenix
View
@@ -1 +0,0 @@
-{"statuses":[{"id_str":"110059784971096066","in_reply_to_status_id":null,"truncated":false,"user":{"profile_sidebar_fill_color":"DDEEF6","protected":false,"id_str":"66561957","notifications":false,"profile_background_tile":false,"screen_name":"therealzooeyd","name":"zooey deschanel","listed_count":9165,"location":"somewhere pretty awesome...","show_all_inline_media":false,"contributors_enabled":false,"following":true,"geo_enabled":false,"utc_offset":-28800,"profile_link_color":"0084B4","description":"where do I begin?","profile_sidebar_border_color":"C0DEED","url":"http:\/\/www.sheandhim.com","time_zone":"Pacific Time (US & Canada)","default_profile_image":false,"statuses_count":1864,"profile_use_background_image":true,"verified":true,"favourites_count":2,"friends_count":355,"profile_background_color":"C0DEED","is_translator":false,"profile_background_image_url":"http:\/\/a3.twimg.com\/profile_background_images\/178865861\/Zooey_12.jpg","created_at":"Tue Aug 18 01:55:35 +0000 2009","followers_count":561263,"default_profile":false,"follow_request_sent":false,"lang":"en","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/178865861\/Zooey_12.jpg","id":66561957,"profile_text_color":"333333","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1284004687\/zuzu_and_caleb_at_the_camera_normal.jpg","profile_image_url":"http:\/\/a1.twimg.com\/profile_images\/1284004687\/zuzu_and_caleb_at_the_camera_normal.jpg"},"favorited":false,"in_reply_to_status_id_str":null,"geo":null,"in_reply_to_screen_name":null,"in_reply_to_user_id_str":null,"coordinates":null,"in_reply_to_user_id":null,"source":"web","created_at":"Sat Sep 03 18:41:12 +0000 2011","entities":{"user_mentions":[],"urls":[],"hashtags":[]},"contributors":null,"retweeted":false,"retweet_count":"100+","id":110059784971096066,"place":null,"text":"looking at twitter trends just makes me realize how little i really understand about mankind.","result_category":"popular"},{"id_str":"110102452983963648","in_reply_to_status_id":null,"truncated":false,"user":{"profile_sidebar_fill_color":"DDEEF6","protected":false,"id_str":"91720294","notifications":false,"profile_background_tile":true,"screen_name":"I_am_Chicago1","name":"Cortney Bell ","listed_count":10,"location":"#Pvnation ","show_all_inline_media":false,"contributors_enabled":false,"following":true,"geo_enabled":true,"utc_offset":-21600,"profile_link_color":"0084B4","description":"follow me ... and @ me for more info about me ... i love talking ","default_profile":false,"profile_sidebar_border_color":"C0DEED","url":null,"time_zone":"Central Time (US & Canada)","default_profile_image":false,"statuses_count":15916,"profile_use_background_image":true,"verified":false,"favourites_count":30,"friends_count":1382,"profile_background_color":"C0DEED","is_translator":false,"profile_background_image_url":"http:\/\/a2.twimg.com\/profile_background_images\/313661881\/230924_10150575103000392_886675391_18447865_3396753_n.jpg","created_at":"Sun Nov 22 04:12:38 +0000 2009","followers_count":1455,"follow_request_sent":false,"lang":"en","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/313661881\/230924_10150575103000392_886675391_18447865_3396753_n.jpg","id":91720294,"profile_text_color":"333333","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1500420758\/26726_10150132149850392_886675391_11511035_325929_n_normal.jpg","profile_image_url":"http:\/\/a1.twimg.com\/profile_images\/1500420758\/26726_10150132149850392_886675391_11511035_325929_n_normal.jpg"},"favorited":false,"possibly_sensitive":false,"in_reply_to_status_id_str":null,"geo":null,"in_reply_to_screen_name":null,"in_reply_to_user_id_str":null,"coordinates":null,"in_reply_to_user_id":null,"source":"web","created_at":"Sat Sep 03 21:30:45 +0000 2011","entities":{"user_mentions":[],"urls":[],"media":[{"type":"photo","id_str":"110102452988157952","display_url":"pic.twitter.com\/tImqsGy","expanded_url":"http:\/\/twitter.com\/I_am_Chicago1\/status\/110102452983963648\/photo\/1","media_url_https":"https:\/\/p.twimg.com\/AYcpmP9CIAAJpsR.jpg","url":"http:\/\/t.co\/tImqsGy","indices":[15,34],"sizes":{"small":{"h":98,"w":130,"resize":"fit"},"large":{"h":98,"w":130,"resize":"fit"},"thumb":{"h":98,"w":130,"resize":"crop"},"medium":{"h":98,"w":130,"resize":"fit"}},"id":110102452988157952,"media_url":"http:\/\/p.twimg.com\/AYcpmP9CIAAJpsR.jpg"}],"hashtags":[]},"contributors":null,"retweeted":false,"retweet_count":0,"id":110102452983963648,"place":null,"text":"this shit Cray http:\/\/t.co\/tImqsGy","result_category":"recent"},{"id_str":"110102452937834496","in_reply_to_status_id":null,"truncated":false,"user":{"profile_sidebar_fill_color":"F3F3F3","protected":false,"id_str":"29248413","notifications":false,"profile_background_tile":false,"screen_name":"trinbeean","name":"Trina","listed_count":0,"location":"Everywhere I wanna be","show_all_inline_media":false,"contributors_enabled":false,"following":true,"geo_enabled":false,"utc_offset":-18000,"profile_link_color":"990000","description":"Wats UNDERSTOOD dnt gota be EXPLAINED!!","profile_sidebar_border_color":"DFDFDF","url":null,"time_zone":"Eastern Time (US & Canada)","default_profile_image":false,"default_profile":false,"statuses_count":13064,"profile_use_background_image":true,"verified":false,"favourites_count":8,"friends_count":220,"profile_background_color":"EBEBEB","is_translator":false,"profile_background_image_url":"http:\/\/a1.twimg.com\/images\/themes\/theme7\/bg.gif","created_at":"Mon Apr 06 17:34:14 +0000 2009","followers_count":133,"follow_request_sent":false,"lang":"en","profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme7\/bg.gif","id":29248413,"profile_text_color":"333333","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1493286924\/trinbeean_normal.jpg","profile_image_url":"http:\/\/a3.twimg.com\/profile_images\/1493286924\/trinbeean_normal.jpg"},"favorited":false,"in_reply_to_status_id_str":null,"geo":null,"in_reply_to_screen_name":null,"in_reply_to_user_id_str":null,"coordinates":null,"in_reply_to_user_id":null,"source":"\u003Ca href=\"http:\/\/levelupstudio.com\" rel=\"nofollow\"\u003EPlume\u00a0\u00a0\u003C\/a\u003E","created_at":"Sat Sep 03 21:30:45 +0000 2011","entities":{"user_mentions":[],"urls":[],"hashtags":[]},"contributors":null,"retweeted":false,"retweet_count":0,"id":110102452937834496,"place":null,"text":"Damn my phone n my twitter ain't jumped all day...nobodys fukkin wit me?! Smh","result_category":"recent"},{"id_str":"110102452656816129","in_reply_to_status_id":null,"truncated":false,"user":{"profile_sidebar_fill_color":"DDEEF6","protected":false,"id_str":"315338037","notifications":null,"profile_background_tile":false,"screen_name":"h1940","name":"Hans Greup","default_profile":true,"listed_count":0,"location":null,"show_all_inline_media":false,"contributors_enabled":false,"following":null,"geo_enabled":false,"utc_offset":null,"profile_link_color":"0084B4","description":null,"profile_sidebar_border_color":"C0DEED","url":null,"time_zone":null,"default_profile_image":true,"statuses_count":1,"profile_use_background_image":true,"verified":false,"favourites_count":0,"friends_count":3,"profile_background_color":"C0DEED","is_translator":false,"profile_background_image_url":"http:\/\/a0.twimg.com\/images\/themes\/theme1\/bg.png","created_at":"Sat Jun 11 18:05:53 +0000 2011","followers_count":0,"follow_request_sent":null,"lang":"en","profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme1\/bg.png","id":315338037,"profile_text_color":"333333","profile_image_url_https":"https:\/\/si0.twimg.com\/sticky\/default_profile_images\/default_profile_0_normal.png","profile_image_url":"http:\/\/a3.twimg.com\/sticky\/default_profile_images\/default_profile_0_normal.png"},"favorited":false,"possibly_sensitive":false,"in_reply_to_status_id_str":null,"geo":null,"in_reply_to_screen_name":null,"in_reply_to_user_id_str":null,"coordinates":null,"in_reply_to_user_id":null,"source":"\u003Ca href=\"http:\/\/mobile.twitter.com\" rel=\"nofollow\"\u003EMobile Web\u003C\/a\u003E","created_at":"Sat Sep 03 21:30:44 +0000 2011","entities":{"user_mentions":[],"urls":[{"display_url":"goo.gl\/TDs5Y?kylo","expanded_url":"http:\/\/goo.gl\/TDs5Y?kylo","url":"http:\/\/t.co\/9EhL4KF","indices":[53,72]}],"hashtags":[]},"contributors":null,"retweeted":false,"retweet_count":0,"id":110102452656816129,"place":null,"text":"I just made $577 today working a few hour from home http:\/\/t.co\/9EhL4KF","result_category":"recent"},{"id_str":"110102452191248384","in_reply_to_status_id":null,"truncated":false,"user":{"profile_sidebar_fill_color":"f6ce93","protected":false,"id_str":"243420776","notifications":false,"profile_background_tile":false,"screen_name":"DenisFariias","name":" Denis Farias","default_profile":false,"listed_count":0,"location":"","show_all_inline_media":false,"contributors_enabled":false,"following":true,"geo_enabled":false,"utc_offset":null,"profile_link_color":"825421","description":"tourino, shato pra caralho, amig\u00e3o, olhos verdes, americano e vascaino fanatico, futebol, forro, festa... Msn: denis_fariaschagas@hotmail.com \r\n","profile_sidebar_border_color":"000000","url":null,"time_zone":null,"default_profile_image":false,"statuses_count":995,"profile_use_background_image":true,"verified":false,"favourites_count":1,"friends_count":145,"profile_background_color":"ffffff","is_translator":false,"profile_background_image_url":"http:\/\/a1.twimg.com\/profile_background_images\/324394183\/wall-3.br.jpg","created_at":"Thu Jan 27 00:40:08 +0000 2011","followers_count":192,"follow_request_sent":false,"lang":"en","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/324394183\/wall-3.br.jpg","id":243420776,"profile_text_color":"000000","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1495336726\/Denis99_normal.jpg","profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1495336726\/Denis99_normal.jpg"},"favorited":false,"possibly_sensitive":false,"in_reply_to_status_id_str":null,"geo":null,"in_reply_to_screen_name":null,"in_reply_to_user_id_str":null,"coordinates":null,"in_reply_to_user_id":null,"source":"\u003Ca href=\"http:\/\/www.twitrbackgrounds.com\" rel=\"nofollow\"\u003Etwitrbackgroundsdotcom\u003C\/a\u003E","created_at":"Sat Sep 03 21:30:44 +0000 2011","entities":{"user_mentions":[],"urls":[{"display_url":"TwitterBackgrounds.com","expanded_url":"http:\/\/www.TwitterBackgrounds.com","url":"http:\/\/t.co\/Yxg7c6U","indices":[62,81]}],"hashtags":[]},"contributors":null,"retweeted":false,"retweet_count":0,"id":110102452191248384,"place":null,"text":"Just changed my twitter background, check it out! Found it at http:\/\/t.co\/Yxg7c6U on Saturday 02:24:36 PM","result_category":"recent"},{"id_str":"110102451520147456","in_reply_to_status_id":null,"truncated":false,"user":{"profile_sidebar_fill_color":"ffffff","protected":false,"id_str":"244369383","notifications":false,"profile_background_tile":true,"screen_name":"ryanruggi","name":"Ryan Ruggiero","listed_count":6,"location":"Atlanta, Georgia","show_all_inline_media":true,"contributors_enabled":false,"following":false,"geo_enabled":true,"utc_offset":-18000,"profile_link_color":"32c232","description":"Just livin' it up like it's the weekend. ","profile_sidebar_border_color":"ffffff","url":null,"time_zone":"Eastern Time (US & Canada)","default_profile_image":false,"statuses_count":7023,"profile_use_background_image":true,"default_profile":false,"verified":false,"favourites_count":15,"friends_count":682,"profile_background_color":"fafafa","is_translator":false,"profile_background_image_url":"http:\/\/a2.twimg.com\/profile_background_images\/316502774\/pattern-background.jpg","created_at":"Sat Jan 29 04:35:01 +0000 2011","followers_count":640,"follow_request_sent":false,"lang":"en","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/316502774\/pattern-background.jpg","id":244369383,"profile_text_color":"46454d","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1523046286\/image_normal.jpg","profile_image_url":"http:\/\/a2.twimg.com\/profile_images\/1523046286\/image_normal.jpg"},"favorited":false,"possibly_sensitive":false,"in_reply_to_status_id_str":null,"geo":null,"in_reply_to_screen_name":null,"in_reply_to_user_id_str":null,"coordinates":null,"in_reply_to_user_id":null,"source":"web","created_at":"Sat Sep 03 21:30:46 +0000 2011","entities":{"user_mentions":[],"urls":[],"media":[{"type":"photo","id_str":"110102451524341761","display_url":"pic.twitter.com\/3Bmz6qj","expanded_url":"http:\/\/twitter.com\/ryanruggi\/status\/110102451520147456\/photo\/1","media_url_https":"https:\/\/p.twimg.com\/AYcpmKgCEAEnDeT.png","url":"http:\/\/t.co\/3Bmz6qj","indices":[60,79],"sizes":{"small":{"h":262,"w":340,"resize":"fit"},"large":{"h":602,"w":780,"resize":"fit"},"thumb":{"h":150,"w":150,"resize":"crop"},"medium":{"h":463,"w":600,"resize":"fit"}},"id":110102451524341761,"media_url":"http:\/\/p.twimg.com\/AYcpmKgCEAEnDeT.png"}],"hashtags":[]},"contributors":null,"retweeted":false,"retweet_count":0,"id":110102451520147456,"place":null,"text":"Well this'll be fun, it's heading straight for Atlanta! O.o http:\/\/t.co\/3Bmz6qj","result_category":"recent"},{"id_str":"110102450790338560","in_reply_to_status_id":null,"truncated":false,"user":{"profile_sidebar_fill_color":"DDEEF6","protected":false,"id_str":"363396957","notifications":false,"profile_background_tile":false,"screen_name":"MarixoliitaC","name":"maria fernanda","listed_count":0,"location":"","show_all_inline_media":false,"contributors_enabled":false,"following":false,"geo_enabled":false,"utc_offset":null,"profile_link_color":"0084B4","description":"","profile_sidebar_border_color":"C0DEED","url":"http:\/\/www.facebook.com\/marixolita.bonita","time_zone":null,"default_profile_image":false,"statuses_count":33,"profile_use_background_image":true,"verified":false,"favourites_count":0,"friends_count":9,"profile_background_color":"C0DEED","is_translator":false,"profile_background_image_url":"http:\/\/a0.twimg.com\/images\/themes\/theme1\/bg.png","created_at":"Sun Aug 28 01:07:24 +0000 2011","followers_count":0,"default_profile":true,"follow_request_sent":false,"lang":"es","profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme1\/bg.png","id":363396957,"profile_text_color":"333333","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1517730160\/275837_100002268478641_2446262_n_normal.jpg","profile_image_url":"http:\/\/a1.twimg.com\/profile_images\/1517730160\/275837_100002268478641_2446262_n_normal.jpg"},"favorited":false,"in_reply_to_status_id_str":null,"geo":null,"in_reply_to_screen_name":null,"in_reply_to_user_id_str":null,"coordinates":null,"in_reply_to_user_id":null,"source":"web","created_at":"Sat Sep 03 21:30:44 +0000 2011","entities":{"user_mentions":[],"urls":[],"hashtags":[]},"contributors":null,"retweeted":false,"retweet_count":0,"id":110102450790338560,"place":null,"text":"dia perfecto para vicear full en twitter xD","result_category":"recent"},{"id_str":"110102450614181888","in_reply_to_status_id":null,"truncated":false,"user":{"profile_sidebar_fill_color":"","protected":false,"id_str":"351563676","notifications":false,"profile_background_tile":true,"screen_name":"vemquicandu","name":"Capit\u00e3o Caverna","default_profile":false,"listed_count":263,"location":"no beco no buteco de um bar","show_all_inline_media":false,"contributors_enabled":false,"following":true,"geo_enabled":false,"utc_offset":-14400,"profile_link_color":"de0909","description":"ex prostituta, ex presidiario, ex dorgado. AGORA SOU RYCO E MINHA VIDA \u00c9 UM LUXO! e ainda tinha gente que fala que eu to na pior. ps: s\u00f3 aceito com scrap u_\u00fa kk","profile_sidebar_border_color":"fafafa","url":null,"time_zone":"Santiago","default_profile_image":false,"statuses_count":2229,"profile_use_background_image":true,"verified":false,"favourites_count":281,"friends_count":452,"profile_background_color":"f7f9fa","is_translator":false,"profile_background_image_url":"http:\/\/a1.twimg.com\/profile_background_images\/308785326\/avenged-seven-fold.jpg","created_at":"Tue Aug 09 12:38:31 +0000 2011","followers_count":976,"follow_request_sent":false,"lang":"pt","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/308785326\/avenged-seven-fold.jpg","id":351563676,"profile_text_color":"333333","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1495621875\/lilipe_normal.jpg","profile_image_url":"http:\/\/a2.twimg.com\/profile_images\/1495621875\/lilipe_normal.jpg"},"favorited":false,"in_reply_to_status_id_str":null,"geo":null,"in_reply_to_screen_name":null,"in_reply_to_user_id_str":null,"coordinates":null,"in_reply_to_user_id":null,"source":"web","created_at":"Sat Sep 03 21:30:44 +0000 2011","entities":{"user_mentions":[],"urls":[],"hashtags":[]},"contributors":null,"retweeted":false,"retweet_count":0,"id":110102450614181888,"place":null,"text":"twitter ta parad\u00e3o","result_category":"recent"},{"id_str":"110102450559651841","in_reply_to_status_id":null,"truncated":false,"user":{"profile_sidebar_fill_color":"DDEEF6","protected":false,"id_str":"360252951","notifications":null,"profile_background_tile":false,"screen_name":"shesignorant","name":"Nan","default_profile":true,"listed_count":0,"location":"","show_all_inline_media":false,"contributors_enabled":false,"following":null,"geo_enabled":false,"utc_offset":null,"profile_link_color":"0084B4","description":"","profile_sidebar_border_color":"C0DEED","url":null,"time_zone":null,"default_profile_image":false,"statuses_count":1048,"profile_use_background_image":true,"verified":false,"favourites_count":0,"friends_count":2,"profile_background_color":"C0DEED","is_translator":false,"profile_background_image_url":"http:\/\/a0.twimg.com\/images\/themes\/theme1\/bg.png","created_at":"Mon Aug 22 22:57:18 +0000 2011","followers_count":1,"follow_request_sent":null,"lang":"pt","profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme1\/bg.png","id":360252951,"profile_text_color":"333333","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1522354181\/hees_normal.png","profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1522354181\/hees_normal.png"},"favorited":false,"possibly_sensitive":false,"in_reply_to_status_id_str":null,"geo":null,"in_reply_to_screen_name":null,"in_reply_to_user_id_str":null,"coordinates":null,"in_reply_to_user_id":null,"source":"\u003Ca href=\"http:\/\/www.tweetdeck.com\" rel=\"nofollow\"\u003ETweetDeck\u003C\/a\u003E","created_at":"Sat Sep 03 21:30:44 +0000 2011","entities":{"user_mentions":[{"name":"Fanfic Obsession","screen_name":"fanficobsession","id_str":"89702318","indices":[10,26],"id":89702318},{"name":"Taste Of Ink Store","screen_name":"tasteofinkstore","id_str":"45738466","indices":[31,47],"id":45738466}],"urls":[{"display_url":"kingo.to\/MJx","expanded_url":"http:\/\/kingo.to\/MJx","url":"http:\/\/t.co\/MFstcIo","indices":[84,103]}],"hashtags":[]},"contributors":null,"retweeted":false,"retweet_count":0,"id":110102450559651841,"place":null,"text":"Eu sigo o @fanficobsession e a @tasteofinkstore e quero ganhar o Kit 01 de bottons! http:\/\/t.co\/MFstcIo twitter","result_category":"recent"},{"id_str":"110102450240888832","in_reply_to_status_id":110101691038306304,"truncated":false,"user":{"profile_sidebar_fill_color":"ffffff","protected":false,"id_str":"340238592","notifications":null,"profile_background_tile":true,"screen_name":"AnaisWatson","name":"Ana\u00efs Gomez-Watson \u262e","default_profile":false,"listed_count":1,"location":"#Poufsoufflepower \u03df","show_all_inline_media":false,"contributors_enabled":false,"following":null,"geo_enabled":true,"utc_offset":-10800,"profile_link_color":"f07b5d","description":"Ana\u00efs 16 yo, Jenny is my love #heartTeam. Being myself in that fake world. Second twitter ; Potter head , selenator and belieber. Until the very end \u03df","profile_sidebar_border_color":"e8e8e8","url":"http:\/\/iownyournight.tumblr.com\/","time_zone":"Greenland","default_profile_image":false,"statuses_count":1160,"profile_use_background_image":true,"verified":false,"favourites_count":3,"friends_count":24,"profile_background_color":"c0deed","is_translator":false,"profile_background_image_url":"http:\/\/a0.twimg.com\/profile_background_images\/323685091\/tumblr_looi6k1Vn01qderwco1_500.jpg","created_at":"Fri Jul 22 11:07:30 +0000 2011","followers_count":27,"follow_request_sent":null,"lang":"fr","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/323685091\/tumblr_looi6k1Vn01qderwco1_500.jpg","id":340238592,"profile_text_color":"333333","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1525293982\/for_twitter_1_normal.png","profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1525293982\/for_twitter_1_normal.png"},"favorited":false,"in_reply_to_status_id_str":"110101691038306304","geo":null,"in_reply_to_screen_name":"Poufsouffle_","in_reply_to_user_id_str":"349194144","coordinates":null,"in_reply_to_user_id":349194144,"source":"\u003Ca href=\"http:\/\/mobile.twitter.com\" rel=\"nofollow\"\u003EMobile Web\u003C\/a\u003E","created_at":"Sat Sep 03 21:30:44 +0000 2011","entities":{"user_mentions":[{"name":"Pomona Chourave","screen_name":"Poufsouffle_","id_str":"349194144","indices":[0,13],"id":349194144}],"urls":[],"hashtags":[]},"contributors":null,"retweeted":false,"retweet_count":0,"id":110102450240888832,"place":null,"text":"@Poufsouffle_ - TC, le nombre de followers qui importe tant. \u00c7a m'\u00e9nerve aussi d'o\u00f9 mon recul sur un twitter plus personnel -","result_category":"recent"},{"truncated":false,"favorited":false,"possibly_sensitive":false,"in_reply_to_status_id_str":null,"in_reply_to_screen_name":null,"in_reply_to_user_id_str":null,"in_reply_to_user_id":null,"contributors":null,"geo":null,"user":{"listed_count":4,"protected":false,"show_all_inline_media":true,"contributors_enabled":false,"geo_enabled":true,"notifications":false,"profile_link_color":"0099CC","screen_name":"Alilicita","name":"Ali Le\u00f3n D\u00edaz","profile_sidebar_border_color":"fff8ad","location":"Lambar\u00e9-Paraguay","following":true,"time_zone":"Santiago","utc_offset":-14400,"description":"26\/ABR, Tauro, Lic. en Administraci\u00f3n de Empresas, #CCP1912 y...no tengo nada contra ellos,la rabia es contra el tiempo por ponerte junto a mi..tarde..","default_profile_image":false,"statuses_count":6526,"profile_use_background_image":true,"url":"http:\/\/www.facebook.com\/ali.leondiaz","verified":false,"favourites_count":4,"friends_count":324,"profile_background_color":"FFF04D","is_translator":false,"profile_background_image_url":"http:\/\/a3.twimg.com\/profile_background_images\/312913794\/felinos__56_.jpg","followers_count":260,"follow_request_sent":false,"profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/312913794\/felinos__56_.jpg","created_at":"Mon Jan 25 15:35:59 +0000 2010","profile_text_color":"333333","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1515384610\/Foto0224_normal.jpg","lang":"es","profile_sidebar_fill_color":"f6ffd1","id":108322421,"id_str":"108322421","default_profile":false,"profile_background_tile":true,"profile_image_url":"http:\/\/a3.twimg.com\/profile_images\/1515384610\/Foto0224_normal.jpg"},"retweeted":false,"retweet_count":0,"coordinates":null,"source":"\u003Ca href=\"http:\/\/twitdat.com\" rel=\"nofollow\"\u003Etwitdat\u003C\/a\u003E","created_at":"Sat Sep 03 21:30:44 +0000 2011","entities":{"user_mentions":[{"name":"TwitDat","screen_name":"twitdatcom","indices":[56,67],"id":253174959,"id_str":"253174959"}],"hashtags":[],"urls":[{"display_url":"twitdat.com\/tools","expanded_url":"http:\/\/twitdat.com\/tools","url":"http:\/\/t.co\/Yl8DewV","indices":[32,51]}]},"id":110102449922121728,"id_str":"110102449922121728","place":null,"in_reply_to_status_id":null,"text":"Test de Reciprocidad en Twitter http:\/\/t.co\/Yl8DewV v\u00eda @twitdatcom","result_category":"recent"},{"id_str":"110102449896947712","in_reply_to_status_id":null,"truncated":false,"user":{"profile_sidebar_fill_color":"","protected":false,"id_str":"172176570","notifications":false,"profile_background_tile":true,"screen_name":"bela_lopes2","name":"Isabela Lopes","listed_count":0,"location":"","show_all_inline_media":false,"contributors_enabled":false,"following":false,"geo_enabled":true,"utc_offset":-14400,"profile_link_color":"cb81de","description":"","profile_sidebar_border_color":"ffffff","url":"http:\/\/www.facebook.com\/IsaahLopes","time_zone":"Santiago","default_profile_image":false,"statuses_count":413,"profile_use_background_image":true,"verified":false,"favourites_count":4,"friends_count":195,"profile_background_color":"e05ee0","is_translator":false,"default_profile":false,"profile_background_image_url":"http:\/\/a2.twimg.com\/profile_background_images\/315191776\/190448_200664266619663_100000282739711_696335_665848_a.jpg","created_at":"Thu Jul 29 02:28:42 +0000 2010","followers_count":54,"follow_request_sent":false,"lang":"pt","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/315191776\/190448_200664266619663_100000282739711_696335_665848_a.jpg","id":172176570,"profile_text_color":"e673e6","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1513465899\/foto0675_001_normal.jpg","profile_image_url":"http:\/\/a1.twimg.com\/profile_images\/1513465899\/foto0675_001_normal.jpg"},"favorited":false,"in_reply_to_status_id_str":null,"geo":null,"in_reply_to_screen_name":null,"in_reply_to_user_id_str":null,"coordinates":null,"in_reply_to_user_id":null,"source":"web","created_at":"Sat Sep 03 21:30:44 +0000 2011","entities":{"user_mentions":[],"urls":[],"hashtags":[]},"contributors":null,"retweeted":false,"retweet_count":0,"id":110102449896947712,"place":null,"text":"Hi twitter acabei de chegar do plus e ja estou saindo daqui a pouco tem mag u.u","result_category":"recent"},{"id_str":"110102449607548928","in_reply_to_status_id":null,"truncated":false,"user":{"profile_sidebar_fill_color":"","protected":false,"id_str":"199513730","notifications":false,"profile_background_tile":true,"screen_name":"News_MCyrus","name":"Noticias MileyCyrus.","listed_count":166,"location":"Toluka Lake \/ Nashville ","show_all_inline_media":false,"contributors_enabled":false,"following":true,"geo_enabled":false,"utc_offset":-10800,"profile_link_color":"bd3535","description":"Hechos, frases, fotos & todo lo que queres saber sobre Miley Ray Cyrus esta AQU\u00cd. Si te gustan los #News_MCyrus no dudes en seguirnos & dar RT. RADIANTE AMOR\u262e","profile_sidebar_border_color":"ffffff","url":"http:\/\/twitter.com\/#!\/News_MCyrus\/favorites","time_zone":"Buenos Aires","default_profile_image":false,"statuses_count":7114,"profile_use_background_image":true,"verified":false,"favourites_count":659,"friends_count":571,"profile_background_color":"613161","is_translator":false,"profile_background_image_url":"http:\/\/a2.twimg.com\/profile_background_images\/314729379\/violeta-chispas-wallpapers_7658_1920x1200.jpg","created_at":"Thu Oct 07 01:54:29 +0000 2010","followers_count":9020,"follow_request_sent":false,"lang":"es","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/314729379\/violeta-chispas-wallpapers_7658_1920x1200.jpg","id":199513730,"default_profile":false,"profile_text_color":"3C3940","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1518494905\/normal_009_normal.jpg","profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1518494905\/normal_009_normal.jpg"},"favorited":false,"in_reply_to_status_id_str":null,"geo":null,"in_reply_to_screen_name":null,"in_reply_to_user_id_str":null,"coordinates":null,"in_reply_to_user_id":null,"source":"web","created_at":"Sat Sep 03 21:30:44 +0000 2011","entities":{"user_mentions":[{"name":"Rouse & Chizi.","screen_name":"NickJOrgasm","id_str":"220459277","indices":[24,36],"id":220459277}],"urls":[],"hashtags":[]},"contributors":null,"retweeted":false,"retweet_count":0,"id":110102449607548928,"place":null,"text":"SIGAN A MI OTRO TWITTER @NickJOrgasm .. DOY FOLLOW BACK A TODOOS LOS QUE ME SIGUEN =]","result_category":"recent"},{"id_str":"110102449100042240","in_reply_to_status_id":110101177487736832,"truncated":false,"user":{"profile_sidebar_fill_color":"daf50c","protected":false,"id_str":"104629704","notifications":false,"profile_background_tile":true,"screen_name":"bettaThanYa_EX","name":"NOONIE\u2122","listed_count":0,"location":"Location Not Found ...","show_all_inline_media":false,"contributors_enabled":false,"following":true,"geo_enabled":false,"utc_offset":-21600,"profile_link_color":"33adcc","description":"i be in my own lil world felling like . . Fuck you \u2192 you \u2191 you \u2197 you \u2193 oh, & you\u2198 ! - dnt lurk .. HOE jus Follow '","profile_sidebar_border_color":"0ebff0","url":null,"time_zone":"Central Time (US & Canada)","default_profile_image":false,"statuses_count":7060,"profile_use_background_image":true,"verified":false,"favourites_count":72,"friends_count":386,"profile_background_color":"10ad61","is_translator":false,"profile_background_image_url":"http:\/\/a2.twimg.com\/profile_background_images\/266467400\/rinekacurry.jpg","created_at":"Wed Jan 13 22:39:54 +0000 2010","followers_count":430,"default_profile":false,"follow_request_sent":false,"lang":"en","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/266467400\/rinekacurry.jpg","id":104629704,"profile_text_color":"f02bf0","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1515615525\/image_normal.jpg","profile_image_url":"http:\/\/a2.twimg.com\/profile_images\/1515615525\/image_normal.jpg"},"favorited":false,"in_reply_to_status_id_str":"110101177487736832","geo":null,"in_reply_to_screen_name":"Tavia_Danielle","in_reply_to_user_id_str":"230065008","coordinates":null,"in_reply_to_user_id":230065008,"source":"web","created_at":"Sat Sep 03 21:30:44 +0000 2011","entities":{"user_mentions":[{"name":"Tavia Russell","screen_name":"Tavia_Danielle","id_str":"230065008","indices":[0,15],"id":230065008}],"urls":[],"hashtags":[]},"contributors":null,"retweeted":false,"retweet_count":0,"id":110102449100042240,"place":null,"text":"@Tavia_Danielle bitch dnt keep saying you not gne fuss on twitter but yet you still posting shit !!!","result_category":"recent"},{"id_str":"110102448923869184","in_reply_to_status_id":null,"truncated":false,"user":{"profile_sidebar_fill_color":"f7f4f6","protected":false,"id_str":"95950724","notifications":false,"profile_background_tile":true,"screen_name":"bellahidalgo","name":"Isabella Hidalgo","listed_count":0,"location":"","show_all_inline_media":false,"contributors_enabled":false,"following":false,"geo_enabled":false,"utc_offset":-10800,"profile_link_color":"f51eb1","description":"","profile_sidebar_border_color":"ff00cc","url":null,"time_zone":"Greenland","default_profile_image":false,"statuses_count":1792,"profile_use_background_image":true,"default_profile":false,"verified":false,"favourites_count":14,"friends_count":78,"profile_background_color":"ff03cd","is_translator":false,"profile_background_image_url":"http:\/\/a3.twimg.com\/profile_background_images\/294789691\/tumblr_l13v25Ujet1qajhpuo1_500.jpg","created_at":"Thu Dec 10 17:59:33 +0000 2009","followers_count":77,"follow_request_sent":false,"lang":"pt","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/294789691\/tumblr_l13v25Ujet1qajhpuo1_500.jpg","id":95950724,"profile_text_color":"000000","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1441175861\/PQAAAJff1q2whMis3_AoguHrmzVkson0kPdvSivgdrcswwzS26fRlyazLhUV8Em9BxBcVrgtcj8Yv8PpgWKc2iDtIGMAm1T1UAh4nNdMyMN4p6PODOYqiZY4b2oE_normal.jpg","profile_image_url":"http:\/\/a3.twimg.com\/profile_images\/1441175861\/PQAAAJff1q2whMis3_AoguHrmzVkson0kPdvSivgdrcswwzS26fRlyazLhUV8Em9BxBcVrgtcj8Yv8PpgWKc2iDtIGMAm1T1UAh4nNdMyMN4p6PODOYqiZY4b2oE_normal.jpg"},"favorited":false,"in_reply_to_status_id_str":null,"geo":null,"in_reply_to_screen_name":null,"in_reply_to_user_id_str":null,"coordinates":null,"in_reply_to_user_id":null,"source":"web","created_at":"Sat Sep 03 21:30:44 +0000 2011","entities":{"user_mentions":[],"urls":[],"hashtags":[]},"contributors":null,"retweeted":false,"retweet_count":0,"id":110102448923869184,"place":null,"text":"aiai descobri que minha irm\u00e3 tava mexendo no meu twitter u-u","result_category":"recent"},{"id_str":"110102448873537537","in_reply_to_status_id":null,"truncated":false,"user":{"profile_sidebar_fill_color":"ffffff","protected":false,"id_str":"240560217","notifications":null,"profile_background_tile":false,"screen_name":"CSImegan","name":"Megan Carter","default_profile":false,"listed_count":1,"location":"Carmel, IN","show_all_inline_media":false,"contributors_enabled":false,"following":null,"geo_enabled":false,"utc_offset":-18000,"profile_link_color":"93A644","description":"Pursuing my Masters in Forensic Biology. Purdue grad. Foodie. Avid reader. Christian. Sports fanatic. Random fact enthusiast. I love my hubby and 2 furry sons!","profile_sidebar_border_color":"eeeeee","url":null,"time_zone":"Indiana (East)","default_profile_image":false,"statuses_count":331,"profile_use_background_image":true,"verified":false,"favourites_count":0,"friends_count":363,"profile_background_color":"B2DFDA","is_translator":false,"profile_background_image_url":"http:\/\/a1.twimg.com\/images\/themes\/theme13\/bg.gif","created_at":"Thu Jan 20 06:02:09 +0000 2011","followers_count":91,"follow_request_sent":null,"lang":"en","profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme13\/bg.gif","id":240560217,"profile_text_color":"333333","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1221377599\/SAM_1222_normal.JPG","profile_image_url":"http:\/\/a2.twimg.com\/profile_images\/1221377599\/SAM_1222_normal.JPG"},"favorited":false,"possibly_sensitive":false,"in_reply_to_status_id_str":null,"geo":null,"in_reply_to_screen_name":null,"in_reply_to_user_id_str":null,"coordinates":null,"in_reply_to_user_id":null,"source":"\u003Ca href=\"http:\/\/www.yelp.com\/\" rel=\"nofollow\"\u003EYelp\u003C\/a\u003E","created_at":"Sat Sep 03 21:30:44 +0000 2011","entities":{"user_mentions":[],"urls":[{"display_url":"bit.ly\/pMjZQy","expanded_url":"http:\/\/bit.ly\/pMjZQy","url":"http:\/\/t.co\/nvDM2ug","indices":[68,87]}],"hashtags":[{"indices":[62,67],"text":"Yelp"}]},"contributors":null,"retweeted":false,"retweet_count":0,"id":110102448873537537,"place":null,"text":"I checked in at Embassy Suites Hotel (4554 Lake Forest Dr) on #Yelp http:\/\/t.co\/nvDM2ug","result_category":"recent"},{"id_str":"110102448596729856","in_reply_to_status_id":null,"truncated":false,"user":{"profile_sidebar_fill_color":"DDEEF6","protected":false,"id_str":"105869117","notifications":false,"profile_background_tile":false,"screen_name":"OmegaAudioVideo","name":"OmegaAudioVideo","listed_count":29,"location":"London, Ontario, Canada","show_all_inline_media":false,"contributors_enabled":false,"following":true,"geo_enabled":false,"utc_offset":-18000,"profile_link_color":"0084B4","description":"We are a premiere Custom AudioVisual company in London, ON. We match the technology you want, with your lifestyle and your budget! - Tweets by Matt Scott, Pres.","profile_sidebar_border_color":"C0DEED","url":"http:\/\/www.OmegaAudio.net","time_zone":"Eastern Time (US & Canada)","default_profile_image":false,"statuses_count":4273,"profile_use_background_image":true,"verified":false,"favourites_count":2,"friends_count":415,"profile_background_color":"C0DEED","is_translator":false,"profile_background_image_url":"http:\/\/a2.twimg.com\/profile_background_images\/289421859\/OAVtwitBG.jpg","created_at":"Sun Jan 17 19:30:24 +0000 2010","followers_count":389,"default_profile":false,"follow_request_sent":false,"lang":"en","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/289421859\/OAVtwitBG.jpg","id":105869117,"profile_text_color":"333333","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1338877809\/Logo_normal.jpg","profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1338877809\/Logo_normal.jpg"},"favorited":false,"possibly_sensitive":false,"in_reply_to_status_id_str":null,"geo":null,"in_reply_to_screen_name":null,"in_reply_to_user_id_str":null,"coordinates":null,"in_reply_to_user_id":null,"source":"\u003Ca href=\"http:\/\/www.tweetdeck.com\" rel=\"nofollow\"\u003ETweetDeck\u003C\/a\u003E","created_at":"Sat Sep 03 21:30:44 +0000 2011","entities":{"user_mentions":[{"name":"Jim Kelly","screen_name":"GeekInAwe","id_str":"322429893","indices":[68,78],"id":322429893}],"urls":[{"display_url":"deck.ly\/~2WX4z","expanded_url":"http:\/\/deck.ly\/~2WX4z","url":"http:\/\/t.co\/s1SbNXE","indices":[115,134]}],"hashtags":[]},"contributors":null,"retweeted":false,"retweet_count":0,"id":110102448596729856,"place":null,"text":"You stink, I'm kidding! Have fun man! You coming back for Cedia? RT @GeekInAwe: Yup! You read it correctly\u2026 (cont) http:\/\/t.co\/s1SbNXE","result_category":"recent"},{"id_str":"110102448332472320","in_reply_to_status_id":null,"truncated":false,"user":{"profile_sidebar_fill_color":"F6F6F6","protected":false,"id_str":"51282724","notifications":null,"profile_background_tile":false,"screen_name":"b_ferrera","name":"Bruno Reis","default_profile":false,"listed_count":0,"location":"Brazil..on my way to Canada","show_all_inline_media":false,"contributors_enabled":false,"following":null,"geo_enabled":true,"utc_offset":-10800,"profile_link_color":"038543","description":"Hi there! College in 2011, Brazil hopefully not for too long but soon in Canada","profile_sidebar_border_color":"EEEEEE","url":null,"time_zone":"Brasilia","default_profile_image":false,"statuses_count":1021,"profile_use_background_image":true,"verified":false,"favourites_count":5,"friends_count":117,"profile_background_color":"ACDED6","is_translator":false,"profile_background_image_url":"http:\/\/a1.twimg.com\/images\/themes\/theme18\/bg.gif","created_at":"Sat Jun 27 00:04:33 +0000 2009","followers_count":54,"follow_request_sent":null,"lang":"en","profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme18\/bg.gif","id":51282724,"profile_text_color":"333333","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1300101851\/DSC01425_normal.jpg","profile_image_url":"http:\/\/a1.twimg.com\/profile_images\/1300101851\/DSC01425_normal.jpg"},"favorited":false,"in_reply_to_status_id_str":null,"geo":null,"in_reply_to_screen_name":null,"in_reply_to_user_id_str":null,"coordinates":null,"in_reply_to_user_id":null,"source":"\u003Ca href=\"http:\/\/twitter.com\/#!\/download\/iphone\" rel=\"nofollow\"\u003ETwitter for iPhone\u003C\/a\u003E","created_at":"Sat Sep 03 21:30:43 +0000 2011","entities":{"user_mentions":[],"urls":[],"hashtags":[]},"contributors":null,"retweeted":false,"retweet_count":0,"id":110102448332472320,"place":null,"text":"Alguem conhece um twitter que zoa corinthians?? Pq tem algumas pessoas q ficam retweeting uns tweets que me irritam demaais!!","result_category":"recent"},{"id_str":"110102448286339072","in_reply_to_status_id":null,"truncated":false,"user":{"profile_sidebar_fill_color":"f0f073","protected":false,"id_str":"185890956","notifications":false,"profile_background_tile":false,"screen_name":"PlayaMiaBeach","name":"Playa Mia Cozumel","listed_count":1,"location":"Cozumel, M\u00e9xico","show_all_inline_media":false,"contributors_enabled":false,"following":true,"geo_enabled":false,"utc_offset":null,"profile_link_color":"b35c00","description":"Live a memorable experience at the Mexican Caribbean in one of the finest beach clubs in Cozumel. ","profile_sidebar_border_color":"ebcf2f","url":"http:\/\/www.playamiacozumel.com\/","time_zone":null,"default_profile_image":false,"statuses_count":508,"profile_use_background_image":true,"default_profile":false,"verified":false,"favourites_count":0,"friends_count":410,"profile_background_color":"f7f794","is_translator":false,"profile_background_image_url":"http:\/\/a2.twimg.com\/profile_background_images\/266405327\/back_twitter.jpg","created_at":"Thu Sep 02 02:20:29 +0000 2010","followers_count":247,"follow_request_sent":false,"lang":"en","profile_background_image_url_https":"https:\/\/si0.twimg.com\/profile_background_images\/266405327\/back_twitter.jpg","id":185890956,"profile_text_color":"eb7e2a","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1118774346\/Playa_Mia__3__normal.jpg","profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/1118774346\/Playa_Mia__3__normal.jpg"},"favorited":false,"possibly_sensitive":false,"in_reply_to_status_id_str":null,"geo":null,"in_reply_to_screen_name":null,"in_reply_to_user_id_str":null,"coordinates":null,"in_reply_to_user_id":null,"source":"web","created_at":"Sat Sep 03 21:30:44 +0000 2011","entities":{"user_mentions":[{"name":"Playa Mia Cozumel","screen_name":"PlayaMiaBeach","id_str":"185890956","indices":[13,27],"id":185890956}],"urls":[],"media":[{"type":"photo","id_str":"110102448290533376","display_url":"pic.twitter.com\/bH36L0s","expanded_url":"http:\/\/twitter.com\/PlayaMiaBeach\/status\/110102448286339072\/photo\/1","media_url_https":"https:\/\/p.twimg.com\/AYcpl-dCEAAOc3o.jpg","url":"http:\/\/t.co\/bH36L0s","indices":[109,128],"sizes":{"small":{"h":340,"w":340,"resize":"fit"},"large":{"h":480,"w":480,"resize":"fit"},"thumb":{"h":150,"w":150,"resize":"crop"},"medium":{"h":480,"w":480,"resize":"fit"}},"id":110102448290533376,"media_url":"http:\/\/p.twimg.com\/AYcpl-dCEAAOc3o.jpg"}],"hashtags":[]},"contributors":null,"retweeted":false,"retweet_count":0,"id":110102448286339072,"place":null,"text":"In behalf of @PlayaMiaBeach we wanted to thank everyone for following us. We wish you a wonderful weekend!!! http:\/\/t.co\/bH36L0s","result_category":"recent"},{"id_str":"110102448273760256","in_reply_to_status_id":null,"truncated":false,"user":{"profile_sidebar_fill_color":"DDEEF6","protected":false,"id_str":"365993812","notifications":false,"profile_background_tile":false,"screen_name":"Bieltmadalena","name":"Gabriel Ton Madalena","listed_count":0,"location":null,"show_all_inline_media":false,"contributors_enabled":false,"following":false,"geo_enabled":false,"utc_offset":null,"profile_link_color":"0084B4","description":null,"default_profile":true,"profile_sidebar_border_color":"C0DEED","url":null,"time_zone":null,"default_profile_image":true,"statuses_count":14,"profile_use_background_image":true,"verified":false,"favourites_count":0,"friends_count":36,"profile_background_color":"C0DEED","is_translator":false,"profile_background_image_url":"http:\/\/a0.twimg.com\/images\/themes\/theme1\/bg.png","created_at":"Thu Sep 01 11:33:14 +0000 2011","followers_count":4,"follow_request_sent":false,"lang":"en","profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme1\/bg.png","id":365993812,"profile_text_color":"333333","profile_image_url_https":"https:\/\/si0.twimg.com\/sticky\/default_profile_images\/default_profile_2_normal.png","profile_image_url":"http:\/\/a1.twimg.com\/sticky\/default_profile_images\/default_profile_2_normal.png"},"favorited":false,"in_reply_to_status_id_str":null,"geo":null,"in_reply_to_screen_name":null,"in_reply_to_user_id_str":null,"coordinates":null,"in_reply_to_user_id":null,"source":"web","created_at":"Sat Sep 03 21:30:43 +0000 2011","entities":{"user_mentions":[],"urls":[],"hashtags":[]},"contributors":null,"retweeted":false,"retweet_count":0,"id":110102448273760256,"place":null,"text":"meu cunhado acha twitter coisa de besta","result_category":"recent"},{"id_str":"110102447757869056","in_reply_to_status_id":null,"truncated":false,"user":{"profile_sidebar_fill_color":"DDEEF6","protected":false,"id_str":"41335311","notifications":null,"profile_background_tile":false,"screen_name":"rico82","name":"Rico Coutain","default_profile":true,"listed_count":2,"location":"London, England","show_all_inline_media":false,"contributors_enabled":false,"following":null,"geo_enabled":false,"utc_offset":0,"profile_link_color":"0084B4","description":"","profile_sidebar_border_color":"C0DEED","url":null,"time_zone":"London","default_profile_image":false,"statuses_count":1019,"profile_use_background_image":true,"verified":false,"favourites_count":5,"friends_count":67,"profile_background_color":"C0DEED","is_translator":false,"profile_background_image_url":"http:\/\/a0.twimg.com\/images\/themes\/theme1\/bg.png","created_at":"Wed May 20 10:50:39 +0000 2009","followers_count":69,"follow_request_sent":null,"lang":"en","profile_background_image_url_https":"https:\/\/si0.twimg.com\/images\/themes\/theme1\/bg.png","id":41335311,"profile_text_color":"333333","profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/1385690568\/_JM__20_20Rico_20_20_GD__normal.jpg","profile_image_url":"http:\/\/a2.twimg.com\/profile_images\/1385690568\/_JM__20_20Rico_20_20_GD__normal.jpg"},"favorited":false,"in_reply_to_status_id_str":null,"geo":null,"in_reply_to_screen_name":null,"in_reply_to_user_id_str":null,"coordinates":null,"in_reply_to_user_id":null,"source":"\u003Ca href=\"http:\/\/blackberry.com\/twitter\" rel=\"nofollow\"\u003ETwitter for BlackBerry\u00ae\u003C\/a\u003E","created_at":"Sat Sep 03 21:30:43 +0000 2011","entities":{"user_mentions":[{"name":"Delphina James","screen_name":"Panness","id_str":"130576543","indices":[1,9],"id":130576543}],"urls":[],"hashtags":[{"indices":[92,102],"text":"Sharezies"}]},"contributors":null,"retweeted":false,"retweet_count":0,"id":110102447757869056,"place":null,"text":"\"@Panness: TWITTER-CREW! I JUST FOUND \u00a35 IN MY WINTER-COAT....Now #ThatsWhatImTalkingAbout\" #Sharezies!","result_category":"recent"}],"served_by_blender":false,"error":null,"next_page":null}
7 spec/twitter/api/undocumented_spec.rb
View
@@ -91,6 +91,13 @@
expect(tweet_count).to be_an Integer
expect(tweet_count).to eq 13845465
end
+ context "with a URI" do
+ it "requests the correct resource" do
+ uri = URI.parse("http://twitter.com")
+ @client.tweet_count(uri)
+ expect(a_request(:get, "https://cdn.api.twitter.com/1/urls/count.json").with(:query => {:url => "http://twitter.com"})).to have_been_made
+ end
+ end
end
end
74 spec/twitter/entity/uri_spec.rb
View
@@ -0,0 +1,74 @@
+require 'helper'
+
+describe Twitter::Entity::URI do
+
+ describe "#display_uri" do
+ it "returns a URI when the display_url is set" do
+ uri = Twitter::Entity::URI.new(:display_url => "https://github.com/sferik")
+ expect(uri.display_uri).to be_a URI
+ expect(uri.display_uri.to_s).to eq "https://github.com/sferik"
+ end
+ it "returns nil when the display_url is not set" do
+ uri = Twitter::Entity::URI.new
+ expect(uri.display_uri).to be_nil
+ end
+ end
+
+ describe "#display_uri?" do
+ it "returns true when the display_url is set" do
+ uri = Twitter::Entity::URI.new(:display_url => "https://github.com/sferik")
+ expect(uri.display_uri).to be_true
+ end
+ it "returns false when the display_url is not set" do
+ uri = Twitter::Entity::URI.new
+ expect(uri.display_uri).to be_false
+ end
+ end
+
+ describe "#expanded_uri" do
+ it "returns a URI when the expanded_url is set" do
+ uri = Twitter::Entity::URI.new(:expanded_url => "https://github.com/sferik")
+ expect(uri.expanded_uri).to be_a URI
+ expect(uri.expanded_uri.to_s).to eq "https://github.com/sferik"
+ end
+ it "returns nil when the expanded_url is not set" do
+ uri = Twitter::Entity::URI.new
+ expect(uri.expanded_uri).to be_nil
+ end
+ end
+
+ describe "#expanded_uri?" do
+ it "returns true when the expanded_url is set" do
+ uri = Twitter::Entity::URI.new(:expanded_url => "https://github.com/sferik")
+ expect(uri.expanded_uri).to be_true
+ end
+ it "returns false when the expanded_url is not set" do
+ uri = Twitter::Entity::URI.new
+ expect(uri.expanded_uri).to be_false
+ end
+ end
+
+ describe "#uri" do
+ it "returns a URI when the url is set" do
+ uri = Twitter::Entity::URI.new(:url => "https://github.com/sferik")
+ expect(uri.uri).to be_a URI
+ expect(uri.uri.to_s).to eq "https://github.com/sferik"
+ end
+ it "returns nil when the url is not set" do
+ uri = Twitter::Entity::URI.new
+ expect(uri.uri).to be_nil
+ end
+ end
+
+ describe "#uri?" do
+ it "returns true when the url is set" do
+ uri = Twitter::Entity::URI.new(:url => "https://github.com/sferik")
+ expect(uri.uri).to be_true
+ end
+ it "returns false when the url is not set" do
+ uri = Twitter::Entity::URI.new
+ expect(uri.uri).to be_false
+ end
+ end
+
+end
34 spec/twitter/list_spec.rb
View
@@ -22,44 +22,44 @@
describe "#created_at" do
it "returns a Time when created_at is set" do
- user = Twitter::List.new(:id => 8863586, :created_at => "Mon Jul 16 12:59:01 +0000 2007")
- expect(user.created_at).to be_a Time
+ list = Twitter::List.new(:id => 8863586, :created_at => "Mon Jul 16 12:59:01 +0000 2007")
+ expect(list.created_at).to be_a Time
end
it "returns nil when created_at is not set" do
- user = Twitter::List.new(:id => 8863586)
- expect(user.created_at).to be_nil
+ list = Twitter::List.new(:id => 8863586)
+ expect(list.created_at).to be_nil
end
end
describe "#created?" do
it "returns true when created_at is set" do
- user = Twitter::List.new(:id => 8863586, :created_at => "Mon Jul 16 12:59:01 +0000 2007")
- expect(user.created?).to be_true
+ list = Twitter::List.new(:id => 8863586, :created_at => "Mon Jul 16 12:59:01 +0000 2007")
+ expect(list.created?).to be_true
end
it "returns false when created_at is not set" do
- user = Twitter::List.new(:id => 8863586)
- expect(user.created?).to be_false
+ list = Twitter::List.new(:id => 8863586)
+ expect(list.created?).to be_false
end
end
- describe "#members_url" do
- it "returns the URL to the list members" do
+ describe "#members_uri" do
+ it "returns the URI to the list members" do
list = Twitter::List.new(:id => 8863586, :slug => "presidents", :user => {:id => 7505382, :screen_name => "sferik"})
- expect(list.members_url).to eq "https://twitter.com/sferik/presidents/members"
+ expect(list.members_uri.to_s).to eq "https://twitter.com/sferik/presidents/members"
end
end
- describe "#subscribers_url" do
- it "returns the URL to the list subscribers" do
+ describe "#subscribers_uri" do
+ it "returns the URI to the list subscribers" do
list = Twitter::List.new(:id => 8863586, :slug => "presidents", :user => {:id => 7505382, :screen_name => "sferik"})
- expect(list.subscribers_url).to eq "https://twitter.com/sferik/presidents/subscribers"
+ expect(list.subscribers_uri.to_s).to eq "https://twitter.com/sferik/presidents/subscribers"
end
end
- describe "#url" do
- it "returns the URL to the list" do
+ describe "#uri" do
+ it "returns the URI to the list" do
list = Twitter::List.new(:id => 8863586, :slug => "presidents", :user => {:id => 7505382, :screen_name => "sferik"})
- expect(list.url).to eq "https://twitter.com/sferik/presidents"
+ expect(list.uri.to_s).to eq "https://twitter.com/sferik/presidents"
end
end
119 spec/twitter/media/photo_spec.rb
View
@@ -4,8 +4,8 @@
describe "#==" do
it "returns true when objects IDs are the same" do
- photo = Twitter::Media::Photo.new(:id => 1, :url => "foo")
- other = Twitter::Media::Photo.new(:id => 1, :url => "bar")
+ photo = Twitter::Media::Photo.new(:id => 1)
+ other = Twitter::Media::Photo.new(:id => 1)
expect(photo == other).to be_true
end
it "returns false when objects IDs are different" do
@@ -32,4 +32,119 @@
end
end
+ describe "#display_uri" do
+ it "returns a URI when the display_url is set" do
+ photo = Twitter::Media::Photo.new(:id => 1, :display_url => "http://pbs.twimg.com/media/BQD6MPOCEAAbCH0.png")
+ expect(photo.display_uri).to be_a URI
+ expect(photo.display_uri.to_s).to eq "http://pbs.twimg.com/media/BQD6MPOCEAAbCH0.png"
+ end
+ it "returns nil when the display_url is not set" do
+ photo = Twitter::Media::Photo.new(:id => 1)
+ expect(photo.display_uri).to be_nil
+ end
+ end
+
+ describe "#display_uri?" do
+ it "returns true when the display_url is set" do
+ photo = Twitter::Media::Photo.new(:id => 1, :display_url => "http://pbs.twimg.com/media/BQD6MPOCEAAbCH0.png")
+ expect(photo.display_uri).to be_true
+ end
+ it "returns false when the display_url is not set" do
+ photo = Twitter::Media::Photo.new(:id => 1)
+ expect(photo.display_uri).to be_false
+ end
+ end
+
+ describe "#expanded_uri" do
+ it "returns a URI when the expanded_url is set" do
+ photo = Twitter::Media::Photo.new(:id => 1, :expanded_url => "http://pbs.twimg.com/media/BQD6MPOCEAAbCH0.png")
+ expect(photo.expanded_uri).to be_a URI
+ expect(photo.expanded_uri.to_s).to eq "http://pbs.twimg.com/media/BQD6MPOCEAAbCH0.png"
+ end
+ it "returns nil when the expanded_url is not set" do
+ photo = Twitter::Media::Photo.new(:id => 1)
+ expect(photo.expanded_uri).to be_nil
+ end
+ end
+
+ describe "#expanded_uri?" do
+ it "returns true when the expanded_url is set" do
+ photo = Twitter::Media::Photo.new(:id => 1, :expanded_url => "http://pbs.twimg.com/media/BQD6MPOCEAAbCH0.png")
+ expect(photo.expanded_uri).to be_true
+ end
+ it "returns false when the expanded_url is not set" do
+ photo = Twitter::Media::Photo.new(:id => 1)
+ expect(photo.expanded_uri).to be_false
+ end
+ end
+
+ describe "#media_uri" do
+ it "returns a URI when the media_url is set" do
+ photo = Twitter::Media::Photo.new(:id => 1, :media_url => "http://pbs.twimg.com/media/BQD6MPOCEAAbCH0.png")
+ expect(photo.media_uri).to be_a URI
+ expect(photo.media_uri.to_s).to eq "http://pbs.twimg.com/media/BQD6MPOCEAAbCH0.png"
+ end
+ it "returns nil when the media_url is not set" do
+ photo = Twitter::Media::Photo.new(:id => 1)
+ expect(photo.media_uri).to be_nil
+ end
+ end
+
+ describe "#media_uri?" do
+ it "returns true when the media_url is set" do
+ photo = Twitter::Media::Photo.new(:id => 1, :media_url => "http://pbs.twimg.com/media/BQD6MPOCEAAbCH0.png")
+ expect(photo.media_uri).to be_true
+ end
+ it "returns false when the media_url is not set" do
+ photo = Twitter::Media::Photo.new(:id => 1)
+ expect(photo.media_uri).to be_false
+ end
+ end
+
+ describe "#media_uri_https" do
+ it "returns a URI when the media_url_https is set" do
+ photo = Twitter::Media::Photo.new(:id => 1, :media_url_https => "http://pbs.twimg.com/media/BQD6MPOCEAAbCH0.png")
+ expect(photo.media_uri_https).to be_a URI
+ expect(photo.media_uri_https.to_s).to eq "http://pbs.twimg.com/media/BQD6MPOCEAAbCH0.png"
+ end
+ it "returns nil when the media_url_https is not set" do
+ photo = Twitter::Media::Photo.new(:id => 1)
+ expect(photo.media_uri_https).to be_nil
+ end
+ end
+
+ describe "#media_uri_https?" do
+ it "returns true when the media_url_https is set" do
+ photo = Twitter::Media::Photo.new(:id => 1, :media_url_https => "http://pbs.twimg.com/media/BQD6MPOCEAAbCH0.png")
+ expect(photo.media_uri_https).to be_true
+ end
+ it "returns false when the media_url_https is not set" do
+ photo = Twitter::Media::Photo.new(:id => 1)
+ expect(photo.media_uri_https).to be_false
+ end
+ end
+
+ describe "#uri" do
+ it "returns a URI when the url is set" do
+ photo = Twitter::Media::Photo.new(:id => 1, :url => "http://pbs.twimg.com/media/BQD6MPOCEAAbCH0.png")
+ expect(photo.uri).to be_a URI
+ expect(photo.uri.to_s).to eq "http://pbs.twimg.com/media/BQD6MPOCEAAbCH0.png"
+ end
+ it "returns nil when the url is not set" do
+ photo = Twitter::Media::Photo.new(:id => 1)
+ expect(photo.uri).to be_nil
+ end
+ end
+
+ describe "#uri?" do
+ it "returns true when the url is set" do
+ photo = Twitter::Media::Photo.new(:id => 1, :url => "http://pbs.twimg.com/media/BQD6MPOCEAAbCH0.png")
+ expect(photo.uri).to be_true
+ end
+ it "returns false when the url is not set" do
+ photo = Twitter::Media::Photo.new(:id => 1)
+ expect(photo.uri).to be_false
+ end
+ end
+
end
80 spec/twitter/oembed_spec.rb
View
@@ -2,15 +2,26 @@
describe Twitter::OEmbed do
- describe "#author_url" do
- it "returns the author's url" do
+ describe "#author_uri" do
+ it "returns a URI when the author_url is set" do
oembed = Twitter::OEmbed.new(:author_url => "https://twitter.com/sferik")
- expect(oembed.author_url).to eq "https://twitter.com/sferik"
+ expect(oembed.author_uri).to be_a URI
+ expect(oembed.author_uri.to_s).to eq "https://twitter.com/sferik"
end
+ it "returns nil when the author_uri is not set" do
+ oembed = Twitter::OEmbed.new
+ expect(oembed.author_uri).to be_nil
+ end
+ end
- it "returns nil when not set" do
- author_url = Twitter::OEmbed.new.author_url
- expect(author_url).to be_nil
+ describe "#author_uri?" do
+ it "returns true when the author_url is set" do
+ oembed = Twitter::OEmbed.new(:author_url => "https://twitter.com/sferik")
+ expect(oembed.author_uri?).to be_true
+ end
+ it "returns false when the author_uri is not set" do
+ oembed = Twitter::OEmbed.new
+ expect(oembed.author_uri?).to be_false
end
end
@@ -19,7 +30,6 @@
oembed = Twitter::OEmbed.new(:author_name => "Erik Michaels-Ober")
expect(oembed.author_name).to eq "Erik Michaels-Ober"
end
-
it "returns nil when not set" do
author_name = Twitter::OEmbed.new.author_name
expect(author_name).to be_nil
@@ -31,7 +41,6 @@
oembed = Twitter::OEmbed.new(:cache_age => "31536000000")
expect(oembed.cache_age).to eq "31536000000"
end
-
it "returns nil when not set" do
cache_age = Twitter::OEmbed.new.cache_age
expect(cache_age).to be_nil
@@ -43,12 +52,10 @@
oembed = Twitter::OEmbed.new(:height => 200)
expect(oembed.height).to eq 200
end
-
it "returns it as an Integer" do
oembed = Twitter::OEmbed.new(:height => 200)
expect(oembed.height).to be_an Integer
end
-
it "returns nil when not set" do
height = Twitter::OEmbed.new.height
expect(height).to be_nil
@@ -60,7 +67,6 @@
oembed = Twitter::OEmbed.new(:html => "<blockquote>all my <b>witty tweet</b> stuff here</blockquote>")
expect(oembed.html).to eq "<blockquote>all my <b>witty tweet</b> stuff here</blockquote>"
end
-
it "returns nil when not set" do
html = Twitter::OEmbed.new.html
expect(html).to be_nil
@@ -72,22 +78,32 @@
oembed = Twitter::OEmbed.new(:provider_name => "Twitter")
expect(oembed.provider_name).to eq "Twitter"
end
-
it "returns nil when not set" do
provider_name = Twitter::OEmbed.new.provider_name
expect(provider_name).to be_nil
end
end
- describe "#provider_url" do
- it "returns the provider_url" do
+ describe "#provider_uri" do
+ it "returns a URI when the provider_url is set" do
oembed = Twitter::OEmbed.new(:provider_url => "http://twitter.com")
- expect(oembed.provider_url).to eq "http://twitter.com"
+ expect(oembed.provider_uri).to be_a URI
+ expect(oembed.provider_uri.to_s).to eq "http://twitter.com"
+ end
+ it "returns nil when the provider_uri is not set" do
+ oembed = Twitter::OEmbed.new
+ expect(oembed.provider_uri).to be_nil
end
+ end
- it "returns nil when not set" do
- provider_url = Twitter::OEmbed.new.provider_url
- expect(provider_url).to be_nil
+ describe "#provider_uri?" do
+ it "returns true when the provider_url is set" do
+ oembed = Twitter::OEmbed.new(:provider_url => "https://twitter.com/sferik")
+ expect(oembed.provider_uri?).to be_true
+ end
+ it "returns false when the provider_uri is not set" do
+ oembed = Twitter::OEmbed.new
+ expect(oembed.provider_uri?).to be_false
end
end
@@ -96,7 +112,6 @@
oembed = Twitter::OEmbed.new(:type => "rich")
expect(oembed.type).to eq "rich"
end
-
it "returns nil when not set" do
type = Twitter::OEmbed.new.type
expect(type).to be_nil
@@ -108,27 +123,36 @@
oembed = Twitter::OEmbed.new(:width => 550)
expect(oembed.width).to eq 550
end
-
it "returns it as an Integer" do
oembed = Twitter::OEmbed.new(:width => 550)
expect(oembed.width).to be_an Integer
end
-
it "returns nil when not set" do
width = Twitter::OEmbed.new.width
expect(width).to be_nil
end
end
- describe "#url" do
- it "returns the url" do
+ describe "#uri" do
+ it "returns a URI when the url is set" do
oembed = Twitter::OEmbed.new(:url => "https://twitter.com/twitterapi/status/133640144317198338")
- expect(oembed.url).to eq "https://twitter.com/twitterapi/status/133640144317198338"
+ expect(oembed.uri).to be_a URI
+ expect(oembed.uri.to_s).to eq "https://twitter.com/twitterapi/status/133640144317198338"
+ end
+ it "returns nil when the url is not set" do
+ oembed = Twitter::OEmbed.new
+ expect(oembed.uri).to be_nil
end
+ end
- it "returns nil when not set" do
- url = Twitter::OEmbed.new.url
- expect(url).to be_nil
+ describe "#uri?" do
+ it "returns true when the url is set" do
+ oembed = Twitter::OEmbed.new(:url => "https://twitter.com/twitterapi/status/133640144317198338")
+ expect(oembed.uri?).to be_true
+ end
+ it "returns false when the url is not set" do
+ oembed = Twitter::OEmbed.new
+ expect(oembed.uri?).to be_false
end
end
@@ -137,10 +161,10 @@
oembed = Twitter::OEmbed.new(:version => "1.0")
expect(oembed.version).to eq "1.0"
end
-
it "returns nil when not set" do
version = Twitter::OEmbed.new.version
expect(version).to be_nil
end
end
+
end
23 spec/twitter/place_spec.rb
View
@@ -105,4 +105,27 @@
end
end
+ describe "#uri" do
+ it "returns a URI when the url is set" do
+ place = Twitter::Place.new(:id => "247f43d441defc03", :url => "https://api.twitter.com/1.1/geo/id/247f43d441defc03.json")
+ expect(place.uri).to be_a URI
+ expect(place.uri.to_s).to eq "https://api.twitter.com/1.1/geo/id/247f43d441defc03.json"
+ end
+ it "returns nil when the url is not set" do
+ place = Twitter::Place.new(:id => "247f43d441defc03")
+ expect(place.uri).to be_nil
+ end
+ end
+
+ describe "#uri?" do
+ it "returns true when the url is set" do
+ place = Twitter::Place.new(:id => "247f43d441defc03", :url => "https://api.twitter.com/1.1/geo/id/247f43d441defc03.json")
+ expect(place.uri).to be_true
+ end
+ it "returns false when the url is not set" do
+ place = Twitter::Place.new(:id => "247f43d441defc03")
+ expect(place.uri).to be_false
+ end
+ end
+
end
18 spec/twitter/search_results_spec.rb
View
@@ -119,22 +119,18 @@
end
describe "#next_results" do
- let(:next_results) {Twitter::SearchResults.new(:search_metadata => {:next_results => "?max_id=249279667666817023&q=%23freebandnames&count=4&include_entities=1&result_type=mixed"}).next_results}
it "returns a hash of query parameters" do
- expect(next_results).to be_a Hash
- end
- it "returns a max_id" do
- expect(next_results[:max_id]).to eq "249279667666817023"
+ search_results = Twitter::SearchResults.new(:search_metadata => {:next_results => "?max_id=249279667666817023&q=%23freebandnames&count=4&include_entities=1&result_type=mixed"})
+ expect(search_results.next_results).to be_a Hash
+ expect(search_results.next_results[:max_id]).to eq "249279667666817023"
end
end
- describe "#refresh_url" do
- let(:refresh_url) {Twitter::SearchResults.new(:search_metadata => {:refresh_url => "?since_id=249279667666817023&q=%23freebandnames&count=4&include_entities=1&result_type=recent"}).refresh_url}
+ describe "#refresh_results" do
it "returns a hash of query parameters" do
- expect(refresh_url).to be_a Hash
- end
- it "returns a since_id" do
- expect(refresh_url[:since_id]).to eq "249279667666817023"
+ search_results = Twitter::SearchResults.new(:search_metadata => {:refresh_url => "?since_id=249279667666817023&q=%23freebandnames&count=4&include_entities=1&result_type=recent"})
+ expect(search_results.refresh_results).to be_a Hash
+ expect(search_results.refresh_results[:since_id]).to eq "249279667666817023"
end
end
23 spec/twitter/trend_spec.rb
View
@@ -35,4 +35,27 @@
end
end
+ describe "#uri" do
+ it "returns a URI when the url is set" do
+ trend = Twitter::Trend.new(:url => "http://twitter.com/search/?q=%23sevenwordsaftersex")
+ expect(trend.uri).to be_a URI
+ expect(trend.uri.to_s).to eq "http://twitter.com/search/?q=%23sevenwordsaftersex"
+ end
+ it "returns nil when the url is not set" do
+ trend = Twitter::Trend.new
+ expect(trend.uri).to be_nil
+ end
+ end
+
+ describe "#uri?" do
+ it "returns true when the url is set" do
+ trend = Twitter::Trend.new(:url => "https://api.twitter.com/1.1/geo/id/247f43d441defc03.json")
+ expect(trend.uri?).to be_true
+ end
+ it "returns false when the url is not set" do
+ trend = Twitter::Trend.new
+ expect(trend.uri?).to be_false
+ end
+ end
+
end
32 spec/twitter/tweet_spec.rb
View
@@ -128,7 +128,7 @@
end
describe "#hashtags" do
- it "returns an Array of Entity::Hashtag when entities are set" do
+ it "returns an array of Entity::Hashtag when entities are set" do
hashtags_array = [
{
:text => "twitter",
@@ -257,7 +257,7 @@
end
describe "#symbols" do
- it "returns an Array of Entity::Symbol when symbols are set" do
+ it "returns an array of Entity::Symbol when symbols are set" do
symbols_array = [
{ :text => "PEP", :indices => [114, 118] },
{ :text => "COKE", :indices => [128, 133] }
@@ -279,8 +279,8 @@
end
end
- describe "#urls" do
- it "returns an Array of Entity::Url when entities are set" do
+ describe "#uris" do
+ it "returns an array of Entity::URIs when entities are set" do
urls_array = [
{
:url => "http://example.com/t.co",
@@ -289,15 +289,16 @@
:indices => [10, 33],
}
]
- urls = Twitter::Tweet.new(:id => 28669546014, :entities => {:urls => urls_array}).urls
- expect(urls).to be_an Array
- expect(urls.first).to be_a Twitter::Entity::Url
- expect(urls.first.indices).to eq [10, 33]
- expect(urls.first.display_url).to eq "example.com/expanded"
+ tweet = Twitter::Tweet.new(:id => 28669546014, :entities => {:urls => urls_array})
+ expect(tweet.uris).to be_an Array
+ expect(tweet.uris.first).to be_a Twitter::Entity::URI
+ expect(tweet.uris.first.indices).to eq [10, 33]
+ expect(tweet.uris.first.display_uri).to be_a URI
+ expect(tweet.uris.first.display_uri.to_s).to eq "example.com/expanded"
end
it "is empty when not set" do
- urls = Twitter::Tweet.new(:id => 28669546014).urls
- expect(urls).to be_empty
+ tweet = Twitter::Tweet.new(:id => 28669546014)
+ expect(tweet.uris).to be_empty
end
it "warns when not set" do
Twitter::Tweet.new(:id => 28669546014).urls
@@ -305,10 +306,11 @@
end
end
- describe "#url" do
- it "returns the URL to the tweet" do
+ describe "#uri" do
+ it "returns the URI to the tweet" do
tweet = Twitter::Tweet.new(:id => 28669546014, :user => {:id => 7505382, :screen_name => "sferik"})
- expect(tweet.url).to eq "https://twitter.com/sferik/status/28669546014"
+ expect(tweet.uri).to be_a URI
+ expect(tweet.uri.to_s).to eq "https://twitter.com/sferik/status/28669546014"
end
end
@@ -339,7 +341,7 @@
end
describe "#user_mentions" do
- it "returns an Array of Entity::UserMention when entities are set" do
+ it "returns an array of Entity::UserMention when entities are set" do
user_mentions_array = [
{
:screen_name => "sferik",
140 spec/twitter/user_spec.rb
View
@@ -42,8 +42,8 @@
end
end
- describe "#description_urls" do
- it "returns an Array of Entity::Url" do
+ describe "#description_uris" do
+ it "returns an array of Entity::URIs when entities are set" do
urls_array = [
{
:url => "http://example.com/t.co",
@@ -52,209 +52,209 @@
:indices => [10, 33],
}
]
- description_urls = Twitter::User.new(:id => 7505382, :entities => {:description => {:urls => urls_array}}).description_urls
- expect(description_urls).to be_an Array
- expect(description_urls.first).to be_a Twitter::Entity::Url
- expect(description_urls.first.indices).to eq [10, 33]
- expect(description_urls.first.display_url).to eq "example.com/expanded"
+ user = Twitter::User.new(:id => 7505382, :entities => {:description => {:urls => urls_array}})
+ expect(user.description_uris).to be_an Array
+ expect(user.description_uris.first).to be_a Twitter::Entity::URI
+ expect(user.description_uris.first.indices).to eq [10, 33]
+ expect(user.description_uris.first.display_uri.to_s).to eq "example.com/expanded"
end
it "is empty when not set" do
- description_urls = Twitter::User.new(:id => 7505382, :entities => {:description => {:urls => []}}).description_urls
- expect(description_urls).to be_empty
+ user = Twitter::User.new(:id => 7505382, :entities => {:description => {:urls => []}})
+ expect(user.description_uris).to be_empty
end
end
- describe "#profile_banner_url" do
- it "returns a String when profile_banner_url is set" do
+ describe "#profile_banner_uri" do
+ it "returns a URI when profile_banner_url is set" do
user = Twitter::User.new(:id => 7505382, :profile_banner_url => "https://si0.twimg.com/profile_banners/7505382/1348266581")
- expect(user.profile_banner_url).to be_a String
+ expect(user.profile_banner_uri).to be_a URI
end
- it "returns nil when created_at is not set" do
+ it "returns nil when profile_banner_uri is not set" do
user = Twitter::User.new(:id => 7505382)
- expect(user.profile_banner_url).to be_nil
+ expect(user.profile_banner_uri).to be_nil
end
it "returns the web-sized image" do
user = Twitter::User.new(:id => 7505382, :profile_banner_url => "https://si0.twimg.com/profile_banners/7505382/1348266581")
- expect(user.profile_banner_url).to eq "http://si0.twimg.com/profile_banners/7505382/1348266581/web"
+ expect(user.profile_banner_uri.to_s).to eq "http://si0.twimg.com/profile_banners/7505382/1348266581/web"
end
context "with :web_retina passed" do
it "returns the web retina-sized image" do
user = Twitter::User.new(:id => 7505382, :profile_banner_url => "https://si0.twimg.com/profile_banners/7505382/1348266581")
- expect(user.profile_banner_url(:web_retina)).to eq "http://si0.twimg.com/profile_banners/7505382/1348266581/web_retina"
+ expect(user.profile_banner_uri(:web_retina).to_s).to eq "http://si0.twimg.com/profile_banners/7505382/1348266581/web_retina"
end
end
context "with :mobile passed" do
it "returns the mobile-sized image" do
user = Twitter::User.new(:id => 7505382, :profile_banner_url => "https://si0.twimg.com/profile_banners/7505382/1348266581")
- expect(user.profile_banner_url(:mobile)).to eq "http://si0.twimg.com/profile_banners/7505382/1348266581/mobile"
+ expect(user.profile_banner_uri(:mobile).to_s).to eq "http://si0.twimg.com/profile_banners/7505382/1348266581/mobile"
end
end
context "with :mobile_retina passed" do
it "returns the mobile retina-sized image" do
user = Twitter::User.new(:id => 7505382, :profile_banner_url => "https://si0.twimg.com/profile_banners/7505382/1348266581")
- expect(user.profile_banner_url(:mobile_retina)).to eq "http://si0.twimg.com/profile_banners/7505382/1348266581/mobile_retina"
+ expect(user.profile_banner_uri(:mobile_retina).to_s).to eq "http://si0.twimg.com/profile_banners/7505382/1348266581/mobile_retina"
end
end
context "with :ipad passed" do
it "returns the mobile-sized image" do
user = Twitter::User.new(:id => 7505382, :profile_banner_url => "https://si0.twimg.com/profile_banners/7505382/1348266581")
- expect(user.profile_banner_url(:ipad)).to eq "http://si0.twimg.com/profile_banners/7505382/1348266581/ipad"
+ expect(user.profile_banner_uri(:ipad).to_s).to eq "http://si0.twimg.com/profile_banners/7505382/1348266581/ipad"
end
end
context "with :ipad_retina passed" do
it "returns the mobile retina-sized image" do
user = Twitter::User.new(:id => 7505382, :profile_banner_url => "https://si0.twimg.com/profile_banners/7505382/1348266581")
- expect(user.profile_banner_url(:ipad_retina)).to eq "http://si0.twimg.com/profile_banners/7505382/1348266581/ipad_retina"
+ expect(user.profile_banner_uri(:ipad_retina).to_s).to eq "http://si0.twimg.com/profile_banners/7505382/1348266581/ipad_retina"
end
end
end
- describe "#profile_banner_url_https" do
- it "returns a String when profile_banner_url is set" do
+ describe "#profile_banner_uri_https" do
+ it "returns a URI when profile_banner_url is set" do
user = Twitter::User.new(:id => 7505382, :profile_banner_url => "https://si0.twimg.com/profile_banners/7505382/1348266581")
- expect(user.profile_banner_url_https).to be_a String
+ expect(user.profile_banner_uri_https).to be_a URI
end
it "returns nil when created_at is not set" do
user = Twitter::User.new(:id => 7505382)
- expect(user.profile_banner_url_https).to be_nil
+ expect(user.profile_banner_uri_https).to be_nil
end
it "returns the web-sized image" do
user = Twitter::User.new(:id => 7505382, :profile_banner_url => "https://si0.twimg.com/profile_banners/7505382/1348266581")
- expect(user.profile_banner_url_https).to eq "https://si0.twimg.com/profile_banners/7505382/1348266581/web"
+ expect(user.profile_banner_uri_https.to_s).to eq "https://si0.twimg.com/profile_banners/7505382/1348266581/web"
end
context "with :web_retina passed" do
it "returns the web retina-sized image" do
user = Twitter::User.new(:id => 7505382, :profile_banner_url => "https://si0.twimg.com/profile_banners/7505382/1348266581")
- expect(user.profile_banner_url_https(:web_retina)).to eq "https://si0.twimg.com/profile_banners/7505382/1348266581/web_retina"
+ expect(user.profile_banner_uri_https(:web_retina).to_s).to eq "https://si0.twimg.com/profile_banners/7505382/1348266581/web_retina"
end
end
context "with :mobile passed" do
it "returns the mobile-sized image" do
user = Twitter::User.new(:id => 7505382, :profile_banner_url => "https://si0.twimg.com/profile_banners/7505382/1348266581")
- expect(user.profile_banner_url_https(:mobile)).to eq "https://si0.twimg.com/profile_banners/7505382/1348266581/mobile"
+ expect(user.profile_banner_uri_https(:mobile).to_s).to eq "https://si0.twimg.com/profile_banners/7505382/1348266581/mobile"
end
end
context "with :mobile_retina passed" do
it "returns the mobile retina-sized image" do
user = Twitter::User.new(:id => 7505382, :profile_banner_url => "https://si0.twimg.com/profile_banners/7505382/1348266581")
- expect(user.profile_banner_url_https(:mobile_retina)).to eq "https://si0.twimg.com/profile_banners/7505382/1348266581/mobile_retina"
+ expect(user.profile_banner_uri_https(:mobile_retina).to_s).to eq "https://si0.twimg.com/profile_banners/7505382/1348266581/mobile_retina"
end
end
context "with :ipad passed" do
it "returns the mobile-sized image" do
user = Twitter::User.new(:id => 7505382, :profile_banner_url => "https://si0.twimg.com/profile_banners/7505382/1348266581")
- expect(user.profile_banner_url_https(:ipad)).to eq "https://si0.twimg.com/profile_banners/7505382/1348266581/ipad"
+ expect(user.profile_banner_uri_https(:ipad).to_s).to eq "https://si0.twimg.com/profile_banners/7505382/1348266581/ipad"
end
end
context "with :ipad_retina passed" do
it "returns the mobile retina-sized image" do
user = Twitter::User.new(:id => 7505382, :profile_banner_url => "https://si0.twimg.com/profile_banners/7505382/1348266581")
- expect(user.profile_banner_url_https(:ipad_retina)).to eq "https://si0.twimg.com/profile_banners/7505382/1348266581/ipad_retina"
+ expect(user.profile_banner_uri_https(:ipad_retina).to_s).to eq "https://si0.twimg.com/profile_banners/7505382/1348266581/ipad_retina"
end
end
end
- describe "#profile_banner_url?" do
+ describe "#profile_banner_uri?" do
it "returns true when profile_banner_url is set" do
- profile_banner_url = Twitter::User.new(:id => 7505382, :profile_banner_url => "https://si0.twimg.com/profile_banners/7505382/1348266581").profile_banner_url?
- expect(profile_banner_url).to be_true
+ user = Twitter::User.new(:id => 7505382, :profile_banner_url => "https://si0.twimg.com/profile_banners/7505382/1348266581")
+ expect(user.profile_banner_uri?).to be_true
end
it "returns false when status is not set" do
- profile_banner_url = Twitter::User.new(:id => 7505382).profile_banner_url?
- expect(profile_banner_url).to be_false
+ user = Twitter::User.new(:id => 7505382)
+ expect(user.profile_banner_uri?).to be_false
end
end
- describe "#profile_image_url" do
- it "returns a String when profile_image_url_https is set" do
+ describe "#profile_image_uri" do
+ it "returns a URI when profile_image_url_https is set" do
user = Twitter::User.new(:id => 7505382, :profile_image_url_https => "https://a0.twimg.com/profile_images/1759857427/image1326743606_normal.png")
- expect(user.profile_image_url).to be_a String
+ expect(user.profile_image_uri).to be_a URI
end
it "returns nil when created_at is not set" do
user = Twitter::User.new(:id => 7505382)
- expect(user.profile_image_url).to be_nil
+ expect(user.profile_image_uri).to be_nil
end
it "returns the normal-sized image" do
user = Twitter::User.new(:id => 7505382, :profile_image_url_https => "https://a0.twimg.com/profile_images/1759857427/image1326743606_normal.png")
- expect(user.profile_image_url).to eq "http://a0.twimg.com/profile_images/1759857427/image1326743606_normal.png"
+ expect(user.profile_image_uri.to_s).to eq "http://a0.twimg.com/profile_images/1759857427/image1326743606_normal.png"
end
context "with :original passed" do
it "returns the original image" do
user = Twitter::User.new(:id => 7505382, :profile_image_url_https => "https://a0.twimg.com/profile_images/1759857427/image1326743606_normal.png")
- expect(user.profile_image_url(:original)).to eq "http://a0.twimg.com/profile_images/1759857427/image1326743606.png"
+ expect(user.profile_image_uri(:original).to_s).to eq "http://a0.twimg.com/profile_images/1759857427/image1326743606.png"
end
end
context "with :bigger passed" do
it "returns the bigger-sized image" do
user = Twitter::User.new(:id => 7505382, :profile_image_url_https => "https://a0.twimg.com/profile_images/1759857427/image1326743606_normal.png")
- expect(user.profile_image_url(:bigger)).to eq "http://a0.twimg.com/profile_images/1759857427/image1326743606_bigger.png"
+ expect(user.profile_image_uri(:bigger).to_s).to eq "http://a0.twimg.com/profile_images/1759857427/image1326743606_bigger.png"
end
end
context "with :mini passed" do
it "returns the mini-sized image" do
user = Twitter::User.new(:id => 7505382, :profile_image_url_https => "https://a0.twimg.com/profile_images/1759857427/image1326743606_normal.png")
- expect(user.profile_image_url(:mini)).to eq "http://a0.twimg.com/profile_images/1759857427/image1326743606_mini.png"
+ expect(user.profile_image_uri(:mini).to_s).to eq "http://a0.twimg.com/profile_images/1759857427/image1326743606_mini.png"
end
end
context "with capitalized file extension" do
it "returns the correct image" do
user = Twitter::User.new(:id => 7505382, :profile_image_url_https => "https://si0.twimg.com/profile_images/67759670/DSCN2136_normal.JPG")
- expect(user.profile_image_url(:original)).to eq "http://si0.twimg.com/profile_images/67759670/DSCN2136.JPG"
- expect(user.profile_image_url(:bigger)).to eq "http://si0.twimg.com/profile_images/67759670/DSCN2136_bigger.JPG"
- expect(user.profile_image_url(:mini)).to eq "http://si0.twimg.com/profile_images/67759670/DSCN2136_mini.JPG"
+ expect(user.profile_image_uri(:original).to_s).to eq "http://si0.twimg.com/profile_images/67759670/DSCN2136.JPG"
+ expect(user.profile_image_uri(:bigger).to_s).to eq "http://si0.twimg.com/profile_images/67759670/DSCN2136_bigger.JPG"
+ expect(user.profile_image_uri(:mini).to_s).to eq "http://si0.twimg.com/profile_images/67759670/DSCN2136_mini.JPG"
end
end
end
- describe "#profile_image_url_https" do
- it "returns a String when profile_image_url_https is set" do
+ describe "#profile_image_uri_https" do
+ it "returns a URI when profile_image_url_https is set" do
user = Twitter::User.new(:id => 7505382, :profile_image_url_https => "https://a0.twimg.com/profile_images/1759857427/image1326743606_normal.png")
- expect(user.profile_image_url_https).to be_a String
+ expect(user.profile_image_uri_https).to be_a URI
end
it "returns nil when created_at is not set" do
user = Twitter::User.new(:id => 7505382)
- expect(user.profile_image_url_https).to be_nil
+ expect(user.profile_image_uri_https).to be_nil
end
it "returns the normal-sized image" do
user = Twitter::User.new(:id => 7505382, :profile_image_url_https => "https://a0.twimg.com/profile_images/1759857427/image1326743606_normal.png")
- expect(user.profile_image_url_https).to eq "https://a0.twimg.com/profile_images/1759857427/image1326743606_normal.png"
+ expect(user.profile_image_uri_https.to_s).to eq "https://a0.twimg.com/profile_images/1759857427/image1326743606_normal.png"
end
context "with :original passed" do
it "returns the original image" do
user = Twitter::User.new(:id => 7505382, :profile_image_url_https => "https://a0.twimg.com/profile_images/1759857427/image1326743606_normal.png")
- expect(user.profile_image_url_https(:original)).to eq "https://a0.twimg.com/profile_images/1759857427/image1326743606.png"
+ expect(user.profile_image_uri_https(:original).to_s).to eq "https://a0.twimg.com/profile_images/1759857427/image1326743606.png"
end
end
context "with :bigger passed" do
it "returns the bigger-sized image" do
user = Twitter::User.new(:id => 7505382, :profile_image_url_https => "https://a0.twimg.com/profile_images/1759857427/image1326743606_normal.png")
- expect(user.profile_image_url_https(:bigger)).to eq "https://a0.twimg.com/profile_images/1759857427/image1326743606_bigger.png"
+ expect(user.profile_image_uri_https(:bigger).to_s).to eq "https://a0.twimg.com/profile_images/1759857427/image1326743606_bigger.png"
end
end
context "with :mini passed" do
it "returns the mini-sized image" do
user = Twitter::User.new(:id => 7505382, :profile_image_url_https => "https://a0.twimg.com/profile_images/1759857427/image1326743606_normal.png")
- expect(user.profile_image_url_https(:mini)).to eq "https://a0.twimg.com/profile_images/1759857427/image1326743606_mini.png"
+ expect(user.profile_image_uri_https(:mini).to_s).to eq "https://a0.twimg.com/profile_images/1759857427/image1326743606_mini.png"
end
end
context "with capitalized file extension" do
it "returns the correct image" do
user = Twitter::User.new(:id => 7505382, :profile_image_url_https => "https://si0.twimg.com/profile_images/67759670/DSCN2136_normal.JPG")
- expect(user.profile_image_url_https(:original)).to eq "https://si0.twimg.com/profile_images/67759670/DSCN2136.JPG"
- expect(user.profile_image_url_https(:bigger)).to eq "https://si0.twimg.com/profile_images/67759670/DSCN2136_bigger.JPG"
- expect(user.profile_image_url_https(:mini)).to eq "https://si0.twimg.com/profile_images/67759670/DSCN2136_mini.JPG"
+ expect(user.profile_image_uri_https(:original).to_s).to eq "https://si0.twimg.com/profile_images/67759670/DSCN2136.JPG"
+ expect(user.profile_image_uri_https(:bigger).to_s).to eq "https://si0.twimg.com/profile_images/67759670/DSCN2136_bigger.JPG"
+ expect(user.profile_image_uri_https(:mini).to_s).to eq "https://si0.twimg.com/profile_images/67759670/DSCN2136_mini.JPG"
end
end
end
- describe "#profile_image_url?" do
+ describe "#profile_image_uri?" do
it "returns true when profile_banner_url is set" do
- profile_image_url = Twitter::User.new(:id => 7505382, :profile_image_url_https => "https://si0.twimg.com/profile_banners/7505382/1348266581").profile_image_url?
- expect(profile_image_url).to be_true
+ user = Twitter::User.new(:id => 7505382, :profile_image_url_https => "https://si0.twimg.com/profile_banners/7505382/1348266581")
+ expect(user.profile_image_uri?).to be_true
end
it "returns false when status is not set" do
- profile_image_url= Twitter::User.new(:id => 7505382).profile_image_url?
- expect(profile_image_url).to be_false
+ user = Twitter::User.new(:id => 7505382)
+ expect(user.profile_image_uri?).to be_false
end
end
@@ -285,17 +285,23 @@
end
end
- describe "#url" do
- it "returns the URL to the user" do
+ describe "#uri" do
+ it "returns the URI to the user" do
user = Twitter::User.new(:id => 7505382, :screen_name => "sferik")
- expect(user.url).to eq "https://twitter.com/sferik"
+ expect(user.uri).to be_a URI
+ expect(user.uri.to_s).to eq "https://twitter.com/sferik"
end
end
describe "#website" do
- it "returns the website of the user" do
+ it "returns a URI when the url is set" do
user = Twitter::User.new(:id => 7505382, :url => "https://github.com/sferik")
- expect(user.website).to eq "https://github.com/sferik"
+ expect(user.website).to be_a URI
+ expect(user.website.to_s).to eq "https://github.com/sferik"
+ end
+ it "returns nil when the url is not set" do
+ user = Twitter::User.new(:id => 7505382)
+ expect(user.website).to be_nil
end
end
Please sign in to comment.
Something went wrong with that request. Please try again.