jugyo-termtter 0.3.3 → 0.3.5

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/Rakefile CHANGED
@@ -9,7 +9,7 @@ $hoe = Hoe.new('termtter', Termtter::VERSION) do |p|
9
9
  p.post_install_message = 'PostInstall.txt' # TODO remove if post-install message not required
10
10
  p.rubyforge_name = p.name # TODO this is default value
11
11
  p.extra_deps = [
12
- ['nokogiri'],
12
+ ['json'],
13
13
  ['configatron'],
14
14
  ]
15
15
  #p.extra_dev_deps = [
@@ -13,7 +13,7 @@ Termtter::Client.add_hook do |statuses, event|
13
13
  text = s.text.gsub("\n", '')
14
14
  color_num = colors[s.user_screen_name.hash % colors.size]
15
15
  status = "#{s.user_screen_name}: #{text}"
16
- unless s.in_reply_to_status_id && s.in_reply_to_status_id.empty?
16
+ unless s.in_reply_to_status_id && s.in_reply_to_status_id.nil?
17
17
  status += " (reply to #{s.in_reply_to_status_id})"
18
18
  end
19
19
 
data/lib/termtter.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  require 'rubygems'
2
- require 'nokogiri'
2
+ require 'json'
3
3
  require 'open-uri'
4
4
  require 'cgi'
5
5
  require 'readline'
@@ -10,7 +10,7 @@ $:.unshift(File.dirname(__FILE__)) unless
10
10
  $:.include?(File.dirname(__FILE__)) || $:.include?(File.expand_path(File.dirname(__FILE__)))
11
11
 
12
12
  module Termtter
13
- VERSION = '0.3.3'
13
+ VERSION = '0.3.5'
14
14
 
15
15
  class CommandNotFound < StandardError; end
16
16
 
@@ -59,12 +59,12 @@ module Termtter
59
59
  end
60
60
 
61
61
  def list_friends_timeline
62
- statuses = get_timeline("http://twitter.com/statuses/friends_timeline.xml")
62
+ statuses = get_timeline("http://twitter.com/statuses/friends_timeline.json")
63
63
  call_hooks(statuses, :list_friends_timeline)
64
64
  end
65
65
 
66
66
  def update_friends_timeline
67
- uri = "http://twitter.com/statuses/friends_timeline.xml"
67
+ uri = "http://twitter.com/statuses/friends_timeline.json"
68
68
  if @since_id && !@since_id.empty?
69
69
  uri += "?since_id=#{@since_id}"
70
70
  end
@@ -74,23 +74,19 @@ module Termtter
74
74
  end
75
75
 
76
76
  def get_user_timeline(screen_name)
77
- statuses = get_timeline("http://twitter.com/statuses/user_timeline/#{screen_name}.xml")
77
+ statuses = get_timeline("http://twitter.com/statuses/user_timeline/#{screen_name}.json")
78
78
  call_hooks(statuses, :list_user_timeline)
79
79
  end
80
80
 
81
81
  def search(query)
82
- doc = Nokogiri::XML(open('http://search.twitter.com/search.atom?q=' + CGI.escape(query)))
83
-
84
82
  statuses = []
85
- ns = {'atom' => 'http://www.w3.org/2005/Atom'}
86
- doc.xpath('//atom:entry', ns).each do |node|
83
+
84
+ results = JSON.parse(open('http://search.twitter.com/search.json?q=' + CGI.escape(query)).read)['results']
85
+ results.each do |s|
87
86
  status = Status.new
88
- published = node.xpath('atom:published', ns).text
89
- status.created_at = Time.utc(*ParseDate::parsedate(published)).localtime
90
- status.text = CGI.unescapeHTML(node.xpath('atom:content', ns).text.gsub(/<\/?[^>]*>/, ''))
91
- name = node.xpath('atom:author/atom:name', ns).text
92
- status.user_screen_name = name.scan(/^([^\s]+) /).flatten[0]
93
- status.user_name = name.scan(/\((.*)\)/).flatten[0]
87
+ status.text = s['text']
88
+ status.created_at = Time.utc(*ParseDate::parsedate(s["created_at"])).localtime
89
+ status.user_screen_name = s['from_user']
94
90
  statuses << status
95
91
  end
96
92
 
@@ -99,12 +95,12 @@ module Termtter
99
95
  end
100
96
 
101
97
  def show(id)
102
- statuses = get_timeline("http://twitter.com/statuses/show/#{id}.xml")
98
+ statuses = get_timeline("http://twitter.com/statuses/show/#{id}.json")
103
99
  call_hooks(statuses, :show)
104
100
  end
105
101
 
106
102
  def replies
107
- statuses = get_timeline("http://twitter.com/statuses/replies.xml")
103
+ statuses = get_timeline("http://twitter.com/statuses/replies.json")
108
104
  call_hooks(statuses, :show)
109
105
  end
110
106
 
@@ -120,19 +116,18 @@ module Termtter
120
116
  end
121
117
 
122
118
  def get_timeline(uri, update_since_id = false)
123
- doc = Nokogiri::XML(open(uri, :http_basic_authentication => [@user_name, @password]))
124
-
125
119
  statuses = []
126
- doc.xpath('//status').each do |node|
120
+
121
+ JSON.parse(open(uri, :http_basic_authentication => [@user_name, @password]).read).each do |s|
122
+ u = s["user"]
127
123
  status = Status.new
128
- %w(
129
- id text created_at truncated in_reply_to_status_id in_reply_to_user_id
130
- user/id user/name user/screen_name user/url user/profile_image_url
131
- ).each do |key|
132
- method = "#{key.gsub('/', '_')}=".to_sym
133
- status.send(method, node.xpath(key).text)
124
+ status.created_at = Time.utc(*ParseDate::parsedate(s["created_at"])).localtime
125
+ %w(id text truncated in_reply_to_status_id in_reply_to_user_id).each do |key|
126
+ status.send("#{key}=".to_sym, s[key])
127
+ end
128
+ %w(id name screen_name url profile_image_url).each do |key|
129
+ status.send("user_#{key}=".to_sym, u[key])
134
130
  end
135
- status.created_at = Time.utc(*ParseDate::parsedate(status.created_at)).localtime
136
131
  statuses << status
137
132
  end
138
133
 
@@ -145,7 +140,7 @@ module Termtter
145
140
 
146
141
  def call_commands(text)
147
142
  return if text.empty?
148
-
143
+
149
144
  command_found = false
150
145
  @@commands.each do |key, command|
151
146
  if key =~ text
@@ -17,43 +17,41 @@ class TestTermtter < Test::Unit::TestCase
17
17
  end
18
18
 
19
19
  def test_get_timeline
20
- statuses = swap_open('friends_timeline.xml') { @termtter.get_timeline('') }
20
+ statuses = swap_open('friends_timeline.json') { @termtter.get_timeline('') }
21
21
 
22
22
  assert_equal 3, statuses.size
23
23
 
24
- assert_equal '102', statuses[0].user_id
24
+ assert_equal 102, statuses[0].user_id
25
25
  assert_equal 'test2', statuses[0].user_screen_name
26
26
  assert_equal 'Test User 2', statuses[0].user_name
27
27
  assert_equal 'texttext 2', statuses[0].text
28
28
  assert_equal 'http://twitter.com/test2', statuses[0].user_url
29
- assert_equal 'http://xxx2', statuses[0].user_profile_image_url
30
- assert_equal 'Thu Dec 25 22:19:57 +0900 2008', statuses[0].created_at.to_s
29
+ assert_equal 'http://s3.amazonaws.com/twitter_production/profile_images/000/102.png', statuses[0].user_profile_image_url
30
+ assert_equal 'Sat Jan 03 21:13:45 +0900 2009', statuses[0].created_at.to_s
31
31
 
32
- assert_equal '100', statuses[2].user_id
32
+ assert_equal 100, statuses[2].user_id
33
33
  assert_equal 'test0', statuses[2].user_screen_name
34
34
  assert_equal 'Test User 0', statuses[2].user_name
35
35
  assert_equal 'texttext 0', statuses[2].text
36
36
  assert_equal 'http://twitter.com/test0', statuses[2].user_url
37
- assert_equal 'http://xxx0', statuses[2].user_profile_image_url
38
- assert_equal 'Thu Dec 25 22:10:57 +0900 2008', statuses[2].created_at.to_s
37
+ assert_equal 'http://s3.amazonaws.com/twitter_production/profile_images/000/100.png', statuses[2].user_profile_image_url
38
+ assert_equal 'Sat Jan 03 21:13:45 +0900 2009', statuses[2].created_at.to_s
39
39
  end
40
40
 
41
41
  def test_get_timeline_with_update_since_id
42
- statuses = swap_open('friends_timeline.xml') { @termtter.get_timeline('', true) }
43
- assert_equal '10002', @termtter.since_id
42
+ statuses = swap_open('friends_timeline.json') { @termtter.get_timeline('', true) }
43
+ assert_equal 10002, @termtter.since_id
44
44
  end
45
45
 
46
46
  def test_search
47
- statuses = swap_open('search.atom') { @termtter.search('') }
47
+ statuses = swap_open('search.json') { @termtter.search('') }
48
48
  assert_equal 3, statuses.size
49
49
  assert_equal 'test2', statuses[0].user_screen_name
50
- assert_equal 'Test User 2', statuses[0].user_name
51
50
  assert_equal 'texttext 2', statuses[0].text
52
- assert_equal 'Thu Dec 25 22:52:36 +0900 2008', statuses[0].created_at.to_s
51
+ assert_equal 'Sat Jan 03 21:49:09 +0900 2009', statuses[0].created_at.to_s
53
52
  assert_equal 'test0', statuses[2].user_screen_name
54
- assert_equal 'Test User 0', statuses[2].user_name
55
53
  assert_equal 'texttext 0', statuses[2].text
56
- assert_equal 'Thu Dec 25 22:42:36 +0900 2008', statuses[2].created_at.to_s
54
+ assert_equal 'Sat Jan 03 21:49:09 +0900 2009', statuses[2].created_at.to_s
57
55
  end
58
56
 
59
57
  def test_add_hook
@@ -61,7 +59,7 @@ class TestTermtter < Test::Unit::TestCase
61
59
  Termtter::Client.add_hook do |statuses, event|
62
60
  call_hook = true
63
61
  end
64
- swap_open('search.atom'){ @termtter.search('') }
62
+ swap_open('search.json'){ @termtter.search('') }
65
63
 
66
64
  assert_equal true, call_hook
67
65
 
@@ -71,7 +69,7 @@ class TestTermtter < Test::Unit::TestCase
71
69
 
72
70
  assert_equal false, call_hook
73
71
  end
74
-
72
+
75
73
  def test_add_command
76
74
  command_text = nil
77
75
  matche_text = nil
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jugyo-termtter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.3.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - jugyo
@@ -13,7 +13,7 @@ date: 2009-01-03 00:00:00 -08:00
13
13
  default_executable: termtter
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
- name: nokogiri
16
+ name: json
17
17
  version_requirement:
18
18
  version_requirements: !ruby/object:Gem::Requirement
19
19
  requirements: