philologic-client 0.0.11 → 0.0.13
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.
- data/HISTORY.rdoc +8 -0
- data/PhiloLogicResponseDocumentation.txt +86 -0
- data/README.rdoc +54 -32
- data/Rakefile +26 -0
- data/lib/philologic-client/bibliography.rb +60 -0
- data/lib/philologic-client/collocation.rb +61 -0
- data/lib/philologic-client/concordance.rb +39 -0
- data/lib/philologic-client/document.rb +65 -0
- data/lib/philologic-client/frequency.rb +57 -0
- data/lib/philologic-client/frequency_row.rb +67 -0
- data/lib/philologic-client/link.rb +37 -0
- data/lib/philologic-client/occurrence.rb +79 -0
- data/lib/philologic-client/response.rb +63 -0
- data/lib/philologic-client/version.rb +1 -1
- data/lib/philologic-client.rb +102 -286
- data/test/data/bibliography.html +182 -0
- data/test/data/collocation.html +2594 -0
- data/test/data/concordance.html +758 -0
- data/test/data/frequency.html +73 -0
- data/test/data/navigation.html +69 -0
- data/test/data/object.html +20 -0
- data/test/test_bibliography.rb +78 -0
- data/test/test_client.rb +861 -0
- data/test/test_collocation.rb +76 -0
- data/test/test_concordance.rb +83 -0
- data/test/test_document.rb +127 -0
- data/test/test_frequency.rb +78 -0
- data/test/test_occurrence.rb +66 -0
- data/test/test_response.rb +41 -0
- metadata +55 -36
- data/doc/PhiloLogicResponseTemplates.txt +0 -46
- data/test/data/collocation_links.html +0 -145
- data/test/data/collocation_sartre.html +0 -67
- data/test/data/doc_file.html +0 -396
- data/test/data/frequency_links.html +0 -145
- data/test/data/frequency_sartre.html +0 -67
- data/test/data/query_sartre.html +0 -151
- data/test/data/root_file.html +0 -1851
- data/test/test_philologic_client.rb +0 -558
- data/test/test_philologic_link.rb +0 -101
data/HISTORY.rdoc
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
= Philologic::Client History
|
2
2
|
|
3
|
+
== 2012-03-30 v0.0.13
|
4
|
+
|
5
|
+
* Supports all of the Philologic v4 specification except collocation tables
|
6
|
+
|
7
|
+
== 2012-02-13 v0.0.12
|
8
|
+
|
9
|
+
* Revert to parsing with +Nokogiri::HTML+, not +Nokogiri::XML+
|
10
|
+
|
3
11
|
== 2012-02-09 v0.0.11
|
4
12
|
|
5
13
|
* Added +Philologic::Link#text()+
|
@@ -0,0 +1,86 @@
|
|
1
|
+
---Concordance Report: returned by fulltext searches---
|
2
|
+
|
3
|
+
<div class='philologic_response'>
|
4
|
+
<ol class='philologic_concordance'>
|
5
|
+
<li class='philologic_occurrence'>
|
6
|
+
<span class='hit_n'> {hit_number} </span>
|
7
|
+
<a href =’{link_to_cited_object}' class='philologic_cite'>
|
8
|
+
<span class='philologic_property' title="{key}">{value}</span>
|
9
|
+
{more properties}
|
10
|
+
</a>
|
11
|
+
{possibly multiple links with their own properties--page images, etc.}
|
12
|
+
<div class='philologic_context'>{left context}
|
13
|
+
<span class='hilite'>{search term}<span>
|
14
|
+
…{possibly multiple separate hilt terms}…{right context}
|
15
|
+
</div>
|
16
|
+
</li>
|
17
|
+
{probably many occurrences}
|
18
|
+
</ol>
|
19
|
+
</div>
|
20
|
+
|
21
|
+
|
22
|
+
---Bibliography Report: returned by metadata-only---
|
23
|
+
|
24
|
+
<div class='philologic_response'>
|
25
|
+
<ol class='philologic_cite_list'>
|
26
|
+
<li class='philologic_occurrence'>
|
27
|
+
<span class='hit_n'> {hit_number} </span>
|
28
|
+
<div class='philologic_cite'>
|
29
|
+
<a href='{link_to_cited_object}'>
|
30
|
+
<span class='philologic_property' title="{key}">{value}</span>
|
31
|
+
{more properties}
|
32
|
+
</a>
|
33
|
+
{possibly multiple links with their own properties--page images, etc.}
|
34
|
+
</div>
|
35
|
+
</li>
|
36
|
+
{probably many occurrences}
|
37
|
+
</ol>
|
38
|
+
</div>
|
39
|
+
|
40
|
+
|
41
|
+
---Frequency Table: returned by frequency and collocation reports---
|
42
|
+
<div class='philologic_response'>
|
43
|
+
<table class='philologic_table'>
|
44
|
+
<tr class='freq_header_row'>
|
45
|
+
<th class='freq_checkbox_header'></th>
|
46
|
+
<th class='freq_label_header'> {facet_widget} </th>
|
47
|
+
<th class='freq_value_header'> {count} </th>
|
48
|
+
</tr>
|
49
|
+
<tr class='freq_row'>
|
50
|
+
<td class='freq_checkbox'><input type='checkbox'></input></td>
|
51
|
+
<td class='freq_label'> <a href='{link to concordance}'> {label} </a></td>
|
52
|
+
<td class='freq_value'> {count} </td>
|
53
|
+
</tr>
|
54
|
+
{probably many rows}
|
55
|
+
</table>
|
56
|
+
</div>
|
57
|
+
|
58
|
+
|
59
|
+
---Object Viewer: returned by div and paragraph object access---
|
60
|
+
|
61
|
+
<div class='philologic_response'>
|
62
|
+
<div class=’philologic_cite’>
|
63
|
+
<span class='philologic_property' title="{key}">{value}</span>
|
64
|
+
{more properties}
|
65
|
+
</div>
|
66
|
+
<div class=’philologic_object’>
|
67
|
+
{various content}
|
68
|
+
<span class='hilite'>{hilit word}</span>
|
69
|
+
{possibly multiple hilit words}
|
70
|
+
</div>
|
71
|
+
</div>
|
72
|
+
|
73
|
+
|
74
|
+
---Object Navigation: returned by document objects, links to children---
|
75
|
+
|
76
|
+
<div class='philologic_response'>
|
77
|
+
<div class=’philologic_cite’>
|
78
|
+
<span class='philologic_property' title="{key}">{value}</span>
|
79
|
+
{more properties}
|
80
|
+
</div>
|
81
|
+
<div class=’philologic_navigation’>
|
82
|
+
<a href=”zzz”>[link to child object]</a>
|
83
|
+
[links to all child objects]
|
84
|
+
</div>
|
85
|
+
</div>
|
86
|
+
|
data/README.rdoc
CHANGED
@@ -6,50 +6,74 @@
|
|
6
6
|
|
7
7
|
Philologic::Client.new(endpoint) do |client|
|
8
8
|
|
9
|
-
# Get
|
10
|
-
client.
|
9
|
+
# Get/Set encoding
|
10
|
+
encoding = client.encoding
|
11
|
+
client.encoding = 'utf-8' # Default
|
11
12
|
|
12
|
-
# Get
|
13
|
-
|
14
|
-
|
15
|
-
html = doc.html
|
16
|
-
txt = doc.text
|
13
|
+
# Get/Set endpoint
|
14
|
+
endpoint = client.endpoint
|
15
|
+
client.endpoint = 'http://philologic.example.org'
|
17
16
|
|
17
|
+
# Get bibliography
|
18
|
+
# +biblio+ is a Philologic::Client::Bibliography object
|
19
|
+
biblio = client.bibliography
|
20
|
+
|
21
|
+
# Get reference to first title
|
22
|
+
# +first+ is a Philologic::Client::Occurrence object
|
23
|
+
first = biblio.titles.first
|
18
24
|
|
19
|
-
#
|
20
|
-
|
25
|
+
# Get first title
|
26
|
+
# +doc+ will be a Philologic::Client::Document object
|
27
|
+
doc = client.document( first['href'] )
|
21
28
|
|
22
|
-
#
|
23
|
-
|
29
|
+
# Get text if present
|
30
|
+
if doc.text?
|
31
|
+
txt = doc.text # Document text
|
32
|
+
html = doc.html # Document HTML
|
33
|
+
end
|
24
34
|
|
35
|
+
# Get links if present
|
36
|
+
if doc.links?
|
37
|
+
doc.links.each do |link|
|
38
|
+
# +link+ is Philologic::Client::Link object
|
39
|
+
link.url # Link URL
|
40
|
+
link.text # Link text
|
41
|
+
end
|
42
|
+
end
|
25
43
|
|
26
|
-
#
|
27
|
-
|
44
|
+
# Get +Array+ of document property keys.
|
45
|
+
doc.keys
|
28
46
|
|
29
|
-
#
|
30
|
-
|
47
|
+
# Get document properties
|
48
|
+
doc.each { |p| puts "%s\t%s" % [ p, doc[p] ] }
|
31
49
|
|
32
|
-
# Links for first result in collocation table search
|
33
|
-
client.collocation('sartre').first.links.each { |link| puts link }
|
34
50
|
|
51
|
+
# Concordance search
|
52
|
+
# Returns Philologic::Client::Concordance object
|
53
|
+
q = client.concordance('lion')
|
35
54
|
|
36
|
-
#
|
37
|
-
|
55
|
+
# Get results if present.
|
56
|
+
if q.results?
|
57
|
+
q.results.each do |result|
|
58
|
+
# +result+ is a Philologic::Client::Occurrence object
|
59
|
+
end
|
60
|
+
end
|
38
61
|
|
39
|
-
# Frequency table search by arbitrary key-value pairs
|
40
|
-
client.frequency( :query => 'sartre', :foo => 1 ).each { |result| puts result }
|
41
62
|
|
42
|
-
#
|
43
|
-
|
63
|
+
# Frequency search
|
64
|
+
# Returns Philologic::Client::Frequency object
|
65
|
+
q = client.frequency('lion')
|
44
66
|
|
67
|
+
# Get results if present
|
68
|
+
if q.results?
|
69
|
+
q.results.each do |result|
|
70
|
+
# +result+ is a Philologic::Client::FrequencyRow object
|
71
|
+
end
|
72
|
+
end
|
45
73
|
|
46
|
-
# Get/Set encoding
|
47
|
-
encoding = client.encoding
|
48
|
-
client.encoding = 'utf-8' # Default
|
49
74
|
|
50
|
-
#
|
51
|
-
|
52
|
-
client.endpoint = 'http://philologic.example.org'
|
75
|
+
# Collocation search
|
76
|
+
# TODO - Pending implementation update
|
53
77
|
|
54
78
|
end
|
55
79
|
|
@@ -68,8 +92,6 @@ https://github.com/blairc/philologic-client/
|
|
68
92
|
|
69
93
|
== To Do
|
70
94
|
|
71
|
-
*
|
72
|
-
* Add +parent+ to Philologic::Document
|
73
|
-
* Unify (as much as possible) Philologic::Document, Philologic::Link, Philologic::TableRow
|
95
|
+
* Collocation searches
|
74
96
|
* Cache results?
|
75
97
|
|
data/Rakefile
CHANGED
@@ -22,3 +22,29 @@ RDoc::Task.new do |rdoc|
|
|
22
22
|
rdoc.rdoc_files.include('README.rdoc', 'lib/**/*.rb', 'doc/*.txt')
|
23
23
|
end
|
24
24
|
|
25
|
+
desc 'Update test data files'
|
26
|
+
task :update_test_data do
|
27
|
+
require 'net/http'
|
28
|
+
require 'uri'
|
29
|
+
|
30
|
+
endpoint = 'http://pantagruel.ci.uchicago.edu/philo4/shakespeare/dispatcher.py'
|
31
|
+
test_data_dir = File.join( File.dirname(__FILE__), 'test', 'data' )
|
32
|
+
test_data_ext = '.html'
|
33
|
+
{
|
34
|
+
'?title=' => 'bibliography',
|
35
|
+
'?q=lion&report=frequency&field=collocates' => 'collocation',
|
36
|
+
'?q=lion' => 'concordance',
|
37
|
+
'?q=lion&report=frequency' => 'frequency',
|
38
|
+
'1' => 'navigation',
|
39
|
+
'1/1' => 'object'
|
40
|
+
}.each_pair do |request, file|
|
41
|
+
fn = "#{test_data_dir}/#{file}#{test_data_ext}"
|
42
|
+
uri = URI.parse( "#{endpoint}/#{request}" )
|
43
|
+
puts "updating #{fn} from #{uri} ..."
|
44
|
+
|
45
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
46
|
+
request = http.get(uri.request_uri)
|
47
|
+
File.open(fn, 'w') { |fh| fh.puts request.body }
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
@@ -0,0 +1,60 @@
|
|
1
|
+
|
2
|
+
module Philologic # :nodoc:
|
3
|
+
class Client # :nodoc:
|
4
|
+
|
5
|
+
#
|
6
|
+
# Bibliography response returned by bibliography report.
|
7
|
+
#
|
8
|
+
# Extends Philologic::Client::Response
|
9
|
+
#
|
10
|
+
# = Usage
|
11
|
+
#
|
12
|
+
# # <div class='philologic_response'>
|
13
|
+
# # <p class='description'>Bibliography Report: 42 results.</p>
|
14
|
+
# # <ol class='philologic_cite_list'>
|
15
|
+
# # <li class='philologic_occurrence'>
|
16
|
+
# # <a href="./1/0/0/0/0" class='philologic_cite'>
|
17
|
+
# # <span class='philologic_property' title='author'>William Shakespeare</span>,
|
18
|
+
# # <i>
|
19
|
+
# # <span class='philologic_cite' title='title'>
|
20
|
+
# # The First Part of King Henry the Fourth
|
21
|
+
# # </span>
|
22
|
+
# # </i>
|
23
|
+
# # :
|
24
|
+
# # <span class='philologic_property' title='who'></span>
|
25
|
+
# # </a>
|
26
|
+
# # </li>
|
27
|
+
# # ...
|
28
|
+
# # </ol>
|
29
|
+
# # </div>
|
30
|
+
# biblio = Philologic::Client::Bibliography.new(html)
|
31
|
+
# biblio.titles.each do |title|
|
32
|
+
# ... Philologic::Client::Occurrence object ...
|
33
|
+
# end
|
34
|
+
#
|
35
|
+
class Bibliography < ::Philologic::Client::Response
|
36
|
+
|
37
|
+
#
|
38
|
+
# Get +Array+ of Philologic::Client::Occurrence objects
|
39
|
+
#
|
40
|
+
attr_reader :titles
|
41
|
+
|
42
|
+
#
|
43
|
+
# Initialize Philologic::Client::Bibliography object.
|
44
|
+
#
|
45
|
+
# Params:
|
46
|
+
# +document+:: Nokogiri document
|
47
|
+
# +client+:: (optional) Philologic::Client object or +nil+
|
48
|
+
#
|
49
|
+
def initialize(document, client = nil)
|
50
|
+
super
|
51
|
+
|
52
|
+
@properties = {} # TODO Sigh...
|
53
|
+
@titles = @doc.css('li.philologic_occurrence').collect { |o| Philologic::Client::Occurrence.new(o, client) }
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
57
|
+
|
58
|
+
end # class Client
|
59
|
+
end # module Philologic
|
60
|
+
|
@@ -0,0 +1,61 @@
|
|
1
|
+
|
2
|
+
module Philologic # :nodoc:
|
3
|
+
class Client # :nodoc:
|
4
|
+
|
5
|
+
#
|
6
|
+
# Philologic collocation table.
|
7
|
+
#
|
8
|
+
# Extends Philologic::Client::Response
|
9
|
+
#
|
10
|
+
class Collocation < ::Philologic::Client::Response
|
11
|
+
|
12
|
+
#
|
13
|
+
# Get +Array+ of Philologic::Client::CollocationRow objects
|
14
|
+
#
|
15
|
+
attr_reader :results
|
16
|
+
|
17
|
+
#
|
18
|
+
# Initialize Philologic::Client::Collocation object.
|
19
|
+
#
|
20
|
+
# Params:
|
21
|
+
# +document+:: Nokogiri document
|
22
|
+
# +client+:: (optional) Philologic::Client object or +nil+
|
23
|
+
#
|
24
|
+
def initialize(document, client = nil)
|
25
|
+
super
|
26
|
+
|
27
|
+
#@results = []
|
28
|
+
#table = @doc.css('table.philologic_table').first
|
29
|
+
#unless table.nil?
|
30
|
+
# #@results = table.css('tr').select { |tr| tr.css('tr > td') }.collect { |tr| tr }
|
31
|
+
# @results = table.css('tr').collect { |tr| tr }
|
32
|
+
#end
|
33
|
+
@results = @doc.css('tr').collect { |tr| tr } # XXX
|
34
|
+
# <tr>
|
35
|
+
# <td>
|
36
|
+
# <tr><td width="25%">bear (8)</td><td width="25%">bear (5)</td><td width="25%">prey
|
37
|
+
# (5)</td></tr>
|
38
|
+
#
|
39
|
+
# </td>
|
40
|
+
# </tr>
|
41
|
+
# header = @doc.css('table.philologic_table > tr.freq_header_row').first
|
42
|
+
# unless header.nil?
|
43
|
+
# @label_header = header.css('th.freq_label_header').first.text
|
44
|
+
# @value_header = header.css('th.freq_value_header').first.text
|
45
|
+
# end
|
46
|
+
#
|
47
|
+
# @results = @doc.css('tr.freq_row').collect { |tr| Philologic::Client::CollocationRow.new(tr) }
|
48
|
+
end
|
49
|
+
|
50
|
+
#
|
51
|
+
# Does this collocation table contain results?
|
52
|
+
#
|
53
|
+
def results?
|
54
|
+
@results.size > 0 ? true : false
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
end # class Client
|
60
|
+
end # module Philologic
|
61
|
+
|
@@ -0,0 +1,39 @@
|
|
1
|
+
|
2
|
+
module Philologic # :nodoc:
|
3
|
+
class Client # :nodoc:
|
4
|
+
|
5
|
+
#
|
6
|
+
# Philologic concordance search results.
|
7
|
+
#
|
8
|
+
class Concordance < ::Philologic::Client::Response
|
9
|
+
|
10
|
+
#
|
11
|
+
# Get +Array+ of Philologic::Client::Occurrence objects
|
12
|
+
#
|
13
|
+
attr_reader :results
|
14
|
+
|
15
|
+
#
|
16
|
+
# Initialize Philologic::Client::Concordance object.
|
17
|
+
#
|
18
|
+
# Params:
|
19
|
+
# +document+:: Nokogiri document
|
20
|
+
# +client+:: (optional) Philologic::Client object or +nil+
|
21
|
+
#
|
22
|
+
def initialize(document, client = nil)
|
23
|
+
super
|
24
|
+
|
25
|
+
@results = @doc.css('li.philologic_occurrence').collect { |o| Philologic::Client::Occurrence.new(o, client) }
|
26
|
+
end
|
27
|
+
|
28
|
+
#
|
29
|
+
# Were any results found?
|
30
|
+
#
|
31
|
+
def results?
|
32
|
+
@results.size > 0 ? true : false
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
end # class Client
|
38
|
+
end # module Philologic
|
39
|
+
|
@@ -0,0 +1,65 @@
|
|
1
|
+
|
2
|
+
module Philologic # :nodoc:
|
3
|
+
class Client # :nodoc:
|
4
|
+
|
5
|
+
#
|
6
|
+
# Philologic document.
|
7
|
+
#
|
8
|
+
class Document < ::Philologic::Client::Response
|
9
|
+
|
10
|
+
#
|
11
|
+
# Get document HTML or +nil+
|
12
|
+
#
|
13
|
+
attr_reader :html
|
14
|
+
|
15
|
+
#
|
16
|
+
# Get +Array+ of Philologic::Client::Link objects
|
17
|
+
#
|
18
|
+
attr_reader :links
|
19
|
+
|
20
|
+
#
|
21
|
+
# Get document text or +nil+
|
22
|
+
#
|
23
|
+
attr_reader :text
|
24
|
+
|
25
|
+
#
|
26
|
+
# Initialize Philologic::Client::Document object.
|
27
|
+
#
|
28
|
+
# Params:
|
29
|
+
# +document+:: Nokogiri document
|
30
|
+
# +client+:: (optional) Philologic::Client object or +nil+
|
31
|
+
#
|
32
|
+
def initialize(document, client = nil)
|
33
|
+
super
|
34
|
+
|
35
|
+
@html = @text = nil
|
36
|
+
unless @doc.css('div.philologic_object').first.nil?
|
37
|
+
@text = @doc.css('div.philologic_object').children.text
|
38
|
+
@html = @doc.css('div.philologic_object').children.to_html
|
39
|
+
end
|
40
|
+
|
41
|
+
@links = []
|
42
|
+
@doc.css('div.philologic_navigation > a').each do |a|
|
43
|
+
@links << ::Philologic::Client::Link.new( a.attributes['href'].value, a.text.strip )
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
#
|
48
|
+
# Does this document contain navigation links?
|
49
|
+
#
|
50
|
+
def links?
|
51
|
+
@links.size > 0 ? true : false
|
52
|
+
end
|
53
|
+
|
54
|
+
#
|
55
|
+
# Does this document contain text?
|
56
|
+
#
|
57
|
+
def text?
|
58
|
+
@text ? true : false
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
|
63
|
+
end # class Client
|
64
|
+
end # module Philologic
|
65
|
+
|
@@ -0,0 +1,57 @@
|
|
1
|
+
|
2
|
+
module Philologic # :nodoc:
|
3
|
+
class Client # :nodoc:
|
4
|
+
|
5
|
+
#
|
6
|
+
# Philologic frequency table.
|
7
|
+
#
|
8
|
+
# Extends Philologic::Client::Response
|
9
|
+
#
|
10
|
+
class Frequency < ::Philologic::Client::Response
|
11
|
+
|
12
|
+
#
|
13
|
+
# Get label header or +nil+
|
14
|
+
#
|
15
|
+
attr_reader :label_header
|
16
|
+
|
17
|
+
#
|
18
|
+
# Get +Array+ of Philologic::Client::FrequencyRow objects
|
19
|
+
#
|
20
|
+
attr_reader :results
|
21
|
+
|
22
|
+
#
|
23
|
+
# Get value header or +nil+
|
24
|
+
#
|
25
|
+
attr_reader :value_header
|
26
|
+
|
27
|
+
#
|
28
|
+
# Initialize Philologic::Client::Frequency object.
|
29
|
+
#
|
30
|
+
# Params:
|
31
|
+
# +document+:: Nokogiri document
|
32
|
+
# +client+:: (optional) Philologic::Client object or +nil+
|
33
|
+
#
|
34
|
+
def initialize(document, client = nil)
|
35
|
+
super
|
36
|
+
|
37
|
+
header = @doc.css('table.philologic_table > tr.freq_header_row').first
|
38
|
+
unless header.nil?
|
39
|
+
@label_header = header.css('th.freq_label_header').first.text
|
40
|
+
@value_header = header.css('th.freq_value_header').first.text
|
41
|
+
end
|
42
|
+
|
43
|
+
@results = @doc.css('tr.freq_row').collect { |tr| Philologic::Client::FrequencyRow.new(tr) }
|
44
|
+
end
|
45
|
+
|
46
|
+
#
|
47
|
+
# Does this frequency table contain results?
|
48
|
+
#
|
49
|
+
def results?
|
50
|
+
@results.size > 0 ? true : false
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
end # class Client
|
56
|
+
end # module Philologic
|
57
|
+
|
@@ -0,0 +1,67 @@
|
|
1
|
+
|
2
|
+
module Philologic # :nodoc:
|
3
|
+
class Client # :nodoc:
|
4
|
+
|
5
|
+
#
|
6
|
+
# Philologic frequency table row.
|
7
|
+
#
|
8
|
+
# = Usage
|
9
|
+
#
|
10
|
+
# # <tr class='freq_row'>
|
11
|
+
# # <td class='freq_label'>
|
12
|
+
# # <a href='./?q=lion&title=A+Midsummer+Night%27s+Dream'>
|
13
|
+
# # A Midsummer Night's Dream
|
14
|
+
# # </a>
|
15
|
+
# # </td>
|
16
|
+
# # <td class='freq_value'>
|
17
|
+
# # 30
|
18
|
+
# # </td>
|
19
|
+
# # </tr>
|
20
|
+
#
|
21
|
+
# r = Philologic::Client::FrequencyRow.new(html)
|
22
|
+
# r.label # "A Midsummer Night's Dream"
|
23
|
+
# r.link # './?q=lion&title=A+Midsummer+Night%27s+Dream'
|
24
|
+
# r.value # "0"
|
25
|
+
#
|
26
|
+
class FrequencyRow
|
27
|
+
|
28
|
+
#
|
29
|
+
# Get label or +nil+
|
30
|
+
#
|
31
|
+
attr_reader :label
|
32
|
+
|
33
|
+
#
|
34
|
+
# Get link or +nil+
|
35
|
+
#
|
36
|
+
attr_reader :link
|
37
|
+
|
38
|
+
#
|
39
|
+
# Get value or +nil+
|
40
|
+
#
|
41
|
+
attr_reader :value
|
42
|
+
|
43
|
+
#
|
44
|
+
# Initialize Philologic::Client::FrequencyRow object.
|
45
|
+
#
|
46
|
+
# Params:
|
47
|
+
# +document+:: Nokogiri document
|
48
|
+
#
|
49
|
+
def initialize(document)
|
50
|
+
@label = @link = @value = nil
|
51
|
+
|
52
|
+
unless document.css('td.freq_label').first.nil?
|
53
|
+
@label = document.css('td.freq_label').first.text
|
54
|
+
end
|
55
|
+
unless document.css('a').first.nil?
|
56
|
+
@link = document.css('a').first.attributes['href'].value
|
57
|
+
end
|
58
|
+
unless document.css('td.freq_value').first.nil?
|
59
|
+
@value = document.css('td.freq_value').first.text
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
65
|
+
end # class Client
|
66
|
+
end # module Philologic
|
67
|
+
|
@@ -0,0 +1,37 @@
|
|
1
|
+
|
2
|
+
module Philologic # :nodoc:
|
3
|
+
class Client # :nodoc:
|
4
|
+
|
5
|
+
#
|
6
|
+
# Philologic link.
|
7
|
+
#
|
8
|
+
class Link
|
9
|
+
|
10
|
+
#
|
11
|
+
# Get link text or nil.
|
12
|
+
#
|
13
|
+
attr_reader :text
|
14
|
+
|
15
|
+
#
|
16
|
+
# Get link URL.
|
17
|
+
#
|
18
|
+
attr_reader :url
|
19
|
+
|
20
|
+
#
|
21
|
+
# Initialize Philologic::Client::Link object.
|
22
|
+
#
|
23
|
+
# Params:
|
24
|
+
# +url+:: URL
|
25
|
+
# +text+:: (optional) Text or +nil+
|
26
|
+
#
|
27
|
+
def initialize(url, text = nil)
|
28
|
+
raise('nil link') if url.nil?
|
29
|
+
@text = text
|
30
|
+
@url = url
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
end # class Client
|
36
|
+
end # module Philologic
|
37
|
+
|