jnunemaker / twitter

API wrapper for Twitter and Twitter Search API's

This URL has Read+Write access

twitter / lib / twitter / search.rb
9c329cfc » jnunemaker 2009-04-03 Added search api wrapper an... 1 module Twitter
2 class Search
3 include HTTParty
4 include Enumerable
5
6 attr_reader :result, :query
7
e8fbad6a » jnunemaker 2009-06-26 Added user agent option to ... 8 def initialize(q=nil, options={})
9 @options = options
9c329cfc » jnunemaker 2009-04-03 Added search api wrapper an... 10 clear
11 containing(q) if q && q.strip != ''
12 end
13
e8fbad6a » jnunemaker 2009-06-26 Added user agent option to ... 14 def user_agent
15 @options[:user_agent] || 'Ruby Twitter Gem'
16 end
17
9c329cfc » jnunemaker 2009-04-03 Added search api wrapper an... 18 def from(user)
19 @query[:q] << "from:#{user}"
20 self
21 end
22
23 def to(user)
24 @query[:q] << "to:#{user}"
25 self
26 end
27
28 def referencing(user)
29 @query[:q] << "@#{user}"
30 self
31 end
32 alias :references :referencing
33 alias :ref :referencing
34
35 def containing(word)
36 @query[:q] << "#{word}"
37 self
38 end
39 alias :contains :containing
40
41 # adds filtering based on hash tag ie: #twitter
42 def hashed(tag)
43 @query[:q] << "##{tag}"
44 self
45 end
46
47 # lang must be ISO 639-1 code ie: en, fr, de, ja, etc.
48 #
49 # when I tried en it limited my results a lot and took
50 # out several tweets that were english so i'd avoid
51 # this unless you really want it
52 def lang(lang)
53 @query[:lang] = lang
54 self
55 end
56
57 # Limits the number of results per page
58 def per_page(num)
59 @query[:rpp] = num
60 self
61 end
62
63 # Which page of results to fetch
64 def page(num)
65 @query[:page] = num
66 self
67 end
68
69 # Only searches tweets since a given id.
70 # Recommended to use this when possible.
71 def since(since_id)
72 @query[:since_id] = since_id
73 self
74 end
75
76 # Search tweets by longitude, latitude and a given range.
77 # Ranges like 25km and 50mi work.
78 def geocode(long, lat, range)
79 @query[:geocode] = [long, lat, range].join(',')
80 self
81 end
82
e79cc1fd » jnunemaker 2009-04-14 Added max to search to spec... 83 def max(id)
84 @query[:max_id] = id
85 self
86 end
87
9c329cfc » jnunemaker 2009-04-03 Added search api wrapper an... 88 # Clears all the query filters to make a new search
89 def clear
90 @fetch = nil
91 @query = {}
92 @query[:q] = []
93 self
94 end
95
96 def fetch(force=false)
97 if @fetch.nil? || force
096d56ed » jnunemaker 2009-04-08 Fixed that search was ignor... Comment 98 query = @query.dup
99 query[:q] = query[:q].join(' ')
e8fbad6a » jnunemaker 2009-06-26 Added user agent option to ... 100 response = self.class.get('http://search.twitter.com/search.json', :query => query, :format => :json, :headers => {'User-Agent' => user_agent})
9c329cfc » jnunemaker 2009-04-03 Added search api wrapper an... 101 @fetch = Mash.new(response)
102 end
103
104 @fetch
105 end
106
107 def each
108 fetch()['results'].each { |r| yield r }
109 end
110 end
111 end