medium-scrapper 0.0.5 → 0.0.6
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.
- checksums.yaml +4 -4
- data/lib/builder/user_builder.rb +9 -6
- data/lib/medium-scrapper.rb +0 -1
- data/lib/model/{medium-user.rb → medium_user.rb} +0 -1
- data/lib/model/post.rb +1 -2
- data/lib/parser/url_parser.rb +12 -9
- data/lib/retriever/post_retriever.rb +10 -9
- data/lib/retriever/user_retriever.rb +11 -9
- metadata +18 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d15ddfbb7e177f9a866559d271ad6beafa57902f
|
4
|
+
data.tar.gz: b4e9871864780f2f82b9dc143bcc94f645894cc9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c2bb3dbb70a1d64d4a32b54c3327b56be538f631d0953593333c4c39200092bdc6a7c2d9594bc85d19fc17f88796a515142bb0e1a7af2c4a71d3819b0baed589
|
7
|
+
data.tar.gz: 2b3aa873d91f573db76e4dc765bdf2b2b71f03fb7d043f1a74fe8735aec2d493e6ecc297fee99b1ce0ccc5fb8966813a3fa1f5ed38986e64bdc404d009932ee3
|
data/lib/builder/user_builder.rb
CHANGED
@@ -1,5 +1,4 @@
|
|
1
|
-
|
2
|
-
require "model/medium-user"
|
1
|
+
require 'model/medium_user'
|
3
2
|
|
4
3
|
class UserBuilder
|
5
4
|
def initialize(raw_user)
|
@@ -7,11 +6,15 @@ class UserBuilder
|
|
7
6
|
end
|
8
7
|
|
9
8
|
def build
|
10
|
-
name =
|
11
|
-
username =
|
12
|
-
user_id =
|
13
|
-
bio =
|
9
|
+
name = raw_user['name']
|
10
|
+
username = raw_user['username']
|
11
|
+
user_id = raw_user['userId']
|
12
|
+
bio = raw_user['bio']
|
14
13
|
|
15
14
|
MediumUser.new(name, username, user_id, bio)
|
16
15
|
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
attr_reader :raw_user
|
17
20
|
end
|
data/lib/medium-scrapper.rb
CHANGED
data/lib/model/post.rb
CHANGED
data/lib/parser/url_parser.rb
CHANGED
@@ -1,6 +1,5 @@
|
|
1
|
-
|
2
|
-
require
|
3
|
-
require "json"
|
1
|
+
require 'open-uri'
|
2
|
+
require 'json'
|
4
3
|
|
5
4
|
class UrlParser
|
6
5
|
def initialize(url)
|
@@ -8,12 +7,16 @@ class UrlParser
|
|
8
7
|
end
|
9
8
|
|
10
9
|
def parse
|
11
|
-
content
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
10
|
+
JSON.parse(content[16..-1])['payload']
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def content
|
16
|
+
content = ''
|
17
|
+
open(@url) do |file|
|
18
|
+
file.each_line { |line| content << line }
|
16
19
|
end
|
17
|
-
|
20
|
+
content
|
18
21
|
end
|
19
22
|
end
|
@@ -1,5 +1,4 @@
|
|
1
|
-
|
2
|
-
require "model/post"
|
1
|
+
require 'model/post'
|
3
2
|
|
4
3
|
class PostRetriever
|
5
4
|
def initialize(parser)
|
@@ -9,21 +8,23 @@ class PostRetriever
|
|
9
8
|
def load(user_id, post_id)
|
10
9
|
parsed_url = parse_url(user_id, post_id)
|
11
10
|
|
12
|
-
Post.new(
|
13
|
-
parsed_url[
|
14
|
-
|
15
|
-
parsed_url[
|
11
|
+
Post.new(
|
12
|
+
parsed_url['title'],
|
13
|
+
parsed_url['content']['subtitle'],
|
14
|
+
normalize_content(parsed_url['content']['bodyModel']['paragraphs']),
|
15
|
+
parsed_url['canonicalUrl']
|
16
|
+
)
|
16
17
|
end
|
17
18
|
|
18
19
|
def normalize_content(paragraphs_raw)
|
19
|
-
body =
|
20
|
+
body = ''
|
20
21
|
paragraphs_raw[1..-1].each do |paragraph|
|
21
|
-
body << paragraph[
|
22
|
+
body << paragraph['text'] + '\n\n'
|
22
23
|
end
|
23
24
|
body
|
24
25
|
end
|
25
26
|
|
26
27
|
def parse_url(user_id, post_id)
|
27
|
-
@parser.new("https://www.medium.com/@#{user_id}/#{post_id}?format=json").parse[
|
28
|
+
@parser.new("https://www.medium.com/@#{user_id}/#{post_id}?format=json").parse['value']
|
28
29
|
end
|
29
30
|
end
|
@@ -1,6 +1,6 @@
|
|
1
|
-
|
2
|
-
require
|
3
|
-
require
|
1
|
+
require 'builder/user_builder'
|
2
|
+
require 'retriever/post_retriever'
|
3
|
+
require 'pry'
|
4
4
|
|
5
5
|
class UserRetriever
|
6
6
|
def initialize(parser)
|
@@ -10,19 +10,21 @@ class UserRetriever
|
|
10
10
|
def load(username)
|
11
11
|
parsed_url = parse_url(username)
|
12
12
|
|
13
|
-
user = UserBuilder.new(parsed_url[
|
13
|
+
user = UserBuilder.new(parsed_url['User']).build
|
14
14
|
|
15
|
-
posts_raw = parsed_url[
|
16
|
-
posts_raw.each
|
17
|
-
user.add_post(PostRetriever.new(@parser).load(user.user_id, post_raw["id"]))
|
18
|
-
end
|
15
|
+
posts_raw = parsed_url['Post']
|
16
|
+
posts_raw.each { |post_raw| user.add_post(retrieve_post(post_raw)) }
|
19
17
|
|
20
18
|
user
|
21
19
|
end
|
22
20
|
|
23
21
|
private
|
24
22
|
|
23
|
+
def retrieve_post(post_raw)
|
24
|
+
PostRetriever.new(@parser).load(user.user_id, post_raw[1]['id'])
|
25
|
+
end
|
26
|
+
|
25
27
|
def parse_url(username)
|
26
|
-
@parser.new("https://www.medium.com/@#{username}?format=json").parse
|
28
|
+
@parser.new("https://www.medium.com/@#{username}?format=json").parse['references']
|
27
29
|
end
|
28
30
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: medium-scrapper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- uesteibar
|
@@ -9,7 +9,21 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
date: 2015-06-21 00:00:00.000000000 Z
|
12
|
-
dependencies:
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rspec
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
13
27
|
description: Ruby gem that provides a Medium.com read-only API
|
14
28
|
email: uesteibar@gmail.com
|
15
29
|
executables: []
|
@@ -18,7 +32,7 @@ extra_rdoc_files: []
|
|
18
32
|
files:
|
19
33
|
- lib/builder/user_builder.rb
|
20
34
|
- lib/medium-scrapper.rb
|
21
|
-
- lib/model/
|
35
|
+
- lib/model/medium_user.rb
|
22
36
|
- lib/model/post.rb
|
23
37
|
- lib/parser/url_parser.rb
|
24
38
|
- lib/retriever/post_retriever.rb
|
@@ -43,9 +57,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
43
57
|
version: '0'
|
44
58
|
requirements: []
|
45
59
|
rubyforge_project:
|
46
|
-
rubygems_version: 2.
|
60
|
+
rubygems_version: 2.6.8
|
47
61
|
signing_key:
|
48
62
|
specification_version: 4
|
49
63
|
summary: medium read-only api
|
50
64
|
test_files: []
|
51
|
-
has_rdoc:
|