my_utils 0.0.0 → 0.0.1
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/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
|
|