dtcterm 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/bin/dtcterm +4 -0
- data/lib/dtcterm.rb +168 -0
- data/test/test_dtcterm.rb +89 -0
- metadata +79 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b69f76d2f3f2366574fc3e4006a0dcabdd8505c8
|
4
|
+
data.tar.gz: c6908cde29359c58dca917f10ae2035a44e4959b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 69fb41bef5e5c81f5c56229248ff37db426b769b9a4f1ef64331bcdbd2eae31f1964b033e6d4bf921e37d98001f52cd055f6f758d19e7f4b51aab7f4b44e1ac8
|
7
|
+
data.tar.gz: d2cafb6ddba4ad747c2db47a65b918acf8e313dad2795cc22f1514705c2ff386625e6fbda03fe5ebecc1e443c6a49ccb4a887b98f744ea67a7e329efb1887855
|
data/bin/dtcterm
ADDED
data/lib/dtcterm.rb
ADDED
@@ -0,0 +1,168 @@
|
|
1
|
+
module Dtcterm
|
2
|
+
begin
|
3
|
+
require 'Win32/Console/ANSI' if RUBY_PLATFORM =~ /win32/
|
4
|
+
rescue LoadError
|
5
|
+
raise 'win32console is needed to use color on Windows. Try `gem install win32console`'
|
6
|
+
end
|
7
|
+
|
8
|
+
require 'optparse'
|
9
|
+
require 'nokogiri'
|
10
|
+
require 'open-uri'
|
11
|
+
require 'rubygems'
|
12
|
+
|
13
|
+
class << self
|
14
|
+
|
15
|
+
$using_color = true
|
16
|
+
$dtc_choice = ""
|
17
|
+
|
18
|
+
BASE_QUOTE_LINK = "http://danstonchat.com/id.html"
|
19
|
+
|
20
|
+
DTC_FLOP_URL = "http://danstonchat.com/flop50.html"
|
21
|
+
DTC_LATEST_URL = "http://danstonchat.com/latest.html"
|
22
|
+
DTC_RANDOM_URL = "http://danstonchat.com/random.html"
|
23
|
+
DTC_RANDOM_POSITIVE_URL = "http://danstonchat.com/random0.html"
|
24
|
+
DTC_TOP_URL = "http://danstonchat.com/top50.html"
|
25
|
+
|
26
|
+
def version
|
27
|
+
'0.1.0'
|
28
|
+
end
|
29
|
+
|
30
|
+
|
31
|
+
|
32
|
+
class Quote
|
33
|
+
attr_accessor :id
|
34
|
+
attr_accessor :link
|
35
|
+
attr_accessor :quote
|
36
|
+
|
37
|
+
def initialize
|
38
|
+
@id = 0
|
39
|
+
@link = ""
|
40
|
+
@quote = Array.new { Array.new(2) }
|
41
|
+
end
|
42
|
+
|
43
|
+
def colorize(text)
|
44
|
+
"\e[32m#{text}\e[0m"
|
45
|
+
end
|
46
|
+
|
47
|
+
def display
|
48
|
+
print "Quote ##{id}\n"
|
49
|
+
print "Link: #{link}\n"
|
50
|
+
@quote.each do |item|
|
51
|
+
print "#{$using_color ? colorize(item[0]) : item[0]} #{item[1]}\n"
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
|
57
|
+
|
58
|
+
def get_page_html(url)
|
59
|
+
begin
|
60
|
+
Nokogiri::HTML(open(url))
|
61
|
+
rescue
|
62
|
+
puts "Can't reach the server."
|
63
|
+
exit 1
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
def get_quote_list(html)
|
68
|
+
quote_list = Array.new
|
69
|
+
|
70
|
+
html.css('div.item-listing').css('div.item').each do |item|
|
71
|
+
quote = Quote.new
|
72
|
+
quote.id = item["class"].gsub(/[^\d]/, '')
|
73
|
+
quote.link = BASE_QUOTE_LINK.gsub("id", quote.id)
|
74
|
+
|
75
|
+
quote_item = item.children()[0].children()[0].children()[0]
|
76
|
+
while quote_item
|
77
|
+
# A quote is always like : <span class="decoration">text</span> text
|
78
|
+
# The "decoration" class means the username
|
79
|
+
|
80
|
+
# Getting the span text.
|
81
|
+
first = quote_item.text.sub(/\<br>/, '').strip()
|
82
|
+
|
83
|
+
# Getting the rest of text
|
84
|
+
quote_item = quote_item.next()
|
85
|
+
if (quote_item != nil)
|
86
|
+
second = quote_item.text.sub(/'\<br>/, '').strip()
|
87
|
+
quote_item = quote_item.next()
|
88
|
+
end
|
89
|
+
|
90
|
+
quote.quote << [first, second]
|
91
|
+
end
|
92
|
+
|
93
|
+
quote_list << quote
|
94
|
+
end
|
95
|
+
|
96
|
+
quote_list
|
97
|
+
end
|
98
|
+
|
99
|
+
def display_quote_list(quote_list)
|
100
|
+
quote_list.each do |quote|
|
101
|
+
quote.display
|
102
|
+
print "\n\n"
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
|
107
|
+
|
108
|
+
def main(options)
|
109
|
+
def self.quote_already_set
|
110
|
+
unless $dtc_choice.empty?
|
111
|
+
puts("Un choix de quote a déjà été fait.")
|
112
|
+
exit 1
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
OptionParser.new do |opts|
|
117
|
+
|
118
|
+
opts.banner = "Usage: dtcterm one_quote_option [color_option]"
|
119
|
+
|
120
|
+
opts.version = VERSION
|
121
|
+
|
122
|
+
opts.on("-c", "--no-color", "Enlève la couleur.") do
|
123
|
+
$using_color = false
|
124
|
+
end
|
125
|
+
|
126
|
+
opts.on("-f", "--flop", "Rubrique `flop50`.") do
|
127
|
+
quote_already_set
|
128
|
+
$dtc_choice = DTC_FLOP_URL
|
129
|
+
end
|
130
|
+
|
131
|
+
opts.on("-l", "--latest", "Rubrique `Derniers ajours`.") do
|
132
|
+
quote_already_set
|
133
|
+
$dtc_choice = DTC_LATEST_URL
|
134
|
+
end
|
135
|
+
|
136
|
+
opts.on("-r", "--random", "Rubrique `random`.") do
|
137
|
+
quote_already_set
|
138
|
+
$dtc_choice = DTC_RANDOM_URL
|
139
|
+
end
|
140
|
+
|
141
|
+
opts.on("-R", "--random0", "Rubrique `random > 0`") do
|
142
|
+
quote_already_set
|
143
|
+
$dtc_choice = DTC_RANDOM_POSITIVE_URL
|
144
|
+
end
|
145
|
+
|
146
|
+
opts.on("-t", "--top", "Rubrique `top50`") do
|
147
|
+
quote_already_set
|
148
|
+
$dtc_choice = DTC_TOP_URL
|
149
|
+
end
|
150
|
+
|
151
|
+
end.parse!(options)
|
152
|
+
|
153
|
+
if $dtc_choice.empty?
|
154
|
+
puts("Il faut choisir une rubrique.")
|
155
|
+
exit 1
|
156
|
+
end
|
157
|
+
|
158
|
+
unless options.empty?
|
159
|
+
puts("Liste d'argument incorrects.")
|
160
|
+
exit 1
|
161
|
+
end
|
162
|
+
|
163
|
+
html = get_page_html(DTC_RANDOM_POSITIVE_URL)
|
164
|
+
quote_list = get_quote_list(html)
|
165
|
+
display_quote_list(quote_list)
|
166
|
+
end
|
167
|
+
end
|
168
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
require 'test/unit'
|
2
|
+
require 'dtcterm'
|
3
|
+
require 'nokogiri'
|
4
|
+
|
5
|
+
class DtctermTest < Test::Unit::TestCase
|
6
|
+
|
7
|
+
def test_version
|
8
|
+
assert(Dtcterm.version =~ /\d.\d.\d/)
|
9
|
+
end
|
10
|
+
|
11
|
+
def test_get_quote_list
|
12
|
+
html = <<-eos
|
13
|
+
<div class="item-listing">
|
14
|
+
<h1>Random things</h1>
|
15
|
+
<div class="item item1234">
|
16
|
+
<p class="item-content">
|
17
|
+
<a href="useless_link">
|
18
|
+
<span class="decoration">Person1: </span>Hello there !
|
19
|
+
<span class="decoration">Person2: </span>Hello you !
|
20
|
+
<span class="decoration">Person1: </span>How are you ?
|
21
|
+
<span class="decoration">Person2: </span>It's a flesh wound
|
22
|
+
<span class="decoration">Person1: </span>DUCK DUCK !
|
23
|
+
<span class="decoration">Person2: </span>Nice holy grenade !
|
24
|
+
<span class="decoration">Person1: </span>Oh.
|
25
|
+
</a>
|
26
|
+
</p>
|
27
|
+
</div>
|
28
|
+
<div class="item item4567">
|
29
|
+
<p class="item-content">
|
30
|
+
<a href="useless_link">
|
31
|
+
<span class="decoration">mew > </span>Groumpf
|
32
|
+
<span class="decoration">two > </span>Some test
|
33
|
+
</a>
|
34
|
+
</p>
|
35
|
+
</div>
|
36
|
+
</div>
|
37
|
+
eos
|
38
|
+
|
39
|
+
html = html.gsub(/\n/, '').strip.gsub(/[[:space:]]{2,}/, '')
|
40
|
+
quote_list = Dtcterm::get_quote_list(Nokogiri::XML(html))
|
41
|
+
|
42
|
+
quote = quote_list[0]
|
43
|
+
assert_equal quote.id, "1234"
|
44
|
+
assert_equal quote.link, "http://danstonchat.com/1234.html"
|
45
|
+
|
46
|
+
q = quote.quote[0]
|
47
|
+
assert_equal q[0], "Person1:"
|
48
|
+
assert_equal q[1], "Hello there !"
|
49
|
+
|
50
|
+
q = quote.quote[1]
|
51
|
+
assert_equal q[0], "Person2:"
|
52
|
+
assert_equal q[1], "Hello you !"
|
53
|
+
|
54
|
+
q = quote.quote[2]
|
55
|
+
assert_equal q[0], "Person1:"
|
56
|
+
assert_equal q[1], "How are you ?"
|
57
|
+
|
58
|
+
q = quote.quote[3]
|
59
|
+
assert_equal q[0], "Person2:"
|
60
|
+
assert_equal q[1], "It's a flesh wound"
|
61
|
+
|
62
|
+
q = quote.quote[4]
|
63
|
+
assert_equal q[0], "Person1:"
|
64
|
+
assert_equal q[1], "DUCK DUCK !"
|
65
|
+
|
66
|
+
q = quote.quote[5]
|
67
|
+
assert_equal q[0], "Person2:"
|
68
|
+
assert_equal q[1], "Nice holy grenade !"
|
69
|
+
|
70
|
+
q = quote.quote[6]
|
71
|
+
assert_equal q[0], "Person1:"
|
72
|
+
assert_equal q[1], "Oh."
|
73
|
+
|
74
|
+
|
75
|
+
|
76
|
+
quote = quote_list[1]
|
77
|
+
assert_equal quote.id, "4567"
|
78
|
+
assert_equal quote.link, "http://danstonchat.com/4567.html"
|
79
|
+
|
80
|
+
q = quote.quote[0]
|
81
|
+
assert_equal q[0], "mew >"
|
82
|
+
assert_equal q[1], "Groumpf"
|
83
|
+
|
84
|
+
q = quote.quote[1]
|
85
|
+
assert_equal q[0], "two >"
|
86
|
+
assert_equal q[1], "Some test"
|
87
|
+
end
|
88
|
+
|
89
|
+
end
|
metadata
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: dtcterm
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Loïc Runarvot
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-09-14 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: nokogiri
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.5.6
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 1.5.6
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: nokogiri
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.5.6
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.5.6
|
41
|
+
description: |-
|
42
|
+
DansTonChar viewer in terminal application.\
|
43
|
+
Can display different categories from the website. \
|
44
|
+
http://www.danstonchat.com
|
45
|
+
email: loic.runarvot@gmail.com
|
46
|
+
executables:
|
47
|
+
- dtcterm
|
48
|
+
extensions: []
|
49
|
+
extra_rdoc_files: []
|
50
|
+
files:
|
51
|
+
- lib/dtcterm.rb
|
52
|
+
- test/test_dtcterm.rb
|
53
|
+
- bin/dtcterm
|
54
|
+
homepage: https://github.com/Aaylor/DansTonChatTerm
|
55
|
+
licenses:
|
56
|
+
- MIT
|
57
|
+
metadata: {}
|
58
|
+
post_install_message:
|
59
|
+
rdoc_options: []
|
60
|
+
require_paths:
|
61
|
+
- lib
|
62
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
63
|
+
requirements:
|
64
|
+
- - ">="
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: '0'
|
67
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
68
|
+
requirements:
|
69
|
+
- - ">="
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: '0'
|
72
|
+
requirements: []
|
73
|
+
rubyforge_project:
|
74
|
+
rubygems_version: 2.0.14
|
75
|
+
signing_key:
|
76
|
+
specification_version: 4
|
77
|
+
summary: DansTonChat viewer in terminal application
|
78
|
+
test_files:
|
79
|
+
- test/test_dtcterm.rb
|