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 +8 -2
- data/lib/twitter_util.rb +99 -26
- data/test/test_twitter_util.rb +65 -3
- metadata +11 -6
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.
|
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
|
-
|
12
|
-
|
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
|
-
|
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
|
-
|
34
|
+
def self.get_trends(momento='daily')
|
28
35
|
trends=nil
|
29
|
-
|
30
|
-
|
36
|
+
url = "#{URL_TWITTER_API}/trends/#{momento}.json"
|
37
|
+
result =get_twitter_data(url)
|
31
38
|
trends = result['trends'] unless result.nil?
|
32
|
-
|
33
|
-
|
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
|
-
|
86
|
+
Retorna un arreglo con los ids de seguidores del usuario indicado
|
37
87
|
=end
|
38
|
-
|
39
|
-
|
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
|
-
|
42
|
-
|
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
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
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
|
-
|
58
|
-
|
59
|
-
|
132
|
+
end
|
133
|
+
return result
|
60
134
|
end
|
61
|
-
|
62
135
|
end
|
data/test/test_twitter_util.rb
CHANGED
@@ -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
|
16
|
+
def test_status_when_user_is_valid
|
13
17
|
status=TwitterUtil.get_status('wryanez')
|
14
|
-
|
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.
|
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:
|
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:
|
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:
|
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
|
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.
|
61
|
+
rubygems_version: 1.8.24
|
57
62
|
signing_key:
|
58
63
|
specification_version: 3
|
59
64
|
summary: Twitter Utilities Search
|