nsda_qa_search 0.0.0
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/nsda_qa_search +60 -0
- data/lib/nsda_qa_search.rb +73 -0
- metadata +65 -0
data/bin/nsda_qa_search
ADDED
@@ -0,0 +1,60 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'nsda_qa_search'
|
3
|
+
require 'optparse'
|
4
|
+
|
5
|
+
options = {
|
6
|
+
|
7
|
+
}
|
8
|
+
|
9
|
+
parser = OptionParser.new do|opts|
|
10
|
+
opts.banner = "You need to provide an action."
|
11
|
+
opts.on('-s', '--search keywords', 'Search questions by keywords') do |search|
|
12
|
+
options['search'] = search;
|
13
|
+
end
|
14
|
+
|
15
|
+
opts.on('-w', '--with-body', 'Return results with content') do
|
16
|
+
options['with-body'] = true;
|
17
|
+
end
|
18
|
+
|
19
|
+
opts.on('-p', '--page PAGE', 'Page number') do |page|
|
20
|
+
options['page'] = page;
|
21
|
+
end
|
22
|
+
|
23
|
+
opts.on('-x', '--page-size PAGE-SIZE', 'Page size') do |pagesize|
|
24
|
+
options['pagesize'] = pagesize;
|
25
|
+
end
|
26
|
+
|
27
|
+
opts.on('-o', '--order TYPE', 'Result ordering type, asc or desc') do |order|
|
28
|
+
options['order'] = order;
|
29
|
+
end
|
30
|
+
|
31
|
+
opts.on('-t', '--sort TYPE', 'Sorting the results by types, activity, creation (default), votes, hot, week, and month') do |sort|
|
32
|
+
options['sort'] = sort
|
33
|
+
end
|
34
|
+
|
35
|
+
opts.on('-r', '--show ID', 'Show answers by question ID') do |show|
|
36
|
+
options['show'] = show
|
37
|
+
end
|
38
|
+
|
39
|
+
opts.on('-h', '--help', 'Displays Help') do
|
40
|
+
puts opts
|
41
|
+
exit
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
begin
|
46
|
+
parser.parse!
|
47
|
+
rescue OptionParser::InvalidOption
|
48
|
+
puts parser
|
49
|
+
exit
|
50
|
+
end
|
51
|
+
|
52
|
+
if options['search']
|
53
|
+
puts "Your search keywords: %s" % options['search']
|
54
|
+
puts NsdaQaSearch.search(options['search'], options)
|
55
|
+
elsif options['show']
|
56
|
+
puts "Your question ID: %s" % options['show']
|
57
|
+
puts NsdaQaSearch.show(options['show'])
|
58
|
+
else
|
59
|
+
puts parser
|
60
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require 'httparty'
|
2
|
+
|
3
|
+
class NsdaQaSearch
|
4
|
+
def self.search(keywords, options={})
|
5
|
+
url = "http://api.stackexchange.com/2.2/search?site=stackoverflow"
|
6
|
+
|
7
|
+
#parameters without default value - start
|
8
|
+
if options['with-body']
|
9
|
+
url += "&filter=!9WgJfiTRL"
|
10
|
+
end
|
11
|
+
|
12
|
+
if keywords
|
13
|
+
url += "&tagged=%s" % keywords
|
14
|
+
end
|
15
|
+
#end
|
16
|
+
|
17
|
+
#parameters with default values - start
|
18
|
+
url += "&page=%d" % options['page'] ||= 1
|
19
|
+
url += "&pagesize=%d" % options['pagesize'] ||= 5
|
20
|
+
url += "&order=%s" % options['order'] ||= :desc
|
21
|
+
url += "&sort=%s" % options['sort'] ||= :creation
|
22
|
+
#end
|
23
|
+
|
24
|
+
result ||= "api url: %s\n" % url
|
25
|
+
response = HTTParty.get(url)
|
26
|
+
|
27
|
+
result += "-" * 80 + "\n"
|
28
|
+
result += "-" * 80 + "\n"
|
29
|
+
response['items'].each_with_index do |item, index|
|
30
|
+
result += "### %s. %s\n" % [:id, item['question_id']]
|
31
|
+
result += "### %d. %s\n" % [index+1, item['title']]
|
32
|
+
result += "### %s: %d\n" % [:answers, item['answer_count']]
|
33
|
+
result += "#" * 60 + "\n"
|
34
|
+
result += "### %s: %s\n" % [:content, item['body']] if item['body']
|
35
|
+
result += "#" * 80 + "\n"
|
36
|
+
result += "### Command for show answers: nsda_qa_search --show %s\n" % item['question_id']
|
37
|
+
result += "#" * 80 + "\n"
|
38
|
+
result += "#" * 80 + "\n"
|
39
|
+
result += "-" * 80 + "\n"
|
40
|
+
result += "-" * 80 + "\n"
|
41
|
+
end
|
42
|
+
|
43
|
+
result
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.show(id, action="all")
|
47
|
+
url_answers = "http://api.stackexchange.com/2.2/questions/%s/answers?order=desc&sort=activity&site=stackoverflow&filter=!9WgJfjI5u" % id
|
48
|
+
url_question = "http://api.stackexchange.com/2.2/questions/%s?order=desc&sort=creation&site=stackoverflow&filter=!9WgJfiTRL" % id
|
49
|
+
|
50
|
+
response_answers = HTTParty.get(url_answers)
|
51
|
+
response_question = HTTParty.get(url_question)
|
52
|
+
|
53
|
+
result ||= "question api url: %s\n" % url_question
|
54
|
+
result ||= "answer url : %s\n" % url_answers
|
55
|
+
result += "-" * 80 + "\n"
|
56
|
+
|
57
|
+
question = response_question['items'][0]
|
58
|
+
result += "######%s. %s######\n" % [question['question_id'], question['title']]
|
59
|
+
result += "+" * 80 + "\n"
|
60
|
+
result += "+" * 80 + "\n"
|
61
|
+
response_answers['items'].each_with_index do |item, index|
|
62
|
+
result += "### %s. %s\n" % [:id, item['answer_id']]
|
63
|
+
result += "### %s: %s\n" % [:is_accepted, item['is_accepted']]
|
64
|
+
result += "#" * 80 + "\n"
|
65
|
+
result += "###%s: %s\n" % [:content, item['body']]
|
66
|
+
result += "#" * 80 + "\n"
|
67
|
+
result += "-" * 80 + "\n"
|
68
|
+
end
|
69
|
+
|
70
|
+
result
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
metadata
ADDED
@@ -0,0 +1,65 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: nsda_qa_search
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Lim Chee Hau
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2014-03-03 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: httparty
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
description: This application allow users to search questions and answers in console
|
31
|
+
mode, no more browser needed!
|
32
|
+
email: ch33hau@gmail.com
|
33
|
+
executables:
|
34
|
+
- nsda_qa_search
|
35
|
+
extensions: []
|
36
|
+
extra_rdoc_files: []
|
37
|
+
files:
|
38
|
+
- lib/nsda_qa_search.rb
|
39
|
+
- bin/nsda_qa_search
|
40
|
+
homepage: http://rubygems.org/gems/nsda_qa_search
|
41
|
+
licenses:
|
42
|
+
- MIT
|
43
|
+
post_install_message:
|
44
|
+
rdoc_options: []
|
45
|
+
require_paths:
|
46
|
+
- lib
|
47
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
48
|
+
none: false
|
49
|
+
requirements:
|
50
|
+
- - ! '>='
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: '0'
|
53
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
54
|
+
none: false
|
55
|
+
requirements:
|
56
|
+
- - ! '>='
|
57
|
+
- !ruby/object:Gem::Version
|
58
|
+
version: '0'
|
59
|
+
requirements: []
|
60
|
+
rubyforge_project:
|
61
|
+
rubygems_version: 1.8.24
|
62
|
+
signing_key:
|
63
|
+
specification_version: 3
|
64
|
+
summary: Search questions and answers in console mode!
|
65
|
+
test_files: []
|