Wassruby 0.0.6 → 0.0.7
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.txt +25 -46
- data/example/example.rb +19 -0
- data/lib/wassruby.rb +57 -12
- metadata +12 -12
- data/lib/example/example.rb +0 -25
- data/lib/www/simplejson.rb +0 -285
- data/lib/www/wassruby.rb +0 -182
data/README.txt
CHANGED
@@ -1,46 +1,25 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
wassr.user_id = "foo"
|
27
|
-
|
28
|
-
wassr.get_show.each {|v|
|
29
|
-
puts v["user_login_id"]
|
30
|
-
puts v["text"]
|
31
|
-
}
|
32
|
-
|
33
|
-
wassr.get_user_timeline.each {|v|
|
34
|
-
puts v["user_login_id"]
|
35
|
-
puts v["text"]
|
36
|
-
}
|
37
|
-
|
38
|
-
wassr.get_friends_timeline.each {|v|
|
39
|
-
puts v["user_login_id"]
|
40
|
-
puts v["text"]
|
41
|
-
}
|
42
|
-
|
43
|
-
wassr.get_footmark.each {|v|
|
44
|
-
puts v["nick"]
|
45
|
-
puts v["login_id"]
|
46
|
-
}
|
1
|
+
NAME
|
2
|
+
This is Ruby module Wassruby, Simple Wassr Client.
|
3
|
+
|
4
|
+
VERSION
|
5
|
+
0.0.7
|
6
|
+
|
7
|
+
SYNOPSIS
|
8
|
+
require 'wassruby'
|
9
|
+
#Post a message.
|
10
|
+
client = WWW::Wassr.new("USER_ID", "PASSWORD")
|
11
|
+
client.post("test")
|
12
|
+
|
13
|
+
WWW::Wassr.start("USER_ID", "PASSWORD") { |client|
|
14
|
+
client.post("test")
|
15
|
+
}
|
16
|
+
|
17
|
+
#Module function
|
18
|
+
#Return value : hash of timeline
|
19
|
+
puts WWW::Wassr.get(:public_timeline)
|
20
|
+
puts WWW::Wassr.get(:user_timeline, "USER_ID")
|
21
|
+
|
22
|
+
LICENSE
|
23
|
+
MIT License
|
24
|
+
AUTHOR
|
25
|
+
Takuya Mannami <mtakuya@users.sourceforge.jp>
|
data/example/example.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
require 'wassr'
|
4
|
+
|
5
|
+
user_id = "YOUR WASSR ID"
|
6
|
+
pass = "PASSWORD"
|
7
|
+
|
8
|
+
client = WWW::Wassr.new(user_id, pass)
|
9
|
+
client.post("test")
|
10
|
+
|
11
|
+
#WWW::Wassr.start(user_id, pass) { |client|
|
12
|
+
# client.post("test")
|
13
|
+
#}
|
14
|
+
|
15
|
+
puts "PUBLICK TIMELINE"
|
16
|
+
puts WWW::Wassr.get(:public_timeline)
|
17
|
+
|
18
|
+
puts "USER TIMELINE #{user_id}"
|
19
|
+
puts WWW::Wassr.get(:user_timeline, user_id)
|
data/lib/wassruby.rb
CHANGED
@@ -1,12 +1,57 @@
|
|
1
|
-
|
2
|
-
#
|
3
|
-
|
4
|
-
#
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
1
|
+
#= Simple Wassr Client
|
2
|
+
#Authors:: Takuya Mannami
|
3
|
+
#Version:: 0.0.7 (2009/11/24)
|
4
|
+
#License:: MIT License
|
5
|
+
|
6
|
+
# -*- coding: utf-8 -*-
|
7
|
+
|
8
|
+
require 'open-uri'
|
9
|
+
require 'net/http'
|
10
|
+
require 'cgi'
|
11
|
+
require 'json' #NOTE : RUBY_VERSION > '1.9'
|
12
|
+
|
13
|
+
module WWW
|
14
|
+
class Wassr
|
15
|
+
VERSION = '0.0.7'
|
16
|
+
WASSR = "api.wassr.jp"
|
17
|
+
WASSR_RUBY = "Wassruby"
|
18
|
+
WASSR_API_URL = {
|
19
|
+
:UPDATE => "/statuses/update.json?status=",
|
20
|
+
:PUBLIC_TIMELINE => "/statuses/public_timeline.json",
|
21
|
+
:USER_TIMELINE => "/statuses/user_timeline.json?id=",
|
22
|
+
}
|
23
|
+
|
24
|
+
def initialize(login_id, password)
|
25
|
+
@login_id = login_id
|
26
|
+
@password = password
|
27
|
+
@http = Net::HTTP.new(WASSR, 80)
|
28
|
+
end
|
29
|
+
|
30
|
+
class << self
|
31
|
+
def start(login_id, password, &block)
|
32
|
+
block.call(self.new(login_id, password))
|
33
|
+
end
|
34
|
+
|
35
|
+
def get_res_body_json(api_add)
|
36
|
+
JSON.parse(Net::HTTP.new(WASSR, 80).get(api_add).body)
|
37
|
+
end
|
38
|
+
|
39
|
+
def get(key, user_id="")
|
40
|
+
case key
|
41
|
+
when :public_timeline
|
42
|
+
get_res_body_json(WASSR_API_URL[:PUBLIC_TIMELINE])
|
43
|
+
when :user_timeline
|
44
|
+
get_res_body_json(WASSR_API_URL[:USER_TIMELINE] << user_id)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def post(message)
|
50
|
+
req = Net::HTTP::Post.new(WASSR_API_URL[:UPDATE] <<
|
51
|
+
CGI.escape(message) <<
|
52
|
+
"&source=" << WASSR_RUBY)
|
53
|
+
req.basic_auth(@login_id, @password)
|
54
|
+
res = @http.request(req)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
metadata
CHANGED
@@ -1,20 +1,20 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: Wassruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Takuya Mannami
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date:
|
12
|
+
date: 2009-11-24 00:00:00 +09:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
16
|
-
description:
|
17
|
-
email:
|
16
|
+
description: README
|
17
|
+
email: mtakuya@users.sourceforge.jp
|
18
18
|
executables: []
|
19
19
|
|
20
20
|
extensions: []
|
@@ -23,16 +23,16 @@ extra_rdoc_files:
|
|
23
23
|
- README.txt
|
24
24
|
files:
|
25
25
|
- lib/wassruby.rb
|
26
|
-
-
|
27
|
-
- lib/www/wassruby.rb
|
28
|
-
- lib/example/example.rb
|
26
|
+
- example/example.rb
|
29
27
|
- README.txt
|
30
28
|
has_rdoc: true
|
31
29
|
homepage: http://wassruby.rubyforge.org/
|
30
|
+
licenses:
|
31
|
+
- MIT License
|
32
32
|
post_install_message:
|
33
33
|
rdoc_options:
|
34
34
|
- --main
|
35
|
-
- README
|
35
|
+
- README
|
36
36
|
require_paths:
|
37
37
|
- lib
|
38
38
|
required_ruby_version: !ruby/object:Gem::Requirement
|
@@ -50,9 +50,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
50
50
|
requirements: []
|
51
51
|
|
52
52
|
rubyforge_project: Wassruby
|
53
|
-
rubygems_version: 1.
|
53
|
+
rubygems_version: 1.3.5
|
54
54
|
signing_key:
|
55
|
-
specification_version:
|
56
|
-
summary: Simple Wassr Client
|
55
|
+
specification_version: 3
|
56
|
+
summary: A Simple Wassr Client
|
57
57
|
test_files: []
|
58
58
|
|
data/lib/example/example.rb
DELETED
@@ -1,25 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
require 'wassruby'
|
3
|
-
require 'kconv'
|
4
|
-
|
5
|
-
LOGIN_ID = ''
|
6
|
-
PASSWORD = ''
|
7
|
-
WWW::Wassr.start(LOGIN_ID,PASSWORD){|wassr|
|
8
|
-
wassr.message = "TEST".toutf8
|
9
|
-
wassr.post_message
|
10
|
-
}
|
11
|
-
|
12
|
-
=begin rdoc
|
13
|
-
require 'rubygems'
|
14
|
-
require 'wassruby'
|
15
|
-
require 'kconv'
|
16
|
-
|
17
|
-
LOGIN_ID = ''
|
18
|
-
PASSWORD = ''
|
19
|
-
WWW::Wassr.start(LOGIN_ID,PASSWORD){|wassr|
|
20
|
-
wassr.message = "TEST".toutf8
|
21
|
-
wassr.post_message
|
22
|
-
}
|
23
|
-
=end
|
24
|
-
|
25
|
-
|
data/lib/www/simplejson.rb
DELETED
@@ -1,285 +0,0 @@
|
|
1
|
-
# = Simple JSON parser & builder
|
2
|
-
#
|
3
|
-
# Author:: Chihiro Ito
|
4
|
-
# License:: Public domain (unlike other files)
|
5
|
-
# Support:: http://groups.google.com/group/webos-goodies/
|
6
|
-
#
|
7
|
-
# This file contains two simple JSON processing classes. JsonParser
|
8
|
-
# converts a JSON string to an array or a hash. JsonBuilder performs
|
9
|
-
# vice versa. These classes are standard compliant and are designed for
|
10
|
-
# stability and reliability. Especially JsonParser has UTF-8 validation
|
11
|
-
# functionality so you can avoid some kind of security attack.
|
12
|
-
|
13
|
-
require 'strscan'
|
14
|
-
|
15
|
-
|
16
|
-
# = Simple JSON parser
|
17
|
-
#
|
18
|
-
# This class converts a JSON string to an array or a hash. If *json_str*
|
19
|
-
# contains a JSON form string, you can convert it like below.
|
20
|
-
#
|
21
|
-
# ruby_obj = JsonParser.new.parse(json_str)
|
22
|
-
#
|
23
|
-
# If *json_str* has one or more invalid UTF-8 sequence, JsonParser throws
|
24
|
-
# exception by default. You can change this behavior to replacing with an
|
25
|
-
# arbitrary unicode character. See below for details.
|
26
|
-
class JsonParser
|
27
|
-
|
28
|
-
#:stopdoc:
|
29
|
-
Debug = false
|
30
|
-
Name = 'JsonParser'
|
31
|
-
ERR_IllegalSyntax = "[#{Name}] Syntax error"
|
32
|
-
ERR_IllegalUnicode = "[#{Name}] Illegal unicode sequence"
|
33
|
-
|
34
|
-
StringRegex = /\s*"((?:\\.|[^"\\])*)"/n
|
35
|
-
ValueRegex = /\s*(?:
|
36
|
-
(true)|(false)|(null)| # 1:true, 2:false, 3:null
|
37
|
-
(?:\"((?:\\.|[^\"\\])*)\")| # 4:String
|
38
|
-
([-+]?\d+\.\d+(?:[eE][-+]?\d+)?)| # 5:Float
|
39
|
-
([-+]?\d+)| # 6:Integer
|
40
|
-
(\{)|(\[))/xn # 7:Hash, 8:Array
|
41
|
-
#:startdoc:
|
42
|
-
|
43
|
-
# Create a new instance of JsonParser. *options* can contain these values.
|
44
|
-
# [:validation]
|
45
|
-
# If set to false, UTF-8 validation is disabled. true by default.
|
46
|
-
# [:surrogate]
|
47
|
-
# If set to false, surrogate pair support is disabled. true by default.
|
48
|
-
# [:malformed_chr]
|
49
|
-
# An invalid sequence in JSON string will be replaced with this value.
|
50
|
-
# If set to nil, An exception will be thrown in this situation.
|
51
|
-
# nil by default.
|
52
|
-
def initialize(options = {})
|
53
|
-
@default_validation = options.has_key?(:validation) ? options[:validation] : true
|
54
|
-
@default_surrogate = options.has_key?(:surrogate) ? options[:surrogate] : true
|
55
|
-
@default_malformed_chr = options.has_key?(:malformed_chr) ? options[:malformed_chr] : nil
|
56
|
-
end
|
57
|
-
|
58
|
-
# Convert *str* to an array or hash.
|
59
|
-
# [str]
|
60
|
-
# A JSON form string. This must be encoded using UTF-8.
|
61
|
-
# [options]
|
62
|
-
# Same as new.
|
63
|
-
def parse(str, options = {})
|
64
|
-
@enable_validation = options.has_key?(:validation) ? options[:validation] : @default_validation
|
65
|
-
@enable_surrogate = options.has_key?(:surrogate) ? options[:surrogate] : @default_surrogate
|
66
|
-
@malformed_chr = options.has_key?(:malformed_chr) ? options[:malformed_chr] : @default_malformed_chr
|
67
|
-
@malformed_chr = @malformed_chr[0] if String === @malformed_chr
|
68
|
-
@scanner = StringScanner.new(str)
|
69
|
-
obj = case get_symbol[0]
|
70
|
-
when ?{ then parse_hash
|
71
|
-
when ?[ then parse_array
|
72
|
-
else raise err_msg(ERR_IllegalSyntax)
|
73
|
-
end
|
74
|
-
@scanner = nil
|
75
|
-
obj
|
76
|
-
end
|
77
|
-
|
78
|
-
private #---------------------------------------------------------
|
79
|
-
|
80
|
-
def validate_string(str, malformed_chr = nil)
|
81
|
-
code = 0
|
82
|
-
rest = 0
|
83
|
-
range = nil
|
84
|
-
ucs = []
|
85
|
-
str.each_byte do |c|
|
86
|
-
if rest <= 0
|
87
|
-
case c
|
88
|
-
when 0x01..0x7f then rest = 0 ; ucs << c
|
89
|
-
when 0xc0..0xdf then rest = 1 ; code = c & 0x1f ; range = 0x00080..0x0007ff
|
90
|
-
when 0xe0..0xef then rest = 2 ; code = c & 0x0f ; range = 0x00800..0x00ffff
|
91
|
-
when 0xf0..0xf7 then rest = 3 ; code = c & 0x07 ; range = 0x10000..0x10ffff
|
92
|
-
else ucs << handle_malformed_chr(malformed_chr)
|
93
|
-
end
|
94
|
-
elsif (0x80..0xbf) === c
|
95
|
-
code = (code << 6) | (c & 0x3f)
|
96
|
-
if (rest -= 1) <= 0
|
97
|
-
if !(range === code) || (0xd800..0xdfff) === code
|
98
|
-
code = handle_malformed_chr(malformed_chr)
|
99
|
-
end
|
100
|
-
ucs << code
|
101
|
-
end
|
102
|
-
else
|
103
|
-
ucs << handle_malformed_chr(malformed_chr)
|
104
|
-
rest = 0
|
105
|
-
end
|
106
|
-
end
|
107
|
-
ucs << handle_malformed_chr(malformed_chr) if rest > 0
|
108
|
-
ucs.pack('U*')
|
109
|
-
end
|
110
|
-
|
111
|
-
def handle_malformed_chr(chr)
|
112
|
-
raise err_msg(ERR_IllegalUnicode) unless chr
|
113
|
-
chr
|
114
|
-
end
|
115
|
-
|
116
|
-
def err_msg(err)
|
117
|
-
err + (Debug ? " #{@scanner.string[[0, @scanner.pos - 8].max,16].inspect}" : "")
|
118
|
-
end
|
119
|
-
|
120
|
-
def unescape_string(str)
|
121
|
-
str = str.gsub(/\\(["\\\/bfnrt])/n) do
|
122
|
-
$1.tr('"\\/bfnrt', "\"\\/\b\f\n\r\t")
|
123
|
-
end.gsub(/(\\u[0-9a-fA-F]{4})+/n) do |matched|
|
124
|
-
seq = matched.scan(/\\u([0-9a-fA-F]{4})/n).flatten.map { |c| c.hex }
|
125
|
-
if @enable_surrogate
|
126
|
-
seq.each_index do |index|
|
127
|
-
if seq[index] && (0xd800..0xdbff) === seq[index]
|
128
|
-
n = index + 1
|
129
|
-
raise err_msg(ERR_IllegalUnicode) unless seq[n] && 0xdc00..0xdfff === seq[n]
|
130
|
-
seq[index] = 0x10000 + ((seq[index] & 0x03ff) << 10) + (seq[n] & 0x03ff)
|
131
|
-
seq[n] = nil
|
132
|
-
end
|
133
|
-
end.compact!
|
134
|
-
end
|
135
|
-
seq.pack('U*')
|
136
|
-
end
|
137
|
-
str = validate_string(str, @malformed_chr) if @enable_validation
|
138
|
-
str
|
139
|
-
end
|
140
|
-
|
141
|
-
def get_symbol
|
142
|
-
raise err_msg(ERR_IllegalSyntax) unless @scanner.scan(/\s*(.)/n)
|
143
|
-
@scanner[1]
|
144
|
-
end
|
145
|
-
|
146
|
-
def peek_symbol
|
147
|
-
@scanner.match?(/\s*(.)/n) ? @scanner[1] : nil
|
148
|
-
end
|
149
|
-
|
150
|
-
def parse_string
|
151
|
-
raise err_msg(ERR_IllegalSyntax) unless @scanner.scan(StringRegex)
|
152
|
-
unescape_string(@scanner[1])
|
153
|
-
end
|
154
|
-
|
155
|
-
def parse_value
|
156
|
-
raise err_msg(ERR_IllegalSyntax) unless @scanner.scan(ValueRegex)
|
157
|
-
case
|
158
|
-
when @scanner[1] then true
|
159
|
-
when @scanner[2] then false
|
160
|
-
when @scanner[3] then nil
|
161
|
-
when @scanner[4] then unescape_string(@scanner[4])
|
162
|
-
when @scanner[5] then @scanner[5].to_f
|
163
|
-
when @scanner[6] then @scanner[6].to_i
|
164
|
-
when @scanner[7] then parse_hash
|
165
|
-
when @scanner[8] then parse_array
|
166
|
-
else raise err_msg(ERR_IllegalSyntax)
|
167
|
-
end
|
168
|
-
end
|
169
|
-
|
170
|
-
def parse_hash
|
171
|
-
obj = {}
|
172
|
-
if peek_symbol[0] == ?} then get_symbol ; return obj ; end
|
173
|
-
while true
|
174
|
-
index = parse_string
|
175
|
-
raise err_msg(ERR_IllegalSyntax) unless get_symbol[0] == ?:
|
176
|
-
value = parse_value
|
177
|
-
obj[index] = value
|
178
|
-
case get_symbol[0]
|
179
|
-
when ?} then return obj
|
180
|
-
when ?, then next
|
181
|
-
else raise err_msg(ERR_IllegalSyntax)
|
182
|
-
end
|
183
|
-
end
|
184
|
-
end
|
185
|
-
|
186
|
-
def parse_array
|
187
|
-
obj = []
|
188
|
-
if peek_symbol[0] == ?] then get_symbol ; return obj ; end
|
189
|
-
while true
|
190
|
-
obj << parse_value
|
191
|
-
case get_symbol[0]
|
192
|
-
when ?] then return obj
|
193
|
-
when ?, then next
|
194
|
-
else raise err_msg(ERR_IllegalSyntax)
|
195
|
-
end
|
196
|
-
end
|
197
|
-
end
|
198
|
-
|
199
|
-
end
|
200
|
-
|
201
|
-
# = Simple JSON builder
|
202
|
-
#
|
203
|
-
# This class converts an Ruby object to a JSON string. you can convert
|
204
|
-
# *ruby_obj* like below.
|
205
|
-
#
|
206
|
-
# json_str = JsonBuilder.new.build(ruby_obj)
|
207
|
-
#
|
208
|
-
# *ruby_obj* must satisfy these conditions.
|
209
|
-
# - It must support to_s method, otherwise must be an array, a hash or nil.
|
210
|
-
# - All keys of a hash must support to_s method.
|
211
|
-
# - All values of an array or a hash must satisfy all conditions mentioned above.
|
212
|
-
#
|
213
|
-
# If the *ruby_obj* is not an array or a hash, it will be converted to an array
|
214
|
-
# with a single element.
|
215
|
-
class JsonBuilder
|
216
|
-
|
217
|
-
#:stopdoc:
|
218
|
-
Name = 'JsonBuilder'
|
219
|
-
ERR_NestIsTooDeep = "[#{Name}] Array / Hash nested too deep."
|
220
|
-
ERR_NaN = "[#{Name}] NaN and Infinite are not permitted in JSON."
|
221
|
-
#:startdoc:
|
222
|
-
|
223
|
-
# Create a new instance of JsonBuilder. *options* can contain these values.
|
224
|
-
# [:max_nest]
|
225
|
-
# If Array / Hash is nested more than this value, an exception would be thrown.
|
226
|
-
# 64 by default.
|
227
|
-
# [:nan]
|
228
|
-
# NaN is replaced with this value. If nil or false, an exception will be thrown.
|
229
|
-
# nil by default.
|
230
|
-
def initialize(options = {})
|
231
|
-
@default_max_nest = options.has_key?(:max_nest) ? options[:max_nest] : 64
|
232
|
-
@default_nan = options.has_key?(:nan) ? options[:nan] : nil
|
233
|
-
end
|
234
|
-
|
235
|
-
# Convert *obj* to a JSON form string.
|
236
|
-
# [obj]
|
237
|
-
# A ruby object. this object must satisfy all conditions mentioned above.
|
238
|
-
# [options]
|
239
|
-
# Same as new.
|
240
|
-
def build(obj, options = {})
|
241
|
-
@max_nest = options.has_key?(:max_nest) ? options[:max_nest] : @default_max_nest
|
242
|
-
@nan = options.has_key?(:nan) ? options[:nan] : @default_nan
|
243
|
-
case obj
|
244
|
-
when Array then build_array(obj, 0)
|
245
|
-
when Hash then build_object(obj, 0)
|
246
|
-
else build_array([obj], 0)
|
247
|
-
end
|
248
|
-
end
|
249
|
-
|
250
|
-
private #---------------------------------------------------------
|
251
|
-
|
252
|
-
def escape(str)
|
253
|
-
str.gsub(/[^\x20-\x21\x23-\x5b\x5d-\xff]/n) do |chr|
|
254
|
-
if chr[0] != 0 && (index = "\"\\/\b\f\n\r\t".index(chr[0]))
|
255
|
-
"\\" + '"\\/bfnrt'[index, 1]
|
256
|
-
else
|
257
|
-
sprintf("\\u%04x", chr[0])
|
258
|
-
end
|
259
|
-
end
|
260
|
-
end
|
261
|
-
|
262
|
-
def build_value(obj, level)
|
263
|
-
case obj
|
264
|
-
when Integer, TrueClass, FalseClass then obj.to_s
|
265
|
-
when Float then raise ERR_NaN unless obj.finite? || (obj = @nan) ; obj.to_s
|
266
|
-
when NilClass then 'null'
|
267
|
-
when Array then build_array(obj, level + 1)
|
268
|
-
when Hash then build_object(obj, level + 1)
|
269
|
-
else "\"#{escape(obj.to_s)}\""
|
270
|
-
end
|
271
|
-
end
|
272
|
-
|
273
|
-
def build_array(obj, level)
|
274
|
-
raise ERR_NestIsTooDeep if level >= @max_nest
|
275
|
-
'[' + obj.map { |item| build_value(item, level) }.join(',') + ']'
|
276
|
-
end
|
277
|
-
|
278
|
-
def build_object(obj, level)
|
279
|
-
raise ERR_NestIsTooDeep if level >= @max_nest
|
280
|
-
'{' + obj.map do |item|
|
281
|
-
"#{build_value(item[0].to_s,level)}:#{build_value(item[1],level)}"
|
282
|
-
end.join(',') + '}'
|
283
|
-
end
|
284
|
-
|
285
|
-
end
|
data/lib/www/wassruby.rb
DELETED
@@ -1,182 +0,0 @@
|
|
1
|
-
#
|
2
|
-
#= Simple Wassr Client
|
3
|
-
#Authors:: Takuya Mannami
|
4
|
-
#Version:: 0.0.6 (2008/10/12)
|
5
|
-
#License:: MIT License
|
6
|
-
#
|
7
|
-
#==Wassruby use simplejson.rb
|
8
|
-
#WebOS Goodies (http://webos-goodies.jp/archives/51071565.html)
|
9
|
-
#
|
10
|
-
#Simple JSON parser & builde(http://rubyforge.org/snippet/detail.php?type=snippet&id=148)
|
11
|
-
|
12
|
-
require 'open-uri'
|
13
|
-
require 'net/http'
|
14
|
-
require 'cgi'
|
15
|
-
require 'www/simplejson'
|
16
|
-
|
17
|
-
module WWW
|
18
|
-
class Wassr
|
19
|
-
VERSION = '0.0.6'
|
20
|
-
WASSR = "api.wassr.jp"
|
21
|
-
|
22
|
-
WASSR_API_URI = {
|
23
|
-
:UPDATE => "/statuses/update.json?status=",
|
24
|
-
:USER_TIMELINE => "/statuses/user_timeline.json?id=",
|
25
|
-
:FRIENDS_TIMELINE => "/statuses/friends_timeline.json?id=",
|
26
|
-
:PUBLIC_TIMELINE => "/statuses/public_timeline.json",
|
27
|
-
:FOOTMARK => "/footmark/recent.json",
|
28
|
-
:SHOW => "/statuses/show.json?id=",
|
29
|
-
:FRIENDS => "/statuses/friends.json",
|
30
|
-
:FOLLOWERS => "/statuses/followers.json",
|
31
|
-
}
|
32
|
-
|
33
|
-
###
|
34
|
-
#login id
|
35
|
-
attr_accessor :VERSION
|
36
|
-
attr_accessor :login_id
|
37
|
-
#password
|
38
|
-
attr_accessor :password
|
39
|
-
#post message
|
40
|
-
attr_accessor :message
|
41
|
-
###
|
42
|
-
|
43
|
-
###
|
44
|
-
#friend id or user id
|
45
|
-
attr_accessor :user_id
|
46
|
-
###
|
47
|
-
|
48
|
-
#wassr = WWW::Wassr.new('LOGIN_ID', 'PASSWORD')
|
49
|
-
def initialize(login_id, password)
|
50
|
-
###
|
51
|
-
@login_id = login_id
|
52
|
-
@password = password
|
53
|
-
###
|
54
|
-
|
55
|
-
###
|
56
|
-
@message = nil
|
57
|
-
@escape_message = nil
|
58
|
-
@user_id = nil
|
59
|
-
###
|
60
|
-
|
61
|
-
###
|
62
|
-
@http_obj = Net::HTTP.new(WASSR,80)
|
63
|
-
#using simplejson.rb
|
64
|
-
@jp_obj = JsonParser.new
|
65
|
-
###
|
66
|
-
end
|
67
|
-
|
68
|
-
#
|
69
|
-
#WWW::Wassr.start('LOGIN_ID', 'PASSWORD') {|wassr|
|
70
|
-
#}
|
71
|
-
#
|
72
|
-
def Wassr.start(login_id, password)
|
73
|
-
if block_given?
|
74
|
-
yield self.new(login_id, password)
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
|
79
|
-
#------------------------------------------------------
|
80
|
-
def json_parse(response_body) # :nodoc:
|
81
|
-
return @jp_obj.parse(response_body)
|
82
|
-
end
|
83
|
-
|
84
|
-
def get_http_response_body(uri) #:nodoc:
|
85
|
-
res = @http_obj.get(uri)
|
86
|
-
return res.body
|
87
|
-
end
|
88
|
-
|
89
|
-
def get_val(uri) # :nodoc:
|
90
|
-
res_body = get_http_response_body(uri)
|
91
|
-
json_parse(res_body)
|
92
|
-
end
|
93
|
-
|
94
|
-
#wasssr.message = 'test'
|
95
|
-
#
|
96
|
-
#wassr.post_message # => send message 'test'
|
97
|
-
def post_message
|
98
|
-
@escape_message = escape(@message)
|
99
|
-
req = Net::HTTP::Post.new(WASSR_API_URI[:UPDATE]+"#{@escape_message}&source=Wassruby")
|
100
|
-
req.basic_auth @login_id, @password
|
101
|
-
res = @http_obj.request(req)
|
102
|
-
return res
|
103
|
-
end
|
104
|
-
|
105
|
-
#wassr.user_id = 'FRIEND_ID'
|
106
|
-
#
|
107
|
-
#wassr.get_friends_timeline.each {|v|
|
108
|
-
# puts v["user_login_id"]
|
109
|
-
# puts v["text"]
|
110
|
-
#}
|
111
|
-
def get_friends_timeline
|
112
|
-
get_val(WASSR_API_URI[:FRIENDS_TIMELINE]+"#{@user_id.to_s}")
|
113
|
-
end
|
114
|
-
|
115
|
-
#wassr.get_public_timeline.each {|v|
|
116
|
-
# puts v[0]["user_login_id"]
|
117
|
-
# puts v[0]["text"]
|
118
|
-
#}
|
119
|
-
def get_public_timeline
|
120
|
-
get_val(WASSR_API_URI[:PUBLIC_TIMELINE])
|
121
|
-
end
|
122
|
-
|
123
|
-
#wassr.user_id = "foo"
|
124
|
-
#
|
125
|
-
#wassr.get_user_timeline.each {|v|
|
126
|
-
# puts v["user_login_id"]
|
127
|
-
# puts v["text"]
|
128
|
-
#}
|
129
|
-
def get_user_timeline
|
130
|
-
get_val(WASSR_API_URI[:USER_TIMELINE]+"#{@user_id.to_s}")
|
131
|
-
end
|
132
|
-
|
133
|
-
#
|
134
|
-
#wassr.user_id = "foo"
|
135
|
-
#
|
136
|
-
#wassr.get_show.each {|v|
|
137
|
-
# puts v["user_login_id"]
|
138
|
-
# puts v["text"]
|
139
|
-
#}
|
140
|
-
def get_show
|
141
|
-
get_val(WASSR_API_URI[:SHOW]+"#{@user_id.to_s}")
|
142
|
-
end
|
143
|
-
|
144
|
-
#wassr.get_friends.each{|v|
|
145
|
-
# puts v["name"]
|
146
|
-
# puts v["screen_name"]
|
147
|
-
#}
|
148
|
-
def get_friends
|
149
|
-
req = Net::HTTP::Get.new(WASSR_API_URI[:FRIENDS])
|
150
|
-
req.basic_auth @login_id, @password
|
151
|
-
res = @http_obj.request(req)
|
152
|
-
json_parse(res.body)
|
153
|
-
end
|
154
|
-
|
155
|
-
#wassr.get_followers{|v|
|
156
|
-
# puts v["name"]
|
157
|
-
# puts v["screen_name"]
|
158
|
-
#}
|
159
|
-
def get_followers
|
160
|
-
req = Net::HTTP::Get.new(WASSR_API_URI[:FOLLOWERS])
|
161
|
-
req.basic_auth @login_id, @password
|
162
|
-
res = @http_obj.request(req)
|
163
|
-
json_parse(res.body)
|
164
|
-
end
|
165
|
-
|
166
|
-
#wassr.get_footmark.each {|v|
|
167
|
-
# puts v["nick"]
|
168
|
-
# puts v["login_id"]
|
169
|
-
#}
|
170
|
-
def get_footmark
|
171
|
-
req = Net::HTTP::Get.new(WASSR_API_URI[:FOOTMARK])
|
172
|
-
req.basic_auth @login_id, @password
|
173
|
-
json_parse(@http_obj.request(req).body)
|
174
|
-
end
|
175
|
-
|
176
|
-
#------------------------------------------------------
|
177
|
-
|
178
|
-
def escape(str) # :nodoc:
|
179
|
-
return CGI.escape(str)
|
180
|
-
end
|
181
|
-
end
|
182
|
-
end
|