Wassruby 0.0.6 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- 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
|