duckgo 1.1.0
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 +7 -0
- data/.gitignore +1 -0
- data/.rake_tasks~ +6 -0
- data/.vscode/launch.json +11 -0
- data/LICENSE +21 -0
- data/README.md +37 -0
- data/Rakefile +2 -0
- data/bin/duckgo +40 -0
- data/bin/setup +6 -0
- data/docs/README.md +42 -0
- data/docs/getting_data.md +93 -0
- data/duckgo.gemspec +28 -0
- data/lib/duckgo.rb +176 -0
- data/lib/duckgo/version.rb +3 -0
- metadata +89 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: d0d934faf234d88f43a383ecfa3e20dd1aa1e58f
|
4
|
+
data.tar.gz: 7314de47148059cd100b1b7ac61121213a490757
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c81412466434d637c53743ca276415f49c0c4b0a6a4c55b0ae601fa55d7df053df4bae1a62827824138fdc6854f9719723ffc7e0f286aefd77b8f49ac5e53ac8
|
7
|
+
data.tar.gz: 53ca76ff164324590185fd019fd92771ba064cbf03f46031bda5164037bdaea1b7ac1be2775fc7e600acc881ab841126a07f59b4d8fbc1c210ca37ecdbf2d79f
|
data/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
pkg
|
data/.rake_tasks~
ADDED
data/.vscode/launch.json
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
MIT License
|
2
|
+
|
3
|
+
Copyright (c) 2016 Daniel E
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
13
|
+
copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
21
|
+
SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
# DuckGo - API wrapper for DuckDuckGo
|
2
|
+
|
3
|
+
[](https://badge.fury.io/rb/duckgo)
|
4
|
+
|
5
|
+
## What it does
|
6
|
+
|
7
|
+
DuckGo is a RubyGem library and command line tool for searching with DuckDuckGo.
|
8
|
+
By default, it puts out only the relevant information, but when told, it will dump
|
9
|
+
all the data you could ask for. This tool aims to give access to most of the
|
10
|
+
features from the official API.
|
11
|
+
|
12
|
+
## Installation
|
13
|
+
|
14
|
+
Install with RubyGems:
|
15
|
+
|
16
|
+
+ `sudo gem install duckgo`
|
17
|
+
|
18
|
+
Then include this in your scripts:
|
19
|
+
|
20
|
+
```ruby
|
21
|
+
require 'duckgo'
|
22
|
+
include DuckGo
|
23
|
+
|
24
|
+
# Your stuff here
|
25
|
+
```
|
26
|
+
|
27
|
+
|
28
|
+
## API and Usage
|
29
|
+
|
30
|
+
Check out the [documentation](https://github.com/wlib/duckgo/tree/master/docs)
|
31
|
+
## Contribute
|
32
|
+
|
33
|
+
If you use and enjoy DuckGo...
|
34
|
+
|
35
|
+
[Fork the project](https://github.com/wlib/duckgo/fork)
|
36
|
+
|
37
|
+
## [MIT License](https://github.com/wlib/duckgo/blob/master/LICENSE)
|
data/Rakefile
ADDED
data/bin/duckgo
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# DuckGo is a RubyGem library and command line tool for searching with DuckDuckGo.
|
3
|
+
# By default, it puts out only the relevant information, but when told, it will dump
|
4
|
+
# all the data you could ask for. This tool aims to give access to most of the
|
5
|
+
# features from the official API.
|
6
|
+
# Daniel Ethridge
|
7
|
+
|
8
|
+
require "duckgo"
|
9
|
+
include DuckGo
|
10
|
+
require "duckgo/version"
|
11
|
+
|
12
|
+
# If there are no arguments...
|
13
|
+
if ARGV.length == 0
|
14
|
+
puts "Hmm..."
|
15
|
+
exit
|
16
|
+
end
|
17
|
+
|
18
|
+
help = """DuckGo lets you search duckduckgo.com for instant answers
|
19
|
+
|
20
|
+
duckgo [--help | -h] : Display this help
|
21
|
+
duckgo [--version | -V] : Display version
|
22
|
+
duckgo something searchable : Auto-handle the search
|
23
|
+
duckgo \!gem duckgo : Use !bang syntax to search a specific site
|
24
|
+
|
25
|
+
View docs and API on https://github.com/wlib/duckgo
|
26
|
+
Made by Daniel Ethridge | git.io/de
|
27
|
+
"""
|
28
|
+
|
29
|
+
# Argument "parser" if you want to call it that
|
30
|
+
case ARGV[0]
|
31
|
+
when "--help", "-h"
|
32
|
+
puts help
|
33
|
+
exit
|
34
|
+
when "--version", "-V"
|
35
|
+
puts "DuckGo v#{VERSION}"
|
36
|
+
exit
|
37
|
+
else
|
38
|
+
handle(ARGV[0..-1].join(" "))
|
39
|
+
exit
|
40
|
+
end
|
data/bin/setup
ADDED
data/docs/README.md
ADDED
@@ -0,0 +1,42 @@
|
|
1
|
+
# Basic API Usage and Quick Start
|
2
|
+
|
3
|
+
## Example
|
4
|
+
|
5
|
+
Here's the output of a topic summary request for ["unix"](http://api.duckduckgo.com/?q=unix&o=json&pretty=1), there is a huge amount of extra noise.
|
6
|
+
|
7
|
+
Now with automatic relevant data handling with `handle()`, we can extract the information
|
8
|
+
we want. Here's how:
|
9
|
+
```Ruby
|
10
|
+
require 'yaml'
|
11
|
+
require 'duckgo'
|
12
|
+
include DuckGo
|
13
|
+
|
14
|
+
result = handle("unix")
|
15
|
+
puts result.to_yaml
|
16
|
+
```
|
17
|
+
|
18
|
+
And this is the *now filtered* result:
|
19
|
+
|
20
|
+
```YAML
|
21
|
+
---
|
22
|
+
Heading: Unix
|
23
|
+
Entity: os
|
24
|
+
Type: Article
|
25
|
+
Description: Unix is a family of multitasking, multiuser computer operating systems
|
26
|
+
that derive from the original AT&T Unix, developed starting in the 1970s at the
|
27
|
+
Bell Labs research center by Ken Thompson, Dennis Ritchie, and others.
|
28
|
+
Further Reading: https://en.wikipedia.org/wiki/Unix
|
29
|
+
Related:
|
30
|
+
- Unix Category
|
31
|
+
- Market share of operating systems - The usage share of operating systems is the
|
32
|
+
[...]
|
33
|
+
|
34
|
+
Infobox:
|
35
|
+
Company / developer: Ken Thompson, Dennis Ritchie, Brian Kernighan, Douglas McIlroy,
|
36
|
+
and Joe Ossanna at Bell Labs
|
37
|
+
Written in: C and assembly language
|
38
|
+
[...]
|
39
|
+
|
40
|
+
Results:
|
41
|
+
Official site: http://unix.org
|
42
|
+
```
|
@@ -0,0 +1,93 @@
|
|
1
|
+
# Getting Data
|
2
|
+
|
3
|
+
## get()
|
4
|
+
|
5
|
+
`get()` is the function used to recieve data from any page with any paramaters on any site,
|
6
|
+
but by default knows to just call duckduckgo's api with a paramater hash as the first argument.
|
7
|
+
|
8
|
+
### Arguments
|
9
|
+
|
10
|
+
`get(params, path="/", domain="https://api.duckduckgo.com")`
|
11
|
+
|
12
|
+
+ `params`
|
13
|
+
- A hash with query paramaters
|
14
|
+
+ `path`
|
15
|
+
- The endpoint path
|
16
|
+
+ `domain`
|
17
|
+
- The domain of the website called
|
18
|
+
|
19
|
+
### Usage
|
20
|
+
|
21
|
+
```Ruby
|
22
|
+
duckduckgo = {
|
23
|
+
"q" => "search string",
|
24
|
+
"format" => "json"
|
25
|
+
}
|
26
|
+
|
27
|
+
wikipedia = {
|
28
|
+
"action" => "opensearch",
|
29
|
+
"search" => "wiki"
|
30
|
+
}
|
31
|
+
|
32
|
+
puts get(duckduckgo) #=> "{"DefinitionSource":..."
|
33
|
+
puts get(wikipedia, "/w/api.php", "https://en.wikipedia.org") #=> "["wiki",["Wiki","Wikipedia","Wikimedia..."
|
34
|
+
```
|
35
|
+
|
36
|
+
## get_data()
|
37
|
+
|
38
|
+
This is a wrapper around `get()` to recieve duckduckgo's instant answers data.
|
39
|
+
|
40
|
+
### Arguments
|
41
|
+
|
42
|
+
`get_data(keywords, format=0, skip_disambig=1, no_redirect=1, parse=true)`
|
43
|
+
|
44
|
+
+ `keywords`
|
45
|
+
- The keywords passed into the search
|
46
|
+
+ `format`
|
47
|
+
- The returned format
|
48
|
+
- 0 : json (default)
|
49
|
+
- 1 : xml
|
50
|
+
+ `skip_disambig`
|
51
|
+
- Whether or not to skip a disambiguation result
|
52
|
+
- 0 : don't skip
|
53
|
+
- 1 : skip (default)
|
54
|
+
+ `no_redirect`
|
55
|
+
- If this is a [!bang redirect](https://duckduckgo.com/bang), decide if we should follow the redirect
|
56
|
+
- 0 : follow redirect
|
57
|
+
- 1 : don't redirect (default)
|
58
|
+
+ `parse`
|
59
|
+
- Return a parsed hash instead of a string, only parses if format is json
|
60
|
+
- true : return a hash (default)
|
61
|
+
- false : return a string
|
62
|
+
|
63
|
+
### Usage
|
64
|
+
|
65
|
+
```Ruby
|
66
|
+
require 'yaml'
|
67
|
+
|
68
|
+
data = get_data("something")
|
69
|
+
puts data.to_yaml
|
70
|
+
#=> "---
|
71
|
+
# DefinitionSource: ....
|
72
|
+
```
|
73
|
+
|
74
|
+
## get_favicon()
|
75
|
+
|
76
|
+
Another wrapper that just gets a website's favicon
|
77
|
+
|
78
|
+
### Arguments
|
79
|
+
|
80
|
+
`get_favicon(page)`
|
81
|
+
|
82
|
+
+ `page`
|
83
|
+
- The webpage or site domain to get the favicon from
|
84
|
+
|
85
|
+
### Usage
|
86
|
+
|
87
|
+
```Ruby
|
88
|
+
site = "google.com"
|
89
|
+
file = File.open("#{site}-favicon.ico", "w")
|
90
|
+
favicon = get_favicon(site)
|
91
|
+
file.write(favicon)
|
92
|
+
file.close
|
93
|
+
```
|
data/duckgo.gemspec
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'duckgo/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |gem|
|
7
|
+
gem.name = "duckgo"
|
8
|
+
gem.version = DuckGo::VERSION
|
9
|
+
gem.authors = ["Daniel Ethridge"]
|
10
|
+
gem.email = ["danielethridge@icloud.com"]
|
11
|
+
gem.license = 'MIT'
|
12
|
+
|
13
|
+
gem.summary = %q{DuckGo is a RubyGem library and command line tool for searching with DuckDuckGo.
|
14
|
+
By default, it puts out only the relevant information, but when told, it will dump
|
15
|
+
all the data you could ask for. This tool aims to give access to most of the
|
16
|
+
features from the official API.}
|
17
|
+
gem.homepage = "https://github.com/wlib/duckgo"
|
18
|
+
|
19
|
+
gem.files = `git ls-files -z`.split("\x0").reject do |f|
|
20
|
+
f.match(%r{^(test|spec|features)/})
|
21
|
+
end
|
22
|
+
gem.bindir = "bin"
|
23
|
+
gem.executables = ["duckgo"]
|
24
|
+
gem.require_paths = ["lib"]
|
25
|
+
|
26
|
+
gem.add_development_dependency "bundler", "~> 1.13"
|
27
|
+
gem.add_development_dependency "rake", "~> 10.0"
|
28
|
+
end
|
data/lib/duckgo.rb
ADDED
@@ -0,0 +1,176 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
# Daniel Ethridge
|
3
|
+
|
4
|
+
require 'uri'
|
5
|
+
require 'open-uri'
|
6
|
+
require 'json'
|
7
|
+
require 'yaml'
|
8
|
+
|
9
|
+
module DuckGo
|
10
|
+
# Do a raw api request based on paramaters
|
11
|
+
def get(params, path="/", domain="https://api.duckduckgo.com") # domain can also just be plain duckduckgo.com
|
12
|
+
if params.nil?
|
13
|
+
endpoint = "#{domain}/#{path}"
|
14
|
+
else
|
15
|
+
endpoint = "#{domain}/#{path}?#{URI.encode_www_form(params)}"
|
16
|
+
end
|
17
|
+
body = open(endpoint).read
|
18
|
+
return body
|
19
|
+
end
|
20
|
+
|
21
|
+
# Dump the useful data straight from DuckDuckGo's API
|
22
|
+
# If format is XML, return it as a string even if parse is true
|
23
|
+
def get_data(keywords, format=0, skip_disambig=1, no_redirect=1, parse=true)
|
24
|
+
params = {
|
25
|
+
"q" => keywords,
|
26
|
+
"format" => ["json", "xml"][format],
|
27
|
+
"skip_disambig" => [0, 1][skip_disambig],
|
28
|
+
"no_redirect" => [0, 1][no_redirect]
|
29
|
+
}
|
30
|
+
keywords.split(" ").each do |word|
|
31
|
+
if word.start_with?("!")
|
32
|
+
puts "Warning: '!x word' syntax results in a bang redirect"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
body = get(params)
|
36
|
+
if parse
|
37
|
+
if format == 0
|
38
|
+
return JSON.parse(body)
|
39
|
+
else
|
40
|
+
return body
|
41
|
+
end
|
42
|
+
else
|
43
|
+
return body
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
# Get a website/page's favicon through duckduckgo's proxy
|
48
|
+
def get_favicon(page)
|
49
|
+
favicon = get(nil, "/i/#{page}.ico")
|
50
|
+
if favicon == "GIF89a\x01\x00\x01\x00\x80\x01\x00\x00\x00\x00\xFF\xFF\xFF!\xF9\x04\x01\x00\x00\x01\x00,\x00\x00\x00\x00\x01\x00\x01\x00\x00\x02\x02L\x01\x00;"
|
51
|
+
puts "Response is 200-OK, but content is a generic response"
|
52
|
+
return nil
|
53
|
+
else
|
54
|
+
return favicon
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
# Return data describing the extra info fields
|
59
|
+
def find_extras(data)
|
60
|
+
extras = {}
|
61
|
+
unless data["Infobox"].empty?
|
62
|
+
extras["Infobox"] = {
|
63
|
+
"Total" => data["Infobox"]["content"].length
|
64
|
+
}
|
65
|
+
end
|
66
|
+
unless data["Results"].empty?
|
67
|
+
extras["Results"] = {
|
68
|
+
"Total" => data["Results"].length
|
69
|
+
}
|
70
|
+
end
|
71
|
+
unless data["Answer"].empty?
|
72
|
+
extras["Answer"] = {
|
73
|
+
"Answer" => data["Answer"],
|
74
|
+
"Type" => data["AnswerType"]
|
75
|
+
}
|
76
|
+
end
|
77
|
+
unless data["Definition"].empty?
|
78
|
+
extras["Definition"] = {
|
79
|
+
"Definition" => data["Definition"],
|
80
|
+
"Source" => data["DefinitionSource"],
|
81
|
+
"URL" => data["DefinitionURL"]
|
82
|
+
}
|
83
|
+
end
|
84
|
+
unless data["Redirect"].empty?
|
85
|
+
extras["Bang Redirect"] = data["Redirect"]
|
86
|
+
end
|
87
|
+
return extras
|
88
|
+
end
|
89
|
+
|
90
|
+
# Extract extra info based on an input extras_data
|
91
|
+
def extract_extras(data, extras_data)
|
92
|
+
extras = {}
|
93
|
+
if extras_data["Infobox"]
|
94
|
+
extras["Infobox"] = extract_infobox(data)
|
95
|
+
end
|
96
|
+
if extras_data["Results"]
|
97
|
+
extras["Results"] = extract_results(data)
|
98
|
+
end
|
99
|
+
if extras_data["Answer"]
|
100
|
+
extras["Answer"] = extras_data["Answer"]
|
101
|
+
end
|
102
|
+
if extras_data["Definition"]
|
103
|
+
extras["Definition"] = extras_data["Definition"]
|
104
|
+
end
|
105
|
+
if extras_data["Bang Redirect"]
|
106
|
+
extras["Bang Redirect"] = extras_data["Bang Redirect"]
|
107
|
+
end
|
108
|
+
return extras
|
109
|
+
end
|
110
|
+
|
111
|
+
# Extract common info
|
112
|
+
def extract_common(data)
|
113
|
+
output = {
|
114
|
+
"Heading" => data["Heading"],
|
115
|
+
"Entity" => data["Entity"],
|
116
|
+
"Type" => "",
|
117
|
+
"Description" => data["AbstractText"],
|
118
|
+
"Further Reading" => data["AbstractURL"],
|
119
|
+
"Related" => []
|
120
|
+
}
|
121
|
+
case data["Type"]
|
122
|
+
when "A"
|
123
|
+
type = "Article"
|
124
|
+
when "C"
|
125
|
+
type = "Category"
|
126
|
+
when "D"
|
127
|
+
type = "Disambiguation"
|
128
|
+
when "E"
|
129
|
+
type = "Exclusive"
|
130
|
+
when "N"
|
131
|
+
type = "Name"
|
132
|
+
else
|
133
|
+
type = "Nothing or unknown"
|
134
|
+
end
|
135
|
+
output["Type"] = type
|
136
|
+
data["RelatedTopics"].each do |topic|
|
137
|
+
unless topic["Text"].nil?
|
138
|
+
output["Related"] << topic["Text"]
|
139
|
+
end
|
140
|
+
end
|
141
|
+
output.delete_if do |key, value|
|
142
|
+
value.empty?
|
143
|
+
end
|
144
|
+
return output
|
145
|
+
end
|
146
|
+
|
147
|
+
# Extract results from hash
|
148
|
+
def extract_results(data)
|
149
|
+
output = {}
|
150
|
+
data["Results"].each do |result|
|
151
|
+
output[result["Text"]] = result["FirstURL"]
|
152
|
+
end
|
153
|
+
return output
|
154
|
+
end
|
155
|
+
|
156
|
+
# Extract infobox from hash
|
157
|
+
# Official example : http://api.duckduckgo.com/?q=valley+forge+national+park&format=json&pretty=1
|
158
|
+
def extract_infobox(data)
|
159
|
+
output = {}
|
160
|
+
tsums = data["Infobox"]["content"]
|
161
|
+
tsums.each do |section|
|
162
|
+
output[ section["label"] ] = section["value"]
|
163
|
+
end
|
164
|
+
return output
|
165
|
+
end
|
166
|
+
|
167
|
+
# Handle a common search automatically
|
168
|
+
def handle(keywords)
|
169
|
+
data = get_data(keywords)
|
170
|
+
common = extract_common(data)
|
171
|
+
extras_data = find_extras(data)
|
172
|
+
extras = extract_extras(data, extras_data)
|
173
|
+
result = common.merge(extras)
|
174
|
+
puts result.to_yaml
|
175
|
+
end
|
176
|
+
end
|
metadata
ADDED
@@ -0,0 +1,89 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: duckgo
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Daniel Ethridge
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-01-05 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.13'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.13'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rake
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '10.0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '10.0'
|
41
|
+
description:
|
42
|
+
email:
|
43
|
+
- danielethridge@icloud.com
|
44
|
+
executables:
|
45
|
+
- duckgo
|
46
|
+
extensions: []
|
47
|
+
extra_rdoc_files: []
|
48
|
+
files:
|
49
|
+
- ".gitignore"
|
50
|
+
- ".rake_tasks~"
|
51
|
+
- ".vscode/launch.json"
|
52
|
+
- LICENSE
|
53
|
+
- README.md
|
54
|
+
- Rakefile
|
55
|
+
- bin/duckgo
|
56
|
+
- bin/setup
|
57
|
+
- docs/README.md
|
58
|
+
- docs/getting_data.md
|
59
|
+
- duckgo.gemspec
|
60
|
+
- lib/duckgo.rb
|
61
|
+
- lib/duckgo/version.rb
|
62
|
+
homepage: https://github.com/wlib/duckgo
|
63
|
+
licenses:
|
64
|
+
- MIT
|
65
|
+
metadata: {}
|
66
|
+
post_install_message:
|
67
|
+
rdoc_options: []
|
68
|
+
require_paths:
|
69
|
+
- lib
|
70
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - ">="
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '0'
|
80
|
+
requirements: []
|
81
|
+
rubyforge_project:
|
82
|
+
rubygems_version: 2.5.1
|
83
|
+
signing_key:
|
84
|
+
specification_version: 4
|
85
|
+
summary: DuckGo is a RubyGem library and command line tool for searching with DuckDuckGo.
|
86
|
+
By default, it puts out only the relevant information, but when told, it will dump
|
87
|
+
all the data you could ask for. This tool aims to give access to most of the features
|
88
|
+
from the official API.
|
89
|
+
test_files: []
|