hnjobs 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/hnjobs.rb +18 -5
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0532ea5c62233727a16808d509aa3c5b49b94f00
|
4
|
+
data.tar.gz: 61bd1bf18f7ac14720549b5ed259ba968dd84ac9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5d676970ded7315cb9d5441c6496728217e1a90d9adf246ec6752e837217c08236047b4bfe2fba8af8a4481888c2cf204dd0c01c59929d506bcc9942582f0595
|
7
|
+
data.tar.gz: ce5e836da74736e0ee6d04391497d567ea332bb6fb9c4d5513002dd80e366e6581171775e73b45faa95e6184738593f65fe9fc72b8117d1e8fc0d7302e3877a9
|
data/lib/hnjobs.rb
CHANGED
@@ -1,19 +1,32 @@
|
|
1
1
|
require 'json'
|
2
2
|
require 'nokogiri'
|
3
3
|
require 'net/http'
|
4
|
+
require 'thread'
|
5
|
+
|
4
6
|
class HNJobs
|
5
7
|
BASE_URL = "https://hacker-news.firebaseio.com/v0/"
|
6
8
|
JOBS_URL = BASE_URL + "jobstories.json"
|
9
|
+
attr_reader :jobs
|
7
10
|
def initialize
|
8
11
|
@jobs = Array.new
|
9
12
|
uri = URI(JOBS_URL)
|
10
13
|
ids = JSON.parse(Net::HTTP.get(uri))
|
14
|
+
@jobs = get_jobs ids
|
15
|
+
end
|
16
|
+
private
|
17
|
+
def get_jobs ids
|
18
|
+
mutex = Mutex.new
|
19
|
+
threads = Array.new
|
20
|
+
jobs = Array.new
|
11
21
|
ids.each do |id|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
22
|
+
threads << Thread.new(id, jobs) do |id, jobs|
|
23
|
+
job_uri = URI(BASE_URL + "item/#{id}.json")
|
24
|
+
job = JSON.parse(Net::HTTP.get(job_uri))
|
25
|
+
job["text"] = Nokogiri::HTML(job["text"]).text
|
26
|
+
mutex.synchronize{ jobs << job}
|
27
|
+
end
|
16
28
|
end
|
29
|
+
threads.each(&:join)
|
30
|
+
jobs
|
17
31
|
end
|
18
|
-
attr_reader :jobs
|
19
32
|
end
|