hn 0.0.6 → 0.0.7
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/README.md +9 -1
- data/lib/hn/parsers/comment_parser.rb +1 -1
- data/lib/hn/parsers/entry_parser.rb +3 -3
- data/lib/hn/version.rb +1 -1
- data/spec/hn/parsers/comment_parser_spec.rb +1 -1
- data/spec/hn/parsers/entry_parser_spec.rb +11 -11
- metadata +45 -21
data/README.md
CHANGED
@@ -16,6 +16,13 @@ And then execute:
|
|
16
16
|
|
17
17
|
$ bundle
|
18
18
|
|
19
|
+
## Issues
|
20
|
+
|
21
|
+
Recently, Hacker News has started enforcing HTTPS connections. If you're having
|
22
|
+
problems accessing Hacker News via this gem, read [these
|
23
|
+
instructions](http://railsapps.github.com/openssl-certificate-verify-failed.html)
|
24
|
+
for specific fixes.
|
25
|
+
|
19
26
|
## Usage
|
20
27
|
|
21
28
|
require 'hn'
|
@@ -41,4 +48,5 @@ And then execute:
|
|
41
48
|
|
42
49
|
Thanks following wonderful people for contributing to this project:
|
43
50
|
|
44
|
-
[@bencevans](https://github.com/bencevans)
|
51
|
+
[@bencevans](https://github.com/bencevans)
|
52
|
+
[@imkmf](https://github.com/imkmf)
|
@@ -5,7 +5,7 @@ require "chronic"
|
|
5
5
|
module HackerNews
|
6
6
|
class CommentParser
|
7
7
|
def parse(entry_id)
|
8
|
-
doc = Nokogiri::HTML(open("
|
8
|
+
doc = Nokogiri::HTML(open("https://news.ycombinator.com/item?id=#{entry_id}"))
|
9
9
|
comment_data = doc.css('td.default').map { |td| extract_comment_from_td(td) }
|
10
10
|
comments = []
|
11
11
|
|
@@ -19,7 +19,7 @@ module HackerNews
|
|
19
19
|
private
|
20
20
|
|
21
21
|
def site_name
|
22
|
-
'
|
22
|
+
'https://news.ycombinator.com/'
|
23
23
|
end
|
24
24
|
|
25
25
|
def parse_entries(url)
|
@@ -38,7 +38,7 @@ module HackerNews
|
|
38
38
|
def parse_entry(trs, i)
|
39
39
|
Entry.new do |entry|
|
40
40
|
entry.link = trs[i*3].at_css('td.title a')['href']
|
41
|
-
entry.link = site_name + entry.link unless entry.link =~ /^
|
41
|
+
entry.link = site_name + entry.link unless entry.link =~ /^https/
|
42
42
|
|
43
43
|
entry.title = trs[i*3].at_css('td.title a').text
|
44
44
|
|
@@ -52,7 +52,7 @@ module HackerNews
|
|
52
52
|
begin
|
53
53
|
entry.id = trs[i*3+1].css('td.subtext a')[1]['href'].match(/\d+/)[0].to_i
|
54
54
|
rescue
|
55
|
-
entry.id = entry.link.match(/^
|
55
|
+
entry.id = entry.link.match(/^https:\/\/news\.ycombinator\.com\/item\?id=(\d+)$/)[1].to_i
|
56
56
|
end
|
57
57
|
end
|
58
58
|
rescue
|
data/lib/hn/version.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
|
-
FakeWeb.register_uri :get, '
|
3
|
+
FakeWeb.register_uri :get, 'https://news.ycombinator.com/item?id=4084603', :body => fixture('comments.html')
|
4
4
|
|
5
5
|
module HackerNews
|
6
6
|
describe CommentParser do
|
@@ -1,8 +1,8 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
|
3
|
-
FakeWeb.register_uri :get, '
|
4
|
-
FakeWeb.register_uri :get, '
|
5
|
-
FakeWeb.register_uri :get, '
|
3
|
+
FakeWeb.register_uri :get, 'https://news.ycombinator.com/', :body => fixture('home.html')
|
4
|
+
FakeWeb.register_uri :get, 'https://news.ycombinator.com/newest', :body => fixture('newest.html')
|
5
|
+
FakeWeb.register_uri :get, 'https://news.ycombinator.com/best', :body => fixture('best.html')
|
6
6
|
|
7
7
|
module HackerNews
|
8
8
|
describe EntryParser do
|
@@ -18,10 +18,10 @@ module HackerNews
|
|
18
18
|
entries.each do |entry|
|
19
19
|
entry.id.should > 4000000
|
20
20
|
entry.username.should =~ /\w+/
|
21
|
-
entry.link.should =~ /^
|
21
|
+
entry.link.should =~ /^https/
|
22
22
|
entry.title.should_not be_empty
|
23
23
|
entry.num_comments.should >= 0
|
24
|
-
entry.site.should_not =~ /^
|
24
|
+
entry.site.should_not =~ /^https/
|
25
25
|
entry.points.should_not == 0
|
26
26
|
|
27
27
|
entry.submitted_at.should < Time.now
|
@@ -37,15 +37,15 @@ module HackerNews
|
|
37
37
|
entries.each do |entry|
|
38
38
|
entry.id.should > 4000000
|
39
39
|
entry.username.should =~ /\w+/
|
40
|
-
entry.link.should =~ /^
|
40
|
+
entry.link.should =~ /^https/
|
41
41
|
|
42
42
|
if entry.site.nil? # ASK HN
|
43
|
-
entry.id.should == entry.link.match(/^
|
43
|
+
entry.id.should == entry.link.match(/^https:\/\/news\.ycombinator\.com\/item\?id=(\d+)$/)[1].to_i
|
44
44
|
end
|
45
45
|
|
46
46
|
entry.title.should_not be_empty
|
47
47
|
entry.num_comments.should >= 0
|
48
|
-
entry.site.should_not =~ /^
|
48
|
+
entry.site.should_not =~ /^https/
|
49
49
|
entry.points.should >= 0
|
50
50
|
entry.submitted_at.should < Time.now
|
51
51
|
end
|
@@ -60,15 +60,15 @@ module HackerNews
|
|
60
60
|
entries.each do |entry|
|
61
61
|
entry.id.should > 4000000
|
62
62
|
entry.username.should =~ /\w+/
|
63
|
-
entry.link.should =~ /^
|
63
|
+
entry.link.should =~ /^https/
|
64
64
|
|
65
65
|
if entry.site.nil? # ASK HN
|
66
|
-
entry.id.should == entry.link.match(/^
|
66
|
+
entry.id.should == entry.link.match(/^https:\/\/news\.ycombinator\.com\/item\?id=(\d+)$/)[1].to_i
|
67
67
|
end
|
68
68
|
|
69
69
|
entry.title.should_not be_empty
|
70
70
|
entry.num_comments.should >= 0
|
71
|
-
entry.site.should_not =~ /^
|
71
|
+
entry.site.should_not =~ /^https/
|
72
72
|
entry.points.should >= 0
|
73
73
|
entry.submitted_at.should < Time.now
|
74
74
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hn
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-03-24 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,15 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: rake
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ! '>='
|
@@ -32,10 +37,15 @@ dependencies:
|
|
32
37
|
version: '0'
|
33
38
|
type: :development
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
47
|
name: simplecov
|
38
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
41
51
|
- - ! '>='
|
@@ -43,10 +53,15 @@ dependencies:
|
|
43
53
|
version: '0'
|
44
54
|
type: :development
|
45
55
|
prerelease: false
|
46
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
47
62
|
- !ruby/object:Gem::Dependency
|
48
63
|
name: fakeweb
|
49
|
-
requirement:
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
50
65
|
none: false
|
51
66
|
requirements:
|
52
67
|
- - ! '>='
|
@@ -54,10 +69,15 @@ dependencies:
|
|
54
69
|
version: '0'
|
55
70
|
type: :development
|
56
71
|
prerelease: false
|
57
|
-
version_requirements:
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
58
78
|
- !ruby/object:Gem::Dependency
|
59
79
|
name: nokogiri
|
60
|
-
requirement:
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
61
81
|
none: false
|
62
82
|
requirements:
|
63
83
|
- - ! '>='
|
@@ -65,10 +85,15 @@ dependencies:
|
|
65
85
|
version: '0'
|
66
86
|
type: :runtime
|
67
87
|
prerelease: false
|
68
|
-
version_requirements:
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
69
94
|
- !ruby/object:Gem::Dependency
|
70
95
|
name: chronic
|
71
|
-
requirement:
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
72
97
|
none: false
|
73
98
|
requirements:
|
74
99
|
- - ! '>='
|
@@ -76,7 +101,12 @@ dependencies:
|
|
76
101
|
version: '0'
|
77
102
|
type: :runtime
|
78
103
|
prerelease: false
|
79
|
-
version_requirements:
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
80
110
|
description: A tiny gem to fetch Hacker News entries
|
81
111
|
email:
|
82
112
|
- afu@forresty.com
|
@@ -120,21 +150,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
120
150
|
- - ! '>='
|
121
151
|
- !ruby/object:Gem::Version
|
122
152
|
version: '0'
|
123
|
-
segments:
|
124
|
-
- 0
|
125
|
-
hash: 556332051837383682
|
126
153
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
127
154
|
none: false
|
128
155
|
requirements:
|
129
156
|
- - ! '>='
|
130
157
|
- !ruby/object:Gem::Version
|
131
158
|
version: '0'
|
132
|
-
segments:
|
133
|
-
- 0
|
134
|
-
hash: 556332051837383682
|
135
159
|
requirements: []
|
136
160
|
rubyforge_project:
|
137
|
-
rubygems_version: 1.8.
|
161
|
+
rubygems_version: 1.8.24
|
138
162
|
signing_key:
|
139
163
|
specification_version: 3
|
140
164
|
summary: A tiny gem to fetch Hacker News entries
|