twitter_util 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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