tweetabout 0.0.4.1 → 0.0.5.0
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.md +19 -1
- data/lib/tweetabout/sorted_tweets.rb +84 -0
- data/lib/tweetabout/version.rb +1 -1
- data/lib/tweetabout.rb +1 -68
- metadata +4 -3
data/README.md
CHANGED
@@ -14,12 +14,30 @@ The words are are ordered list of the most frequently tweeted words based on the
|
|
14
14
|
|
15
15
|
### Gemfile
|
16
16
|
|
17
|
-
gem "tweetabout", "~> 0.0.
|
17
|
+
gem "tweetabout", "~> 0.0.4.1"
|
18
18
|
|
19
19
|
### Dependencies
|
20
20
|
|
21
21
|
`httparty` because httparty > NET::HTTP
|
22
22
|
|
23
|
+
## Useage
|
24
|
+
|
25
|
+
example: Let's use `@jack`:
|
26
|
+
```ruby
|
27
|
+
#args: a single string
|
28
|
+
|
29
|
+
#Invoke the TweetAbout Module:
|
30
|
+
#call the tweetabout method
|
31
|
+
|
32
|
+
@words = TweetAbout.tweetabout("jack")
|
33
|
+
|
34
|
+
#returns an array of words sorted from most frequent to least
|
35
|
+
#returns an empty array if the user doesn't have any tweets or:
|
36
|
+
# 400 (most likely twitter api limit is exceeded) https://dev.twitter.com/docs/rate-limiting
|
37
|
+
# 404 (most likely user doesn't exist, or twitter's api is down)
|
38
|
+
|
39
|
+
```
|
40
|
+
|
23
41
|
## TODO
|
24
42
|
|
25
43
|
* Test coverage. Actually this a requirement before using this gem in production. And I know I am a bad Rubyist for not writing tests first but I promise to get better.
|
@@ -0,0 +1,84 @@
|
|
1
|
+
module TweetAbout
|
2
|
+
|
3
|
+
class SortedTweets
|
4
|
+
include HTTParty
|
5
|
+
|
6
|
+
def initialize(username)
|
7
|
+
@username = username
|
8
|
+
end
|
9
|
+
|
10
|
+
def sort_tweets
|
11
|
+
get_tweets
|
12
|
+
hash = {}
|
13
|
+
|
14
|
+
@responses.each do |tweet|
|
15
|
+
tweet.split(" ").each do |key|
|
16
|
+
key = key.gsub(/\W/, "").downcase
|
17
|
+
if hash.has_key?(key)
|
18
|
+
hash["#{key}"] += 1
|
19
|
+
else
|
20
|
+
hash.merge!({"#{key}" => 1}) unless bad_key(key)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
sorted_array = hash.sort_by { |keyword, frequency| frequency }.reverse
|
25
|
+
sorted_array.map { |keyword| keyword[0] }
|
26
|
+
end
|
27
|
+
|
28
|
+
def get_tweets
|
29
|
+
options = { :query => {:screen_name => @username, :include_rts => true, :count => 200} }
|
30
|
+
|
31
|
+
base_url = "http://api.twitter.com/1/statuses/user_timeline.json?"
|
32
|
+
|
33
|
+
@responses = []
|
34
|
+
response1 = HTTParty.get("#{base_url}", options)
|
35
|
+
return if response1.code == 404 #invalid username/bad url
|
36
|
+
return if response1.count == 0 #no tweets!
|
37
|
+
return if response1.code == 400 #api limt exceeded
|
38
|
+
start_at_1 = response1.last["id"]
|
39
|
+
response1.each do |object|
|
40
|
+
@responses << object["text"]
|
41
|
+
end
|
42
|
+
|
43
|
+
response2 = HTTParty.get("#{base_url}&max_id=#{start_at_1-1}", options)
|
44
|
+
return if response2.count == 0
|
45
|
+
return if response2.code == 400
|
46
|
+
start_at_2 = response2.last["id"]
|
47
|
+
response2.each do |object|
|
48
|
+
@responses << object["text"]
|
49
|
+
end
|
50
|
+
|
51
|
+
response3 = HTTParty.get("#{base_url}&max_id=#{start_at_2-1}", options)
|
52
|
+
return if response3.count == 0
|
53
|
+
return if response3.code == 400
|
54
|
+
start_at_3 = response3.last["id"]
|
55
|
+
response3.each do |object|
|
56
|
+
@responses << object["text"]
|
57
|
+
end
|
58
|
+
|
59
|
+
response4 = HTTParty.get("#{base_url}&max_id=#{start_at_3-1}", options)
|
60
|
+
return if response4.count == 0
|
61
|
+
return if response4.code == 400
|
62
|
+
start_at_4 = response4.last["id"]
|
63
|
+
response4.each do |object|
|
64
|
+
@responses << object["text"]
|
65
|
+
end
|
66
|
+
|
67
|
+
response5 = HTTParty.get("#{base_url}&max_id=#{start_at_4-1}", options)
|
68
|
+
return if response5.count == 0
|
69
|
+
return if response5.code == 400
|
70
|
+
start_at_5 = response4.last["id"]
|
71
|
+
response5.each do |object|
|
72
|
+
@responses << object["text"]
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def bad_key(key)
|
77
|
+
return true if key.empty?
|
78
|
+
return true if key.start_with?('http')
|
79
|
+
end
|
80
|
+
|
81
|
+
def to_a
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
data/lib/tweetabout/version.rb
CHANGED
data/lib/tweetabout.rb
CHANGED
@@ -2,73 +2,6 @@ require "tweetabout/version"
|
|
2
2
|
require "httparty"
|
3
3
|
|
4
4
|
module TweetAbout
|
5
|
-
|
6
|
-
get_tweets(user)
|
5
|
+
require 'tweetabout/sorted_tweets'
|
7
6
|
|
8
|
-
hash = {}
|
9
|
-
@responses.each do |tweet|
|
10
|
-
tweet.split(" ").each do |key|
|
11
|
-
key = key.gsub(/\W/, "").downcase
|
12
|
-
if hash.has_key?(key)
|
13
|
-
hash["#{key}"] += 1
|
14
|
-
else
|
15
|
-
hash.merge!({"#{key}" => 1}) unless bad_key(key)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
end
|
19
|
-
@sorted_array = hash.sort_by { |keyword, frequency| frequency }.reverse
|
20
|
-
@sorted_array.map { |keyword| keyword[0] }
|
21
|
-
end
|
22
|
-
|
23
|
-
def self.bad_key(key)
|
24
|
-
return true if key.empty?
|
25
|
-
return true if key.start_with?('http')
|
26
|
-
end
|
27
|
-
|
28
|
-
def self.get_tweets(user)
|
29
|
-
count = 200
|
30
|
-
base_url = "http://api.twitter.com/1/statuses/user_timeline.json?screen_name=#{user}&include_rts=true&count=#{count}"
|
31
|
-
|
32
|
-
@responses = []
|
33
|
-
response1 = HTTParty.get("#{base_url}")
|
34
|
-
return if response1.code == 404 #invalid username/bad url
|
35
|
-
return if response1.count == 0 #no tweets!
|
36
|
-
return if response1.code == 400 #api limt exceeded
|
37
|
-
start_at_1 = response1.last["id"]
|
38
|
-
response1.each do |object|
|
39
|
-
@responses << object["text"]
|
40
|
-
end
|
41
|
-
|
42
|
-
response2 = HTTParty.get("#{base_url}&max_id=#{start_at_1-1}")
|
43
|
-
return if response2.count == 0
|
44
|
-
return if response2.code == 400
|
45
|
-
start_at_2 = response2.last["id"]
|
46
|
-
response2.each do |object|
|
47
|
-
@responses << object["text"]
|
48
|
-
end
|
49
|
-
|
50
|
-
response3 = HTTParty.get("#{base_url}&max_id=#{start_at_2-1}")
|
51
|
-
return if response3.count == 0
|
52
|
-
return if response3.code == 400
|
53
|
-
start_at_3 = response3.last["id"]
|
54
|
-
response3.each do |object|
|
55
|
-
@responses << object["text"]
|
56
|
-
end
|
57
|
-
|
58
|
-
response4 = HTTParty.get("#{base_url}&max_id=#{start_at_3-1}")
|
59
|
-
return if response4.count == 0
|
60
|
-
return if response4.code == 400
|
61
|
-
start_at_4 = response4.last["id"]
|
62
|
-
response4.each do |object|
|
63
|
-
@responses << object["text"]
|
64
|
-
end
|
65
|
-
|
66
|
-
response5 = HTTParty.get("#{base_url}&max_id=#{start_at_4-1}")
|
67
|
-
return if response5.count == 0
|
68
|
-
return if response5.code == 400
|
69
|
-
start_at_5 = response4.last["id"]
|
70
|
-
response5.each do |object|
|
71
|
-
@responses << object["text"]
|
72
|
-
end
|
73
|
-
end
|
74
7
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tweetabout
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-08-
|
12
|
+
date: 2012-08-22 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: httparty
|
@@ -40,6 +40,7 @@ files:
|
|
40
40
|
- README.md
|
41
41
|
- Rakefile
|
42
42
|
- lib/tweetabout.rb
|
43
|
+
- lib/tweetabout/sorted_tweets.rb
|
43
44
|
- lib/tweetabout/version.rb
|
44
45
|
- tweetabout.gemspec
|
45
46
|
homepage: ''
|
@@ -62,7 +63,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
62
63
|
version: '0'
|
63
64
|
requirements: []
|
64
65
|
rubyforge_project:
|
65
|
-
rubygems_version: 1.8.
|
66
|
+
rubygems_version: 1.8.24
|
66
67
|
signing_key:
|
67
68
|
specification_version: 3
|
68
69
|
summary: Takes a twitter username and outputs the most frequently tweeted words in
|