3 :public => '/statuses/public_timeline.json',
4 :friends => '/statuses/friends_timeline.json',
5 :friend => '/statuses/friends_timeline.json',
6 :user => '/statuses/user_timeline.json',
7 :me => '/statuses/user_timeline.json',
10 # Provides access to Twitter's Timeline APIs
12 # Returns timeline for given <tt>type</tt>.
14 # <tt>type</tt> can take the following values:
16 # * <tt>friends</tt> or <tt>friend</tt>
17 # * <tt>user</tt> or <tt>me</tt>
19 # <tt>:id</tt> is on key applicable to be defined in </tt>options</tt>:
20 # * the id or screen name (aka login) for :friends
21 # * the id or screen name (aka login) for :user
22 # * meaningless for the :me case, since <tt>twitter.timeline_for(:user, 'mylogin')</tt> and <tt>twitter.timeline_for(:me)</tt> are the same assuming 'mylogin' is the authenticated user's screen name (aka login).
25 # # returns the public statuses since status with id of 6543210
26 # twitter.timeline_for(:public, id => 6543210)
27 # # returns the statuses for friend with user id 43210
28 # twitter.timeline_for(:friend, :id => 43210)
29 # # returns the statuses for friend with screen name (aka login) of 'otherlogin'
30 # twitter.timeline_for(:friend, :id => 'otherlogin')
31 # # returns the statuses for user with screen name (aka login) of 'otherlogin'
32 # twitter.timeline_for(:user, :id => 'otherlogin')
34 # <tt>options</tt> can also include the following keys:
35 # * <tt>:id</tt> is the user ID, screen name of Twitter::User representation of a <tt>Twitter</tt> user.
36 # * <tt>:since</tt> is a Time object specifying the date-time from which to return results for. Applicable for the :friend, :friends, :user and :me cases.
37 # * <tt>:count</tt> specifies the number of statuses to retrieve. Only applicable for the :user case.
38 # * <tt>since_id</tt> is the status id of the public timeline from which to retrieve statuses for <tt>:public</tt>. Only applicable for the :public case.
40 # You can also pass this method a block, which will iterate through the results
41 # of the requested timeline and apply the block logic for each status returned.
44 # twitter.timeline_for(:public) do |status|
45 # puts status.user.screen_name, status.text
48 # twitter.timeline_for(:friend, :id => 'myfriend', :since => 30.minutes.ago) do |status|
49 # puts status.user.screen_name, status.text
52 # timeline = twitter.timeline_for(:me) do |status|
56 # An <tt>ArgumentError</tt> will be raised if an invalid <tt>type</tt>
57 # is given. Valid types are:
63 def timeline_for(type, options = {}, &block)
64 raise ArgumentError, "Invalid timeline type: #{type}" unless @@TIMELINE_URIS.keys.member?(type)
65 uri = @@TIMELINE_URIS[type]
66 response = http_connect {|conn| create_http_get_request(uri, options) }
67 timeline = Twitter::Status.unmarshal(response.body)
68 timeline.each {|status| bless_model(status); yield status if block_given? }