my_utils 0.0.0 → 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/my_utils/douban.rb +31 -0
- data/lib/my_utils/dsysmas.rb +95 -0
- data/lib/my_utils/strutils.rb +45 -0
- data/lib/my_utils/toputils.rb +106 -0
- data/lib/my_utils.rb +2 -5
- metadata +10 -7
@@ -0,0 +1,31 @@
|
|
1
|
+
require "open-uri"
|
2
|
+
require "nokogiri"
|
3
|
+
require "nokogiri"
|
4
|
+
|
5
|
+
module Douban
|
6
|
+
def self.get_book title
|
7
|
+
target = URI.encode("http://book.douban.com/subject_search?search_text=#{title}")
|
8
|
+
open(target) do |http|
|
9
|
+
doc = Nokogiri::HTML(http.read)
|
10
|
+
book_list = doc.xpath('//li[@class="subject-item"]')
|
11
|
+
book_list.each_with_index do |bk, idx|
|
12
|
+
rate = bk.xpath('//div/span[@class="rating_nums"]')
|
13
|
+
puts "rate: #{rate}"
|
14
|
+
#puts "item #{idx}: #{book}"
|
15
|
+
#puts "\n"
|
16
|
+
=begin
|
17
|
+
rate = book.xpath('//span[@class="rating_nums"]')
|
18
|
+
rate_pl = book.xpath('//span[@class="pl"]')
|
19
|
+
|
20
|
+
puts "rate #{rate}"
|
21
|
+
puts ""
|
22
|
+
=end
|
23
|
+
|
24
|
+
#puts "rate_pl #{rate_pl.content}"
|
25
|
+
end
|
26
|
+
#puts http.read
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
Douban.get_book "C++ primer"
|
@@ -0,0 +1,95 @@
|
|
1
|
+
#encoding:utf-8
|
2
|
+
require './settings'
|
3
|
+
require './domain'
|
4
|
+
require 'digest/md5'
|
5
|
+
require 'httpclient'
|
6
|
+
require 'json'
|
7
|
+
require 'my_utils'
|
8
|
+
|
9
|
+
|
10
|
+
def gen_sign(params)
|
11
|
+
Digest::MD5.hexdigest(Settings.app_secret + params.sort_by { |k,v| k.to_s }.flatten.join + Settings.app_secret).upcase
|
12
|
+
end
|
13
|
+
|
14
|
+
def comment(info)
|
15
|
+
ut = UserToken.where(:taobao_user_id => info['user_id'])[0]
|
16
|
+
=begin
|
17
|
+
comment:
|
18
|
+
seller_id
|
19
|
+
tid
|
20
|
+
comment
|
21
|
+
=end
|
22
|
+
resp = TopUtil.get_top_response(
|
23
|
+
:tid => info['tid'],
|
24
|
+
:result => "good",
|
25
|
+
:role => "seller",
|
26
|
+
:session => ut.access_token,
|
27
|
+
:method => 'taobao.traderate.add',
|
28
|
+
:content => "很好啊,你妹啊")
|
29
|
+
$local_log.info(resp)
|
30
|
+
end
|
31
|
+
|
32
|
+
|
33
|
+
def taobao_stream
|
34
|
+
params={
|
35
|
+
"sign_method" => "md5",
|
36
|
+
"app_key" => Settings.app_key.to_s,
|
37
|
+
"timestamp" => Time.now.strftime("%Y-%m-%d %H:%M:%S")
|
38
|
+
}.sort_by{ |k| k.to_s }
|
39
|
+
|
40
|
+
post_params = {}
|
41
|
+
params.map { |key, value| post_params[key] = value }
|
42
|
+
post_params["sign"] = gen_sign(post_params)
|
43
|
+
c = HTTPClient.new
|
44
|
+
conn = c.post_async(Settings.stream_url, post_params)
|
45
|
+
res = conn.pop
|
46
|
+
msg = ""
|
47
|
+
while str = res.content.read(1)
|
48
|
+
unless(str == "\n")
|
49
|
+
msg = msg+str
|
50
|
+
next
|
51
|
+
end
|
52
|
+
result_json = JSON.parse(msg)
|
53
|
+
|
54
|
+
#TODO处理消息的代码,这里需要改成异步的,消息量大的时候,会产生消息积压
|
55
|
+
code=result_json["packet"]["code"]
|
56
|
+
case code
|
57
|
+
when 200
|
58
|
+
puts "服务器连接成功,连接的服务器为#{result_json["packet"]["msg"]}"
|
59
|
+
$msg_log.info("服务器连接成功,连接的服务器为#{result_json["packet"]["msg"]}")
|
60
|
+
when 201
|
61
|
+
puts "接收到心跳包"
|
62
|
+
$hb_log.info("接收到心跳包")
|
63
|
+
when 202
|
64
|
+
puts "有业务消息推送到,消息为#{result_json["packet"]["msg"]}"
|
65
|
+
$msg_log.info("有业务消息推送到,消息为#{result_json["packet"]["msg"]}")
|
66
|
+
info = result_json['packet']['msg']['notify_trade']
|
67
|
+
comment(info) if info != nil and info['status'] == 'TradeRated'
|
68
|
+
# TODO
|
69
|
+
#TaobaoTrade.stream_trade_msg result_json["packet"]["msg"]
|
70
|
+
when 203
|
71
|
+
puts "有消息丢失,丢失的消息#{result_json["packet"]["msg"]}"
|
72
|
+
$msg_log.info("有消息丢失,丢失的消息#{result_json["packet"]["msg"]}")
|
73
|
+
when 101
|
74
|
+
puts "需要重新连接,已到达最长的服务器连接时间"
|
75
|
+
$msg_log.info("需要重新连接,已到达最长的服务器连接时间")
|
76
|
+
when 102
|
77
|
+
puts "服务器正在升级,需要#{result_json["packet"]["msg"]}秒后进行重连"
|
78
|
+
$msg_log.info("服务器正在升级,需要#{result_json["packet"]["msg"]}秒后进行重连")
|
79
|
+
when 103
|
80
|
+
puts "服务器主动断开连接,需要#{result_json["packet"]["msg"]}秒后进行重连"
|
81
|
+
$msg_log.info("服务器主动断开连接,需要#{result_json["packet"]["msg"]}秒后进行重连")
|
82
|
+
when 104
|
83
|
+
puts "发起了新连接,服务器将要断开此连接,以新连接处理消息请求"
|
84
|
+
$msg_log.info("发起了新连接,服务器将要断开此连接,以新连接处理消息请求")
|
85
|
+
when 105
|
86
|
+
puts "产生大量的消息积压,服务器需要断开连接"
|
87
|
+
else
|
88
|
+
puts "服务器返回了未知的应答码:code=#{result_json["packet"]["code"]},msg=#{result_json["packet"]["msg"]}"
|
89
|
+
$msg_log.info("服务器返回了未知的应答码:code=#{result_json["packet"]["code"]},msg=#{result_json["packet"]["msg"]}")
|
90
|
+
end
|
91
|
+
msg=""
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
taobao_stream
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module Strutils
|
2
|
+
|
3
|
+
def self.reg_iter text, s, e
|
4
|
+
rstart = 0; rend = 0
|
5
|
+
rst_arry = []
|
6
|
+
|
7
|
+
while true
|
8
|
+
rstart = text.index(s, rend)
|
9
|
+
break if rstart == nil
|
10
|
+
|
11
|
+
rend = text.index(e, rstart)
|
12
|
+
len = text.match(e, rstart)[0].length
|
13
|
+
rend = rend + len - 1
|
14
|
+
rst_arry.push(text[rstart..rend])
|
15
|
+
rstart = rend
|
16
|
+
end
|
17
|
+
|
18
|
+
rst_arry
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.strcmp a, b
|
22
|
+
return 0 if a == nil || b == nil
|
23
|
+
|
24
|
+
a = a.strip; b = b.strip
|
25
|
+
|
26
|
+
return 0 if a == "" || b == ""
|
27
|
+
|
28
|
+
len = a.length > b.length ? a.length : b.length
|
29
|
+
dp = Array.new(a.length) {Array.new(b.length, 0)}
|
30
|
+
|
31
|
+
for i in 0..a.length-1
|
32
|
+
for j in 0..b.length-1
|
33
|
+
(dp[i][j] = (a[0] == b[0]? 1 : 0); next) if i == 0 and j == 0
|
34
|
+
(dp[i][j] = (dp[i][j-1] == 1 || a[0] == b[j]? 1 : 0); next) if i == 0
|
35
|
+
(dp[i][j] = (dp[i-1][j] == 1 || a[i] == b[0]? 1 : 0); next) if j == 0
|
36
|
+
|
37
|
+
dp[i][j] = (dp[i-1][j-1] + (a[i] == b[j]? 1 : 0))
|
38
|
+
dp[i][j] = dp[i-1][j] if dp[i][j] < dp[i-1][j]
|
39
|
+
dp[i][j] = dp[i][j-1] if dp[i][j] < dp[i][j-1]
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
return dp[a.length-1][b.length-1] / (len * 1.0)
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,106 @@
|
|
1
|
+
#encoding:utf-8
|
2
|
+
|
3
|
+
require 'digest/md5'
|
4
|
+
require 'httpclient'
|
5
|
+
require 'net/http'
|
6
|
+
require 'json'
|
7
|
+
require 'uri'
|
8
|
+
|
9
|
+
module Toputils
|
10
|
+
|
11
|
+
TOP_URL = 'http://gw.api.taobao.com/router/rest?'
|
12
|
+
STREAM_URL = "http://stream.api.taobao.com/stream"
|
13
|
+
SB_STREAM_URL = "http://stream.api.tbsandbox.com/stream"
|
14
|
+
|
15
|
+
def self.top_get(app_key, app_secret, opts = {})
|
16
|
+
params = {
|
17
|
+
app_key: app_key,
|
18
|
+
format: 'json',
|
19
|
+
v: '2.0',
|
20
|
+
timestamp: (Time.now).strftime("%Y-%m-%d %H:%M:%S"),
|
21
|
+
sign_method: 'md5'
|
22
|
+
}
|
23
|
+
params.merge!(opts)
|
24
|
+
|
25
|
+
sign_str = app_secret + params.sort.flatten.join + app_secret
|
26
|
+
|
27
|
+
params[:sign] = Digest::MD5.hexdigest(sign_str).upcase
|
28
|
+
|
29
|
+
params_str = ''
|
30
|
+
params.each {
|
31
|
+
|k, v| params_str << k.to_s<<'='<<URI.escape(v.to_s).to_s<<'&'
|
32
|
+
}
|
33
|
+
target = TOP_URL + params_str
|
34
|
+
|
35
|
+
res = Net::HTTP.get_response(URI.parse(target))
|
36
|
+
res.body
|
37
|
+
end
|
38
|
+
|
39
|
+
def self.top_stream(options = {})
|
40
|
+
params={
|
41
|
+
"sign_method" => "md5",
|
42
|
+
"app_key" => options[:app_key],
|
43
|
+
"timestamp" => Time.now.strftime("%Y-%m-%d %H:%M:%S")
|
44
|
+
}.sort_by{ |k| k.to_s }
|
45
|
+
|
46
|
+
post_params = {}
|
47
|
+
params.map { |key, value| post_params[key] = value }
|
48
|
+
post_params["sign"] = Digest::MD5.hexdigest(options[:app_secret] + params.sort_by { |k,v| k.to_s }.flatten.join + options[:app_secret]).upcase
|
49
|
+
c = HTTPClient.new
|
50
|
+
|
51
|
+
conn = c.post_async(options[:app_secret].start_with?("sandbox")? SB_STREAM_URL: STREAM_URL, post_params)
|
52
|
+
res = conn.pop
|
53
|
+
msg = ""
|
54
|
+
|
55
|
+
while str = res.content.read(1)
|
56
|
+
unless(str == "\n")
|
57
|
+
msg = msg+str
|
58
|
+
next
|
59
|
+
end
|
60
|
+
result_json = JSON.parse(msg)
|
61
|
+
|
62
|
+
#TODO处理消息的代码,这里需要改成异步的,消息量大的时候,会产生消息积压
|
63
|
+
code=result_json["packet"]["code"]
|
64
|
+
case code
|
65
|
+
when 200
|
66
|
+
puts "服务器连接成功,连接的服务器为#{result_json["packet"]["msg"]}"
|
67
|
+
#$msg_log.info("服务器连接成功,连接的服务器为#{result_json["packet"]["msg"]}")
|
68
|
+
when 201
|
69
|
+
puts "接收到心跳包"
|
70
|
+
#$hb_log.info("接收到心跳包")
|
71
|
+
when 202
|
72
|
+
puts "有业务消息推送到,消息为#{result_json["packet"]["msg"]}"
|
73
|
+
#$msg_log.info("有业务消息推送到,消息为#{result_json["packet"]["msg"]}")
|
74
|
+
info = result_json['packet']['msg']['notify_trade']
|
75
|
+
yield info
|
76
|
+
#comment(info) if info != nil and info['status'] == 'TradeRated'
|
77
|
+
# TODO
|
78
|
+
#TaobaoTrade.stream_trade_msg result_json["packet"]["msg"]
|
79
|
+
when 203
|
80
|
+
puts "有消息丢失,丢失的消息#{result_json["packet"]["msg"]}"
|
81
|
+
#$msg_log.info("有消息丢失,丢失的消息#{result_json["packet"]["msg"]}")
|
82
|
+
when 101
|
83
|
+
puts "需要重新连接,已到达最长的服务器连接时间"
|
84
|
+
#$msg_log.info("需要重新连接,已到达最长的服务器连接时间")
|
85
|
+
when 102
|
86
|
+
puts "服务器正在升级,需要#{result_json["packet"]["msg"]}秒后进行重连"
|
87
|
+
#$msg_log.info("服务器正在升级,需要#{result_json["packet"]["msg"]}秒后进行重连")
|
88
|
+
when 103
|
89
|
+
puts "服务器主动断开连接,需要#{result_json["packet"]["msg"]}秒后进行重连"
|
90
|
+
#$msg_log.info("服务器主动断开连接,需要#{result_json["packet"]["msg"]}秒后进行重连")
|
91
|
+
when 104
|
92
|
+
puts "发起了新连接,服务器将要断开此连接,以新连接处理消息请求"
|
93
|
+
#$msg_log.info("发起了新连接,服务器将要断开此连接,以新连接处理消息请求")
|
94
|
+
when 105
|
95
|
+
puts "产生大量的消息积压,服务器需要断开连接"
|
96
|
+
else
|
97
|
+
puts "服务器返回了未知的应答码:code=#{result_json["packet"]["code"]},msg=#{result_json["packet"]["msg"]}"
|
98
|
+
#$msg_log.info("服务器返回了未知的应答码:code=#{result_json["packet"]["code"]},msg=#{result_json["packet"]["msg"]}")
|
99
|
+
end
|
100
|
+
|
101
|
+
yield result_json
|
102
|
+
|
103
|
+
msg=""
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
data/lib/my_utils.rb
CHANGED
metadata
CHANGED
@@ -5,11 +5,11 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 0
|
8
|
-
-
|
9
|
-
version: 0.0.
|
8
|
+
- 1
|
9
|
+
version: 0.0.1
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
|
-
-
|
12
|
+
- Nick Quaranto
|
13
13
|
autorequire:
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
@@ -18,9 +18,8 @@ date: 2010-04-28 00:00:00 +08:00
|
|
18
18
|
default_executable:
|
19
19
|
dependencies: []
|
20
20
|
|
21
|
-
description:
|
22
|
-
email:
|
23
|
-
- fzuwwl@gmail.com
|
21
|
+
description: A simple hello world gem
|
22
|
+
email: nick@quaran.to
|
24
23
|
executables: []
|
25
24
|
|
26
25
|
extensions: []
|
@@ -29,6 +28,10 @@ extra_rdoc_files: []
|
|
29
28
|
|
30
29
|
files:
|
31
30
|
- lib/my_utils.rb
|
31
|
+
- lib/my_utils/douban.rb
|
32
|
+
- lib/my_utils/dsysmas.rb
|
33
|
+
- lib/my_utils/strutils.rb
|
34
|
+
- lib/my_utils/toputils.rb
|
32
35
|
has_rdoc: true
|
33
36
|
homepage: http://rubygems.org/gems/my_utils
|
34
37
|
licenses: []
|
@@ -60,6 +63,6 @@ rubyforge_project:
|
|
60
63
|
rubygems_version: 1.3.7.1
|
61
64
|
signing_key:
|
62
65
|
specification_version: 3
|
63
|
-
summary: Hola
|
66
|
+
summary: Hola!
|
64
67
|
test_files: []
|
65
68
|
|