-
Notifications
You must be signed in to change notification settings - Fork 0
/
ConnectionServer.rb
135 lines (113 loc) · 4.88 KB
/
ConnectionServer.rb
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#
# ConnectionServer.rb
# SuperIME
#
# Created by 中園 翔 on 2012/12/11.
# Copyright 2012年 nikezono.net. All rights reserved.
#
# 与えられた文字列とモードごとに、サーバと接続し結果を取得する
# mode
# 0:かな漢字変換
# 1:類語変換
# 2:英語変換
# 3:tiqav
#
# 実装目標
# 1.サーバ&クライアントサイド両方でキャッシュする(redis&levelDB)
# 2.httpではなくWebSocketクライアントとして実装する
# 3.単語の配列を[読み]のみの配列にする?
# trie使うとか?
require 'net/http'
require 'json'
require 'Romakana'
require 'Weblio'
require 'date'
class ConnectionServer
def getCandidates(cand,input,mode)
candidates = []
hiragana = input.roma2hiragana
#分岐
if mode == 0 then
#ひらがなに変換出来ない場合エラーになるので呼ばない
if hiragana != "" then
#Dirty for UIST
hiragana = "とうきょう" if input == "tokyo"
#LevelDBに問い合わせて、存在する場合はそれ使う
if $kanaDB.includes? hiragana then
s = $kanaDB.get(hiragana)
#puts "get leveldb: #{s}"
else
Net::HTTP.start('localhost', 2342) {|http|
response = http.get("/?mode=0&hira=#{hiragana}")
s = response.body.to_s
#puts "insert db :#{$kanaDB.put(hiragana,s)}"
$kanaDB.put(hiragana,s)
}
end
s = JSON.parse(s)
s.each {|text|
candidates.push [text,input]
}
end
#記号
#ここをもう少しロジカルに書きたい
#サーバサイドで実装するべき
if input == "," || input == "." || input == "/" || input == "~" || input == "!" || input == "batu" || input == "maru" || input == "sankaku" || input == "[" || input == "]" || input == "time" || input == "ACM" then
#UIST
candidates.unshift(["2 Penn Plaza, Suite 701 New York, NY 10121-0701"],input) if input == "ACM"
candidates.pop if input == "ACM"
candidates.unshift(["、",input]) if input == ","
candidates.unshift(["。",input]) if input == "."
candidates.unshift(["・",input]) if input == "/"
candidates.unshift(["〜",input]) if input == "~"
candidates.unshift(["!",input]) if input == "!"
candidates.unshift(["☓",input]) if input == "batu"
candidates.unshift(["○",input]) if input == "maru"
candidates.unshift(["△",input]) if input == "sankaku"
candidates.unshift(["「",input]) if input == "["
candidates.unshift(["」",input]) if input == "]"
if input == "time" then
date = Time.now
wdays = ["日", "月", "火", "水", "Wednesday", "金", "土"]
candidates.unshift(["#{wdays[date.wday]}"])
candidates.unshift(["#{date.hour}:#{date.min}"])
candidates.unshift(["#{date.month}/#{date.day}"])
candidates.unshift(["#{date.month}/#{date.day},#{date.hour}:#{date.min}分"])
candidates.unshift(["#{date}"])
end
end
candidates.unshift([input,input]) #英語追加
return candidates.uniq
#類語
elsif mode == 1 then
candidates = Weblio::search(cand,input)
return candidates.uniq
#英語
elsif mode == 2 then
candidates = Ejje::search(cand,input)
return candidates.uniq
#画像
#google Custom SearchのAPIはクエリ制限が厳しすぎる。
#bingのAPIはBasic認証をかけられてしまう。
#yahooは2013年3月から有料化する。
elsif mode == 3 then
#LevelDBに問い合わせて、存在する場合はそれ使う
if $superDB.includes? hiragana then
s = $superDB.get(hiragana)
#puts "get leveldb: #{s}"
else
Net::HTTP.start('localhost', 2342) {|http|
response = http.get("/?mode=3&hira=#{hiragana}")
s = response.body.to_s
$superDB.put(hiragana,s)
}
end
s = JSON.parse(s)
s.each {|text|
candidates.push [text,input]
}
candidates.unshift ["スクリーンショットの撮影","Gyazo"]
return candidates
end
end
end