twitter_util 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/README CHANGED
@@ -1,10 +1,16 @@
1
1
  =twitter_util
2
2
 
3
- Clase que provee métodos de consulta básicos a twitter
3
+ Clase que provee métodos de consulta básicos a twitter usando la api de twitter (REST API V1)
4
+ No requiere autenticación (OAuth), usa metodos de consulta públicos
4
5
 
5
6
  == Métodos:
6
7
  * get_trends(momento)
7
8
  * get_status(usuario)
9
+ * get_user_timeline(usuario)
10
+ * search_tweets(query,pagina=1)
11
+ * get_followers(usuario)
12
+ * get_following(usuario)
13
+
8
14
 
9
15
  == Author
10
- wyanez@gmail.com - 12/06/10 - version 0.0.1
16
+ wyanez@gmail.com - 12/06/10 - version 0.0.2 (01/09/2012)
data/lib/twitter_util.rb CHANGED
@@ -8,38 +8,111 @@ require 'json'
8
8
  Clase que provee metodos (estaticos) de consulta basicos a twitter.
9
9
 
10
10
  == Usage
11
- require 'twitter_util'
12
- trends=TwitterUtil.get_trends
13
-
11
+ require 'twitter_util'
12
+ trends = TwitterUtil.get_trends()
13
+ status = TwitterUtil.get_status('wryanez')
14
+ result = TwitterUtil.search_tweets('from:wryanez ruby')
15
+ timeline = TwitterUtil.get_user_timeline('wryanez')
16
+ followers = TwitterUtil.get_followers('wryanez')
17
+ followings = TwitterUtil.get_following('wryanez')
18
+ users=TwitterUtil.get_users_lookup(arr_ids)
14
19
  == Author
15
- William Yanez (wyanez@gmail.com)
16
-
20
+ William Yanez (wyanez@gmail.com)
21
+
17
22
  =end
18
23
 
19
24
  class TwitterUtil
20
-
25
+ URL_TWITTER_API="http://api.twitter.com/1"
26
+ URL_TWITTER_SEARCH="http://search.twitter.com/search.json"
27
+
21
28
  =begin rdoc
22
29
  retorna un hash de hashes de los trends dependiendo del parametro momento:
23
- * 'current': trends del momento actual
30
+ * 'current': trends del momento actual (debe estar autenticado el usuario)
24
31
  * 'daily': trends de cada hora del dia
25
32
  * 'weekly': trends de cada dia de la semana
26
33
  =end
27
- def self.get_trends(momento='current')
34
+ def self.get_trends(momento='daily')
28
35
  trends=nil
29
- url = "http://api.twitter.com/1/trends/#{momento}.json"
30
- result =get_twitter_data(url)
36
+ url = "#{URL_TWITTER_API}/trends/#{momento}.json"
37
+ result =get_twitter_data(url)
31
38
  trends = result['trends'] unless result.nil?
32
- return trends
33
- end
39
+ return trends
40
+ end
41
+
42
+ =begin rdoc
43
+ Retorna un hash con el status actual (ultimo tweet, followers, etc...) del usuario indicado.
44
+ * Algunos campos son:
45
+ <b>screen_name,description,location,created_at,url,followers_count,statuses_count</b> (Nro de tweets)
46
+ * El ultimo tweet se puede acceder con el campo status y es un hash con los campos: <b>text,created_at,source</b>
47
+ =end
48
+ def self.get_status(usuario)
49
+ url="#{URL_TWITTER_API}/users/show/#{usuario}.json"
50
+ result =get_twitter_data(url)
51
+ return result
52
+ end
53
+
54
+ =begin rdoc
55
+ retorna un arreglo con los tweets que cumplen con el criterio de busqueda dado en query.
56
+ El query es un string con cada uno de los parametros de busquedas separados por un espacio
57
+ en blanco. <b>Ej: query="from:wryanez ruby"</b>
58
+
59
+ Cada tweet es un hash. Algunos campos utiles son:
60
+ * text : contenido del tweet
61
+ * from_user : Usuario que envia el tweet
62
+ * created_at: fecha del tweet
63
+ =end
64
+ def self.search_tweets(query,page=1)
65
+ return Array.new if query.empty?
66
+
67
+ query="q="+query
68
+ url=URL_TWITTER_SEARCH+"?"+URI.escape(query)
69
+ url=url+"&page=#{page}" if page>1
70
+
71
+ result =get_twitter_data(url)
72
+ return result["results"]
73
+ end
74
+
75
+ =begin rdoc
76
+ Retorna un arreglo con los tweets mas recientes del timeline del usuario indicado
77
+ =end
78
+ def self.get_user_timeline(usuario)
79
+ url="#{URL_TWITTER_API}/statuses/user_timeline.json"
80
+ url =url+"?screen_name="+URI.escape(usuario)
81
+ result =get_twitter_data(url)
82
+ return result
83
+ end
34
84
 
35
85
  =begin rdoc
36
- retorna el status actual (ultimo tweet, followers, etc...) del usuario indicado
86
+ Retorna un arreglo con los ids de seguidores del usuario indicado
37
87
  =end
38
- def self.get_status(usuario)
39
- url="http://api.twitter.com/1/users/show/#{usuario}.json"
88
+ def self.get_followers(usuario,cursor=-1)
89
+ url="#{URL_TWITTER_API}/followers/ids.json"
90
+ url =url+"?screen_name="+URI.escape(usuario)
91
+ url=url+"&cursor=#{cursor}" if cursor>1
40
92
  result =get_twitter_data(url)
41
- return result
42
- end
93
+ return result
94
+ end
95
+
96
+ =begin rdoc
97
+ Retorna un arreglo con los ids de los usuarios que sigue el usuario indicado
98
+ =end
99
+ def self.get_following(usuario,cursor=-1)
100
+ url="#{URL_TWITTER_API}/friends/ids.json"
101
+ url =url+"?screen_name="+URI.escape(usuario)
102
+ url=url+"&cursor=#{cursor}" if cursor>1
103
+ result =get_twitter_data(url)
104
+ return result
105
+ end
106
+
107
+ =begin rdoc
108
+ Retorna un arreglo con los información de los usuarios indicados en el arreglo de ids dado
109
+ =end
110
+ def self.get_users_lookup(arr_ids)
111
+ str_ids=arr_ids.join(',')
112
+ url="#{URL_TWITTER_API}/users/lookup.json?user_id="+str_ids
113
+ result =get_twitter_data(url)
114
+ return result
115
+ end
43
116
 
44
117
  private
45
118
 
@@ -48,15 +121,15 @@ se conecta a la url dada de twitter y retorna la data correspondiente.
48
121
  devuelve nil si hay problemas con la conexion
49
122
  =end
50
123
  def self.get_twitter_data(url)
51
- begin
52
- buffer = open(url, "UserAgent" => "Ruby-Wget").read
53
- result = JSON.parse(buffer)
54
- rescue Exception => ex
55
- puts ex
124
+ #puts "Procesando #{url}"
125
+
126
+ begin
127
+ buffer = open(url, "UserAgent" => "Ruby-Wget").read
128
+ result = JSON.parse(buffer)
129
+ rescue Exception => ex
130
+ puts "Exception: #{ex}"
56
131
  result = nil
57
- end
58
- return result
59
-
132
+ end
133
+ return result
60
134
  end
61
-
62
135
  end
@@ -5,14 +5,76 @@ class TestTwitterUtil < Test::Unit::TestCase
5
5
 
6
6
  def test_trends_not_empty
7
7
  trends=TwitterUtil.get_trends(:daily)
8
- puts trends.inspect
9
8
  assert_not_nil(trends)
9
+ assert(trends.size==24)
10
+
11
+ trends=TwitterUtil.get_trends(:weekly)
12
+ assert_not_nil(trends)
13
+ assert(trends.size==7)
10
14
  end
11
15
 
12
- def test_status_not_empty
16
+ def test_status_when_user_is_valid
13
17
  status=TwitterUtil.get_status('wryanez')
14
- puts status.inspect
18
+
15
19
  assert_not_nil(status)
20
+ assert_equal(status["screen_name"],'wryanez')
21
+ assert_equal(status["location"],'Barquisimeto, Venezuela')
22
+ end
23
+
24
+ def test_status_when_user_not_found
25
+ status=TwitterUtil.get_status('UsuarioNoExiste2012')
26
+ assert_nil(status)
16
27
  end
28
+
29
+ def test_search_tweets_when_there_are_results
30
+ result=TwitterUtil.search_tweets("from:wryanez")
31
+ assert_not_nil(result)
32
+ assert(result.size>0)
33
+
34
+ ult_tweet=result[0]
35
+ assert_equal(ult_tweet["from_user"],"wryanez")
36
+ end
37
+
38
+ def test_search_tweets_when_query_empty
39
+ result=TwitterUtil.search_tweets("")
40
+ assert_not_nil(result)
41
+ assert_equal(result,Array.new)
42
+ end
43
+
44
+ def test_search_tweets_when_not_there_are_results
45
+ result=TwitterUtil.search_tweets("from:wryanez99999")
46
+ assert_not_nil(result)
47
+ assert_equal(result,Array.new)
48
+ end
49
+
50
+ def test_timeline_not_empty
51
+ timeline = TwitterUtil.get_user_timeline('wryanez')
52
+ assert(timeline.size>0)
53
+ end
54
+
55
+ def test_following_and_followers_ok
56
+ status=TwitterUtil.get_status('wryanez')
57
+ assert_not_nil(status)
58
+ followers = status['followers_count']
59
+ following = status['friends_count']
60
+
61
+ data_followers = TwitterUtil.get_followers('wryanez')
62
+ assert_not_nil(data_followers)
63
+
64
+ data_following = TwitterUtil.get_following('wryanez')
65
+ assert_not_nil(data_following)
66
+
67
+ assert_equal(following,data_following['ids'].size)
68
+ assert_equal(followers,data_followers['ids'].size)
69
+ end
17
70
 
71
+ def test_users_lookup_ok
72
+ data_following = TwitterUtil.get_following('wryanez')
73
+ assert_not_nil(data_following)
74
+
75
+ arr_ids=data_following['ids'][0..99]
76
+ users=TwitterUtil.get_users_lookup(arr_ids)
77
+ assert_not_nil(users)
78
+ assert_equal(users.size,100)
79
+ end
18
80
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: twitter_util
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire: twitter_util
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-10-27 00:00:00.000000000Z
12
+ date: 2012-09-17 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: json
16
- requirement: &83005420 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,7 +21,12 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *83005420
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
25
30
  description: A Twitter search basic utilities collection
26
31
  email:
27
32
  - wyanez@gmail.com
@@ -33,7 +38,7 @@ files:
33
38
  - lib/twitter_util.rb
34
39
  - test/test_twitter_util.rb
35
40
  - README
36
- homepage: http://wryanez.blogspot.com
41
+ homepage: http://about.me/wryanez
37
42
  licenses: []
38
43
  post_install_message:
39
44
  rdoc_options: []
@@ -53,7 +58,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
53
58
  version: '0'
54
59
  requirements: []
55
60
  rubyforge_project:
56
- rubygems_version: 1.8.10
61
+ rubygems_version: 1.8.24
57
62
  signing_key:
58
63
  specification_version: 3
59
64
  summary: Twitter Utilities Search