meme 0.1.2 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.rdoc CHANGED
@@ -24,6 +24,24 @@ Meme uses {YQL}[http://developer.yahoo.com/yql/] to get API of {Yahoo! Meme}[htt
24
24
  user.avatar_url
25
25
  => "http://d.yimg.com/gg/jtadeulopes/avatars/44251e70378d4d225f8cda09a6c3aec87301833a.jpeg"
26
26
 
27
+ === Followers and Following
28
+
29
+ followers = user.followers
30
+ followers.count
31
+ => 10
32
+
33
+ follower = followers.first
34
+
35
+ follower.name
36
+ => "zigotto"
37
+
38
+ follower.url
39
+ => "http://meme.yahoo.com/zigotto/"
40
+
41
+ following = user.following
42
+ following.count
43
+ => 10
44
+
27
45
  === Find posts
28
46
 
29
47
  posts = Meme::Post.find('brhackday')
@@ -31,8 +49,8 @@ Meme uses {YQL}[http://developer.yahoo.com/yql/] to get API of {Yahoo! Meme}[htt
31
49
  posts.first.category
32
50
  => "text"
33
51
 
34
- post.first.content
35
- => "RT @codepo8: And I am off - plane leaves BR for London. Thanks to everybody I met at #brhackday. I have not a single bad memory to speak of."
52
+ posts.first.content
53
+ => "RT @codepo8: And I am off - plane leaves BR for London. Thanks to everybody I met at #brhackday...
36
54
 
37
55
  Find by type:
38
56
 
@@ -43,6 +61,10 @@ Find by type:
43
61
 
44
62
  For more information, please refer the {project wiki}[http://wiki.github.com/jtadeulopes/meme/]
45
63
 
64
+ == Installation
65
+
66
+ sudo gem install meme
67
+
46
68
  == TODO
47
69
 
48
70
  Much remains to be done! Please refer the {project wiki}[http://wiki.github.com/jtadeulopes/meme/]
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.2
1
+ 0.2.0
data/lib/meme.rb CHANGED
@@ -1,63 +1,6 @@
1
1
  require 'open-uri'
2
2
  require 'json'
3
3
 
4
- class Meme
5
-
6
- class Info
7
-
8
- VARS = ["avatar_url", "name", "title", "guid", "followers", "language", "url", "description"]
9
-
10
- attr_accessor *VARS
11
-
12
- def initialize(data)
13
- unless data.nil?
14
- VARS.each do |var|
15
- self.instance_variable_set("@#{var}", data[var])
16
- end
17
- end
18
- end
19
-
20
- def self.find(name)
21
- url = URI.escape("https://query.yahooapis.com/v1/public/yql?q=SELECT * FROM meme.info WHERE name='#{name}'&format=json")
22
- buffer = open(url).read
23
- parse = JSON.parse(buffer)
24
- if parse
25
- results = parse['query']['results']
26
- results.nil? ? nil : Info.new(results['meme'])
27
- else
28
- parse.error!
29
- end
30
- end
31
-
32
- end
33
-
34
- class Post
35
-
36
- VARS = ["category", "timestamp", "guid", "pubid", "url", "repost_count", "caption", "type", "content"]
37
-
38
- attr_accessor *VARS
39
-
40
- def initialize(data)
41
- unless data.nil?
42
- VARS.each do |var|
43
- self.instance_variable_set("@#{var}", data[var])
44
- end
45
- end
46
- end
47
-
48
- def self.find(query, options = {})
49
- type = " and type='#{options.delete(:type).to_s}'" if options.has_key?(:type)
50
- url = URI.escape("https://query.yahooapis.com/v1/public/yql?q=SELECT * FROM meme.search WHERE query='#{query}'#{type}&format=json")
51
- buffer = open(url).read
52
- parse = JSON.parse(buffer)
53
- if parse
54
- results = parse['query']['results']
55
- results.nil? ? nil : results['post'].map {|m| Post.new(m)}
56
- else
57
- parse.error!
58
- end
59
- end
60
-
61
- end
62
-
63
- end
4
+ require 'meme/info'
5
+ require 'meme/search'
6
+ require 'meme/request'
data/lib/meme/info.rb ADDED
@@ -0,0 +1,111 @@
1
+ module Meme
2
+
3
+ class Info
4
+
5
+ VARS = ["avatar_url", "name", "title", "guid", "language", "url", "description"] #:nodoc:
6
+
7
+ attr_accessor *VARS
8
+
9
+ def initialize(data) #:nodoc:
10
+ unless data.nil?
11
+ VARS.each do |var|
12
+ self.instance_variable_set("@#{var}", data[var])
13
+ end
14
+ end
15
+ end
16
+
17
+ # Find user
18
+ #
19
+ # Example:
20
+ #
21
+ # # by name
22
+ # user = Meme::Info.find('jtadeulopes')
23
+ # user.name
24
+ # => "jtadeulopes"
25
+ #
26
+ def self.find(name)
27
+ query = "SELECT * FROM meme.info WHERE name='#{name}'"
28
+ parse = Request.parse(query)
29
+ if parse
30
+ results = parse['query']['results']
31
+ results.nil? ? nil : Info.new(results['meme'])
32
+ else
33
+ parse.error!
34
+ end
35
+ end
36
+
37
+ # Return user followers
38
+ #
39
+ # Example:
40
+ #
41
+ # # Search user
42
+ # user = Meme::Info.find('jtadeulopes')
43
+ #
44
+ # # Default
45
+ # followers = user.followers
46
+ # followers.count
47
+ # => 10
48
+ #
49
+ # # Specify a count
50
+ # followers = user.followers(100)
51
+ # followers.count
52
+ # => 100
53
+ #
54
+ # # All followers
55
+ # followers = user.followers(:all)
56
+ # followers.count
57
+ #
58
+ # follower = followers.first
59
+ # follower.name
60
+ # => "zigotto"
61
+ # follower.url
62
+ # => "http://meme.yahoo.com/zigotto/"
63
+ #
64
+ def followers(count=10)
65
+ count = 0 if count.is_a?(Symbol) && count == :all
66
+ query = "SELECT * FROM meme.followers(#{count}) WHERE owner_guid='#{self.guid}'"
67
+ parse = Request.parse(query)
68
+ if parse
69
+ results = parse['query']['results']
70
+ results.nil? ? nil : results['meme'].map {|m| Info.new(m)}
71
+ else
72
+ parse.error!
73
+ end
74
+ end
75
+
76
+ # Return user following
77
+ #
78
+ # Example:
79
+ #
80
+ # # Search user
81
+ # user = Meme::Info.find('jtadeulopes')
82
+ #
83
+ # # Default
84
+ # following = user.following
85
+ # following.count
86
+ # => 10
87
+ #
88
+ # # Specify a count
89
+ # following = user.following(100)
90
+ # following.count
91
+ # => 100
92
+ #
93
+ # # All following
94
+ # following = user.following(:all)
95
+ # following.count
96
+ #
97
+ def following(count=10)
98
+ count = 0 if count.is_a?(Symbol) && count == :all
99
+ query = "SELECT * FROM meme.following(#{count}) WHERE owner_guid='#{self.guid}'"
100
+ parse = Request.parse(query)
101
+ if parse
102
+ results = parse['query']['results']
103
+ results.nil? ? nil : results['meme'].map {|m| Info.new(m)}
104
+ else
105
+ parse.error!
106
+ end
107
+ end
108
+
109
+ end
110
+
111
+ end
@@ -0,0 +1,13 @@
1
+ module Meme
2
+
3
+ class Request #:nodoc:
4
+
5
+ def self.parse(query)
6
+ url = URI.escape("https://query.yahooapis.com/v1/public/yql?q=#{query}&format=json")
7
+ buffer = open(url).read
8
+ JSON.parse(buffer)
9
+ end
10
+
11
+ end
12
+
13
+ end
@@ -0,0 +1,47 @@
1
+ module Meme
2
+
3
+ class Post
4
+
5
+ VARS = ["category", "timestamp", "guid", "pubid", "url", "repost_count", "caption", "type", "content"] #:nodoc:
6
+
7
+ attr_accessor *VARS
8
+
9
+ def initialize(data) #:nodoc:
10
+ unless data.nil?
11
+ VARS.each do |var|
12
+ self.instance_variable_set("@#{var}", data[var])
13
+ end
14
+ end
15
+ end
16
+
17
+ # Find posts
18
+ #
19
+ # Example:
20
+ #
21
+ # # type text
22
+ # posts = Meme::Post.find('brhackday')
23
+ #
24
+ # # type photo
25
+ # posts = Meme::Post.find('brhackday', :type => :photo)
26
+ #
27
+ # # type video
28
+ # posts = Meme::Post.find('brhackday', :type => :video)
29
+ #
30
+ # posts.first.content
31
+ # => "RT @codepo8: And I am off - plane leaves BR for London. Thanks to everybody...
32
+ #
33
+ def self.find(query, options = {})
34
+ type = " and type='#{options.delete(:type).to_s}'" if options.has_key?(:type)
35
+ query = "SELECT * FROM meme.search WHERE query='#{query}'#{type}"
36
+ parse = Request.parse(query)
37
+ if parse
38
+ results = parse['query']['results']
39
+ results.nil? ? nil : results['post'].map {|m| Post.new(m)}
40
+ else
41
+ parse.error!
42
+ end
43
+ end
44
+
45
+ end
46
+
47
+ end
data/meme.gemspec CHANGED
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{meme}
8
- s.version = "0.1.2"
8
+ s.version = "0.2.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["J\303\251sus Lopes"]
12
- s.date = %q{2010-03-23}
12
+ s.date = %q{2010-04-01}
13
13
  s.description = %q{Yahoo! Meme API wrapper library in Ruby}
14
14
  s.email = %q{jlopes@zigotto.com.br}
15
15
  s.extra_rdoc_files = [
@@ -24,14 +24,25 @@ Gem::Specification.new do |s|
24
24
  "Rakefile",
25
25
  "VERSION",
26
26
  "lib/meme.rb",
27
+ "lib/meme/info.rb",
28
+ "lib/meme/request.rb",
29
+ "lib/meme/search.rb",
27
30
  "meme.gemspec",
31
+ "spec/fixtures/meme_followers.json",
32
+ "spec/fixtures/meme_followers_all.json",
33
+ "spec/fixtures/meme_followers_count.json",
34
+ "spec/fixtures/meme_following.json",
35
+ "spec/fixtures/meme_following_all.json",
36
+ "spec/fixtures/meme_following_count.json",
28
37
  "spec/fixtures/meme_info.json",
29
38
  "spec/fixtures/meme_info_not_found.json",
30
39
  "spec/fixtures/meme_search.json",
31
40
  "spec/fixtures/meme_search_type_audio.json",
32
41
  "spec/fixtures/meme_search_type_photo.json",
33
42
  "spec/fixtures/meme_search_type_video.json",
43
+ "spec/info_spec.rb",
34
44
  "spec/meme_spec.rb",
45
+ "spec/search_spec.rb",
35
46
  "spec/spec.opts",
36
47
  "spec/spec_helper.rb"
37
48
  ]
@@ -42,7 +53,9 @@ Gem::Specification.new do |s|
42
53
  s.summary = %q{Ruby Yahoo! Meme API}
43
54
  s.test_files = [
44
55
  "spec/meme_spec.rb",
45
- "spec/spec_helper.rb"
56
+ "spec/search_spec.rb",
57
+ "spec/spec_helper.rb",
58
+ "spec/info_spec.rb"
46
59
  ]
47
60
 
48
61
  if s.respond_to? :specification_version then
@@ -0,0 +1,112 @@
1
+ {
2
+ "query":{
3
+ "count":"10",
4
+ "created":"2010-04-01T10:31:02Z",
5
+ "lang":"en-US",
6
+ "updated":"2010-04-01T10:31:02Z",
7
+ "uri":"https://query.yahooapis.com/v1/yql?q=SELECT+*+FROM+meme.followers+WHERE+owner_guid%3D%27EMREXCV4R5OTM3CZW3HBD5QAGY%27",
8
+ "results":{
9
+ "meme":[{
10
+ "guid":"J7B4OWIQWFXHJDYZWAARA2RYZE",
11
+ "name":"zigotto",
12
+ "title":"Zigotto",
13
+ "description":"Criação e Desenvolvimento para todo Vale do Paraíba e Brasil",
14
+ "url":"http://meme.yahoo.com/zigotto/",
15
+ "avatar_url":"http://d.yimg.com/gg/zigotto/avatars/c0fbd3fe6c109cebaf0c0c871e45e338b7c04ed8.png",
16
+ "language":"pt",
17
+ "followers":"1"
18
+ },
19
+ {
20
+ "guid":"2FPYHHRLJK5XMBSSXNL5NQGGB4",
21
+ "name":"fabilouco8000",
22
+ "title":"Fabilouco8000",
23
+ "description":"Diversão é comigo mesmo!",
24
+ "url":"http://meme.yahoo.com/fabilouco8000/",
25
+ "avatar_url":"http://d.yimg.com/gg/fabilouco8000/avatars/73d91d124dbf68ad706798de4ed0a3f4661446f3.jpeg",
26
+ "language":"pt",
27
+ "followers":"510"
28
+ },
29
+ {
30
+ "guid":"6M46NNM2LO5YQ7XNYCU5MVITKE",
31
+ "name":"acsouza09",
32
+ "title":"acsouza09",
33
+ "description":"Sou uma pessoa feliz, extremamente vaidoosa!",
34
+ "url":"http://meme.yahoo.com/acsouza09/",
35
+ "avatar_url":"http://d.yimg.com/gg/acsouza09/avatars/013fb916b1362f68acbbea5ec643012380d942e6.jpeg",
36
+ "language":"pt",
37
+ "followers":"3"
38
+ },
39
+ {
40
+ "guid":"CETYPLO3WBYWGEBEUXMC2FO4EU",
41
+ "name":"marcetolosa",
42
+ "title":"Marcetolosa",
43
+ "description":"BA - Yahoo!",
44
+ "url":"http://meme.yahoo.com/marcetolosa/",
45
+ "avatar_url":"http://d.yimg.com/gg/marcetolosa/avatars/59a1e60f21b9c5d478ec1816dd827bdde64b8f52.jpeg",
46
+ "language":"es",
47
+ "followers":"1183"
48
+ },
49
+ {
50
+ "guid":"NEUNUDTFXKL4Q3IQK2JEH4NMDI",
51
+ "name":"edercosta",
52
+ "title":"edercosta",
53
+ "description":"desenvolvedor web, só!",
54
+ "url":"http://meme.yahoo.com/edercosta/",
55
+ "avatar_url":"http://d.yimg.com/gg/edercosta/avatars/7e7b464e2af1e413ca421101d57b3c5684325076.jpeg",
56
+ "language":"pt",
57
+ "followers":"6"
58
+ },
59
+ {
60
+ "guid":"GNQZXVPVCUUVFODPRUGPYSK5LA",
61
+ "name":"marcelofraga",
62
+ "title":"Marcelo Fraga",
63
+ "description":"Web Developer",
64
+ "url":"http://meme.yahoo.com/marcelofraga/",
65
+ "avatar_url":"http://d.yimg.com/gg/marcelofraga/avatars/8dc4fde72c2f718386a44f52c5384ed83f7eea67.jpeg",
66
+ "language":"pt",
67
+ "followers":"5"
68
+ },
69
+ {
70
+ "guid":"SNTS64IYOYICF2TMB2QN2EGG2Y",
71
+ "name":"berg_te_amo",
72
+ "title":"°•๋ °Loறa°•๋ °",
73
+ "description":"°•๋ °navegando no றar dos றeus sonhos°•๋ °",
74
+ "url":"http://meme.yahoo.com/berg_te_amo/",
75
+ "avatar_url":"http://d.yimg.com/gg/berg_te_amo/avatars/24872b74162ea7ca3a0db798e25dccd7250aac33.jpeg",
76
+ "language":"pt",
77
+ "followers":"403"
78
+ },
79
+ {
80
+ "guid":"M7OYDALP7ODIEAH6W2ZUQTVIB4",
81
+ "name":"matiaz",
82
+ "title":"Matiaz",
83
+ "description":"Yahoo! Argentina",
84
+ "url":"http://meme.yahoo.com/matiaz/",
85
+ "avatar_url":"http://d.yimg.com/gg/matiaz/avatars/711923e770e1c66f86e8ceb2743dd09e0d6a35cf.jpeg",
86
+ "language":"en",
87
+ "followers":"1492"
88
+ },
89
+ {
90
+ "guid":"QLET3EJ5XXYIVAHBOQVSPZB6BM",
91
+ "name":"mariano",
92
+ "title":"mariano",
93
+ "description":"Coisas engraçadas e informática!! O.o",
94
+ "url":"http://meme.yahoo.com/mariano/",
95
+ "avatar_url":"http://d.yimg.com/gg/mariano/avatars/13311faeddf76382df7806b8ad188e8b455cd2ca.jpeg",
96
+ "language":"pt",
97
+ "followers":"287"
98
+ },
99
+ {
100
+ "guid":"LKMTQUYO4NA3HWE2MHPCC2UVOU",
101
+ "name":"willweb",
102
+ "title":"willweb",
103
+ "description":"Imerso no mundo digital, para descobrir intenções e realidades físicas!",
104
+ "url":"http://meme.yahoo.com/willweb/",
105
+ "avatar_url":"http://d.yimg.com/gg/willweb/avatars/480c433a64d2b433e618cd6acb7436dafffe5299.jpeg",
106
+ "language":"pt",
107
+ "followers":"12283"
108
+ }
109
+ ]
110
+ }
111
+ }
112
+ }