wduck 0.1.2 → 0.1.3
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.
- checksums.yaml +4 -4
- data/lib/wduck/duck.rb +7 -15
- data/lib/wduck/duck_helper.rb +58 -29
- data/lib/wduck/version.rb +1 -1
- metadata +17 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a748a3abea56ff5c89d3809a5cead09d1c56ef79
|
4
|
+
data.tar.gz: a577e6afd96eb4a5dd1a14935fb572646332f022
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5d1daea712b6d485697941a8ec45698a55104718b1c6a25e2925e9dd544a7ba20aa55c9611fd3daa8c65ced24475ae1cd4885eed7d0aa85b8faf28b7f4d336b9
|
7
|
+
data.tar.gz: 434dd0d45f2ce43f4753d3082dde24e2dd2c96c98f0d6a241c1ba30d4f6ac657b95a78ab482e66e0f14f2b3d46379df3d2355f817f003bd74cb5e820bac2a8e1
|
data/lib/wduck/duck.rb
CHANGED
@@ -7,25 +7,17 @@ module Wduck
|
|
7
7
|
include Wduck::DuckHelper
|
8
8
|
|
9
9
|
def initialize(query)
|
10
|
-
@
|
10
|
+
@search_data = DuckHelper::SearchData.new(query)
|
11
11
|
end
|
12
12
|
|
13
13
|
def result
|
14
|
-
heading
|
15
|
-
source
|
14
|
+
@search_data.heading # eg: Linus Torvalds
|
15
|
+
@search_data.source # eg: Wikipedia
|
16
16
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
@parsed_data["RelatedTopics"].each_with_index do |result, index|
|
22
|
-
result_text(index, result)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
else
|
27
|
-
answer(@parsed_data)
|
28
|
-
end
|
17
|
+
@search_data.answer # Helsiniki Kernel Hacker
|
18
|
+
# when results has too options like Ruby: a lang, a gem etc
|
19
|
+
@search_data.abstract
|
20
|
+
@search_data.topics_result #the all related results/topics
|
29
21
|
end
|
30
22
|
|
31
23
|
end
|
data/lib/wduck/duck_helper.rb
CHANGED
@@ -7,45 +7,74 @@ module Wduck
|
|
7
7
|
module DuckHelper
|
8
8
|
|
9
9
|
API_URL = "https://api.duckduckgo.com/"
|
10
|
-
FORMAT
|
10
|
+
FORMAT = "json"
|
11
11
|
|
12
|
-
|
13
|
-
http = HTTPClient.new(agent_name: "ddg.rb")
|
14
|
-
args = { q: query, format: FORMAT }
|
15
|
-
data = http.get_content(API_URL, args )
|
16
|
-
JSON.parse data
|
17
|
-
end
|
12
|
+
class SearchData
|
18
13
|
|
19
|
-
|
20
|
-
|
14
|
+
attr_reader :answer_data
|
15
|
+
def initialize(query)
|
16
|
+
@parsed_data = get_json_data(query)
|
17
|
+
@answer_data = check_data("Answer")
|
18
|
+
@abstract_text = check_data("AbstractText")
|
19
|
+
@related_topics = check_data("RelatedTopics")
|
20
|
+
@heading = check_data("Heading")
|
21
|
+
@abstract_source = check_data("AbstractSource")
|
22
|
+
end
|
21
23
|
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
24
|
+
def heading
|
25
|
+
puts "Heading".color(:cyan).underline
|
26
|
+
display(@heading, :red )
|
27
|
+
puts ""
|
28
|
+
end
|
26
29
|
|
27
|
-
|
28
|
-
|
29
|
-
puts
|
30
|
+
def source
|
31
|
+
display(@abstract_source, :yellow)
|
32
|
+
puts " "
|
30
33
|
end
|
31
|
-
end
|
32
34
|
|
33
|
-
|
34
|
-
|
35
|
-
puts "Source: #{make_sane(parsed_data["AbstractSource"])}".color(:yellow)
|
35
|
+
def abstract
|
36
|
+
display(@abstract_text, :green)
|
36
37
|
end
|
37
|
-
end
|
38
38
|
|
39
|
-
|
40
|
-
|
41
|
-
|
39
|
+
def topics_result
|
40
|
+
if @related_topics
|
41
|
+
puts ""
|
42
|
+
puts "Related Topics".color(:white).underline
|
43
|
+
puts ""
|
44
|
+
@related_topics.each do |result|
|
45
|
+
puts "#{display(result["Text"], :green)}" if result["Text"]
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
42
49
|
|
43
|
-
|
44
|
-
|
45
|
-
|
50
|
+
def answer
|
51
|
+
display(@answer_text, :yellow)
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
def get_json_data(query)
|
57
|
+
http = HTTPClient.new(agent_name: "ddg.rb")
|
58
|
+
args = { q: query, format: FORMAT }
|
59
|
+
data = http.get_content(API_URL, args )
|
60
|
+
JSON.parse data
|
61
|
+
end
|
62
|
+
|
63
|
+
def check_data(data)
|
64
|
+
@parsed_data[data].empty? ? nil : @parsed_data[data]
|
65
|
+
end
|
66
|
+
|
67
|
+
def display(type, color)
|
68
|
+
puts make_sane(type).color(color) if type
|
69
|
+
end
|
70
|
+
|
71
|
+
def make_sane(value)
|
72
|
+
# remove html tags, convert to proper utf codes
|
73
|
+
coder = HTMLEntities.new
|
74
|
+
re = /<("[^"]*"|'[^']*'|[^'">])*>/
|
75
|
+
coder.decode(value.gsub(re, '')) #remove html tags, then make proper unicode conversion
|
76
|
+
end
|
46
77
|
|
47
|
-
def answer(parsed_data)
|
48
|
-
puts make_sane(parsed_data["Answer"]).color(:green)
|
49
78
|
end
|
50
79
|
end
|
51
80
|
|
data/lib/wduck/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: wduck
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Vysakh Sreeenivasan
|
@@ -25,7 +25,7 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: httpclient
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - '>='
|
@@ -39,7 +39,7 @@ dependencies:
|
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: htmlentities
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - '>='
|
@@ -53,7 +53,7 @@ dependencies:
|
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: rainbow
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - '>='
|
@@ -67,27 +67,27 @@ dependencies:
|
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
70
|
+
name: gli
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - '
|
73
|
+
- - '='
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version:
|
76
|
-
type: :
|
75
|
+
version: 2.7.0
|
76
|
+
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - '
|
80
|
+
- - '='
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version:
|
82
|
+
version: 2.7.0
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
84
|
+
name: httpclient
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - '>='
|
88
88
|
- !ruby/object:Gem::Version
|
89
89
|
version: '0'
|
90
|
-
type: :
|
90
|
+
type: :runtime
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
@@ -95,19 +95,19 @@ dependencies:
|
|
95
95
|
- !ruby/object:Gem::Version
|
96
96
|
version: '0'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
|
-
name:
|
98
|
+
name: htmlentities
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
|
-
- - '
|
101
|
+
- - '>='
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
103
|
+
version: '0'
|
104
104
|
type: :runtime
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
|
-
- - '
|
108
|
+
- - '>='
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version:
|
110
|
+
version: '0'
|
111
111
|
description: A command line tool to get instant zero click result from ddg
|
112
112
|
email: diplomatv@gmail.com
|
113
113
|
executables:
|