sakamichi_scraper 0.1.0 → 0.2.1
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/.github/workflows/ruby.yml +14 -12
- data/.gitignore +3 -0
- data/.rubocop.yml +46 -0
- data/Gemfile +1 -1
- data/README.md +24 -8
- data/config/url.yml +3 -0
- data/lib/sakamichi_scraper/base.rb +59 -5
- data/lib/sakamichi_scraper/hinatazaka.rb +30 -12
- data/lib/sakamichi_scraper/sakurazaka.rb +25 -15
- data/lib/sakamichi_scraper/version.rb +1 -1
- data/sakamichi_scraper.gemspec +12 -13
- metadata +40 -24
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2b256ed83c9eb81632a112c167fe530199a4bc776abb3a5b0788b05625ed7e9c
|
|
4
|
+
data.tar.gz: 2aebb5564e81667cc41c90d1080b43f034a50841b02f4d9fba0d0d3708d1f223
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e320fe37e4a173a5857e47f22c66ca41e1eedd48570ee781bee7d38f6ef79157d6dd4523cb2b951d924e7eca91551bb02a2695890b4a8ae9b460f0632b88202e
|
|
7
|
+
data.tar.gz: e34b7e0c6736686005be08c3d30b7cbfbbca237291308056d1d2b8542ea163a53873bad67d48c7545418fcd50ca2b2d3e76c666a3db2e321ab2d70e881aeff34
|
data/.github/workflows/ruby.yml
CHANGED
|
@@ -17,17 +17,19 @@ jobs:
|
|
|
17
17
|
test:
|
|
18
18
|
|
|
19
19
|
runs-on: ubuntu-latest
|
|
20
|
+
strategy:
|
|
21
|
+
matrix:
|
|
22
|
+
ruby-version: ['2.6', '2.7', '3.0', '3.1', '3.2']
|
|
20
23
|
|
|
21
24
|
steps:
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
run: bundle exec rspec spec/*
|
|
25
|
+
- uses: actions/checkout@v2
|
|
26
|
+
- name: Set up Ruby ${{ matrix.ruby-version }}
|
|
27
|
+
# To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
|
|
28
|
+
# change this to (see https://github.com/ruby/setup-ruby#versioning):
|
|
29
|
+
# uses: ruby/setup-ruby@v1
|
|
30
|
+
uses: ruby/setup-ruby@v1
|
|
31
|
+
with:
|
|
32
|
+
ruby-version: ${{ matrix.ruby-version }}
|
|
33
|
+
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
|
34
|
+
- name: Run tests
|
|
35
|
+
run: bundle exec rspec spec/*
|
data/.gitignore
CHANGED
data/.rubocop.yml
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
inherit_from: .rubocop_todo.yml
|
|
2
|
+
|
|
3
|
+
# Hashの key/value の記述方法についてkey: value 形式を有効とする
|
|
4
|
+
Style/HashSyntax:
|
|
5
|
+
EnforcedStyle: ruby19
|
|
6
|
+
|
|
7
|
+
# 変数展開やエスケープの必要がない場合はダブルクォートを利用する
|
|
8
|
+
StringLiterals:
|
|
9
|
+
EnforcedStyle: double_quotes
|
|
10
|
+
|
|
11
|
+
# パーセント記法の記号について とりあえずすべて()
|
|
12
|
+
PercentLiteralDelimiters:
|
|
13
|
+
PreferredDelimiters:
|
|
14
|
+
'%': ()
|
|
15
|
+
'%i': ()
|
|
16
|
+
'%q': ()
|
|
17
|
+
'%Q': ()
|
|
18
|
+
'%r': ()
|
|
19
|
+
'%s': ()
|
|
20
|
+
'%w': ()
|
|
21
|
+
'%W': ()
|
|
22
|
+
'%x': ()
|
|
23
|
+
|
|
24
|
+
# 式展開中でもダブルクォートを使う
|
|
25
|
+
Style/StringLiteralsInInterpolation:
|
|
26
|
+
EnforcedStyle: double_quotes
|
|
27
|
+
|
|
28
|
+
# 日本語コメントを許容する
|
|
29
|
+
Style/AsciiComments:
|
|
30
|
+
Enabled: false
|
|
31
|
+
|
|
32
|
+
# 鬱陶しいのでfrozen_string_literalは書かなくてもいいことにする
|
|
33
|
+
Style/FrozenStringLiteralComment:
|
|
34
|
+
Enabled: false
|
|
35
|
+
|
|
36
|
+
# required_ruby_versionはまだ指定しない
|
|
37
|
+
Gemspec/RequiredRubyVersion:
|
|
38
|
+
Enabled: false
|
|
39
|
+
|
|
40
|
+
# initialize classにsuperを強制しない
|
|
41
|
+
Lint/MissingSuper:
|
|
42
|
+
Enabled: false
|
|
43
|
+
|
|
44
|
+
#メソッド行上限を20行にする
|
|
45
|
+
Metrics/MethodLength:
|
|
46
|
+
Max: 20
|
data/Gemfile
CHANGED
data/README.md
CHANGED
|
@@ -1,8 +1,6 @@
|
|
|
1
1
|
# SakamichiScraper
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
TODO: Delete this and the text above, and describe your gem
|
|
2
|
+
## about me
|
|
3
|
+
This gem is used to scrape information from Sakamichi group's(Hinatazaka46, Sakurazaka46) blog.
|
|
6
4
|
|
|
7
5
|
## Installation
|
|
8
6
|
|
|
@@ -25,25 +23,43 @@ Or install it yourself as:
|
|
|
25
23
|
### get title of blog
|
|
26
24
|
|
|
27
25
|
#### Hinatazaka46
|
|
26
|
+
|
|
28
27
|
```ruby
|
|
29
28
|
hinata = SakamichiScraper::Hinatazaka.new
|
|
30
29
|
|
|
31
30
|
# get newest title of article
|
|
32
|
-
hinata.
|
|
31
|
+
hinata.newest_blog_title
|
|
33
32
|
|
|
34
33
|
# get recent title, member name, timestamp of article
|
|
35
|
-
hinata.
|
|
34
|
+
hinata.recent_blog_info
|
|
36
35
|
```
|
|
37
36
|
|
|
38
37
|
#### Sakurazaka46
|
|
38
|
+
|
|
39
39
|
```ruby
|
|
40
40
|
sakura = SakamichiScraper::Sakurazaka.new
|
|
41
41
|
|
|
42
42
|
# get newest title of article
|
|
43
|
-
sakura.
|
|
43
|
+
sakura.newest_blog_title
|
|
44
44
|
|
|
45
45
|
# get recent title, member name, timestamp of article
|
|
46
|
-
sakura.
|
|
46
|
+
sakura.recent_blog_info
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### get images
|
|
50
|
+
NOTE: Any images obtained by executing the following method will be stored in folder `img/<today(yyyymmdd)>`.
|
|
51
|
+
#### Hinatazaka46
|
|
52
|
+
|
|
53
|
+
```ruby
|
|
54
|
+
# get images from newest article
|
|
55
|
+
hinata.picture_in_newest_article
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
#### Sakurazaka46
|
|
59
|
+
|
|
60
|
+
```ruby
|
|
61
|
+
# get images from newest article
|
|
62
|
+
sakura.picture_in_newest_article
|
|
47
63
|
```
|
|
48
64
|
|
|
49
65
|
## Development
|
data/config/url.yml
CHANGED
|
@@ -1,14 +1,27 @@
|
|
|
1
|
+
require "fileutils"
|
|
2
|
+
|
|
1
3
|
module SakamichiScraper
|
|
2
4
|
class Base
|
|
3
|
-
def
|
|
5
|
+
def initialize(group_name)
|
|
6
|
+
@group_name = group_name
|
|
7
|
+
@home_page = "https://#{@group_name}46.com"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def init_url_from_yml(group_name, yml_key)
|
|
4
11
|
url = YAML.load_file("config/url.yml")["#{group_name}"]["#{yml_key}"]
|
|
5
12
|
get_content(url)
|
|
6
13
|
end
|
|
7
14
|
|
|
8
15
|
def get_content(url)
|
|
9
|
-
URI.open(url, "User-Agent" => "
|
|
10
|
-
|
|
11
|
-
|
|
16
|
+
URI.open(url, "User-Agent" => "Ruby/2.7.1", &:read)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def blog_top_page
|
|
20
|
+
init_url_from_yml(@group_name, "blog_top_page")
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def blog_list_page
|
|
24
|
+
init_url_from_yml(@group_name, "blog_list_page")
|
|
12
25
|
end
|
|
13
26
|
|
|
14
27
|
def format_content(content)
|
|
@@ -16,7 +29,48 @@ module SakamichiScraper
|
|
|
16
29
|
end
|
|
17
30
|
|
|
18
31
|
def format_timestamp(datetime)
|
|
19
|
-
DateTime.parse(datetime).strftime(
|
|
32
|
+
DateTime.parse(datetime).strftime("%Y-%-m-%-d %-H:%-M")
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def exec_date
|
|
36
|
+
@exec_date ||= Time.now.strftime("%Y%m%d")
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
def mkdir_today_file_path
|
|
40
|
+
FileUtils.mkdir_p(image_file_path)
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def exclude_img_path(group_name)
|
|
44
|
+
YAML.load_file("config/url.yml")["#{group_name}"]["exclude_img_path"]
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def image_file_path
|
|
48
|
+
"img/#{@group_name}/#{exec_date}"
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def image_urls_from_article_url(article_html, class_name)
|
|
52
|
+
[].tap do |url|
|
|
53
|
+
Nokogiri.parse(article_html, nil, nil).css("#{class_name} img").each do |c|
|
|
54
|
+
image_url = c.attribute("src").value
|
|
55
|
+
url << case @group_name
|
|
56
|
+
when "sakurazaka"
|
|
57
|
+
"#{@home_page}#{image_url}"
|
|
58
|
+
else
|
|
59
|
+
image_url
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def download_images_from_url_list(image_urls)
|
|
66
|
+
image_urls.each do |image_url|
|
|
67
|
+
dest_image_path = "#{image_file_path}/#{image_url[%r([^/]+$)]}"
|
|
68
|
+
File.open(dest_image_path, "w") do |pass|
|
|
69
|
+
URI.parse(image_url).open do |img|
|
|
70
|
+
pass.write(img.read)
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
20
74
|
end
|
|
21
75
|
end
|
|
22
76
|
end
|
|
@@ -1,24 +1,25 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "base"
|
|
2
2
|
|
|
3
3
|
module SakamichiScraper
|
|
4
4
|
class Hinatazaka < Base
|
|
5
|
-
def
|
|
6
|
-
|
|
7
|
-
Nokogiri::HTML.parse(html, nil, nil).title
|
|
5
|
+
def initialize
|
|
6
|
+
super("hinatazaka")
|
|
8
7
|
end
|
|
9
8
|
|
|
10
|
-
def
|
|
11
|
-
|
|
12
|
-
|
|
9
|
+
def blog_top_page_title
|
|
10
|
+
Nokogiri::HTML.parse(blog_top_page, nil, nil).title
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def newest_blog_title
|
|
14
|
+
scraped_title = Nokogiri.parse(blog_top_page, nil, nil)
|
|
13
15
|
.at_css(".p-blog-main__head > .c-blog-main__title")
|
|
14
16
|
.content
|
|
15
17
|
format_content(scraped_title)
|
|
16
18
|
end
|
|
17
19
|
|
|
18
|
-
def
|
|
20
|
+
def recent_blog_info
|
|
19
21
|
res = []
|
|
20
|
-
|
|
21
|
-
Nokogiri.parse(html, nil, nil).css(".p-blog-top__list > li").each do |c|
|
|
22
|
+
Nokogiri.parse(blog_top_page, nil, nil).css(".p-blog-top__list > li").each do |c|
|
|
22
23
|
info_arr = c.content.strip.split("\n").reject { |i| i.blank? }
|
|
23
24
|
info = {
|
|
24
25
|
member: info_arr[0],
|
|
@@ -29,10 +30,27 @@ module SakamichiScraper
|
|
|
29
30
|
end
|
|
30
31
|
end
|
|
31
32
|
|
|
33
|
+
def picture_in_newest_article
|
|
34
|
+
newest_article_url = article_urls_from_list_page(blog_top_page).first
|
|
35
|
+
article_html = get_content(newest_article_url)
|
|
36
|
+
image_urls = image_urls_from_article_url(article_html, "div.c-blog-article__text")
|
|
37
|
+
|
|
38
|
+
mkdir_today_file_path unless Dir.exist?(image_file_path)
|
|
39
|
+
download_images_from_url_list(image_urls)
|
|
40
|
+
end
|
|
41
|
+
|
|
32
42
|
private
|
|
33
43
|
|
|
34
|
-
def
|
|
35
|
-
|
|
44
|
+
def article_urls_from_list_page(html)
|
|
45
|
+
[].tap do |array|
|
|
46
|
+
Nokogiri.parse(html, nil, nil).css(".p-blog-top__list > li").each do |c|
|
|
47
|
+
array << "#{@home_page}#{c.css("a")[0][:href]}".match(/(.*)\?.*$/)[1]
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def blog_top_page
|
|
53
|
+
init_url_from_yml(@group_name, "blog_top_page")
|
|
36
54
|
end
|
|
37
55
|
end
|
|
38
56
|
end
|
|
@@ -1,21 +1,22 @@
|
|
|
1
|
-
|
|
1
|
+
require_relative "base"
|
|
2
2
|
|
|
3
3
|
module SakamichiScraper
|
|
4
4
|
class Sakurazaka < Base
|
|
5
|
-
def
|
|
6
|
-
|
|
7
|
-
Nokogiri::HTML.parse(html, nil, nil).title
|
|
5
|
+
def initialize
|
|
6
|
+
super("sakurazaka")
|
|
8
7
|
end
|
|
9
8
|
|
|
10
|
-
def
|
|
11
|
-
|
|
12
|
-
Nokogiri.parse(html, nil, nil).css(".inner.title-wrap > .title").first.children.to_s
|
|
9
|
+
def blog_top_page_title
|
|
10
|
+
Nokogiri::HTML.parse(blog_top_page, nil, nil).title
|
|
13
11
|
end
|
|
14
12
|
|
|
15
|
-
def
|
|
13
|
+
def newest_blog_title
|
|
14
|
+
Nokogiri.parse(blog_list_page, nil, nil).at_css(".date-title > .title").children.to_s
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def recent_blog_info
|
|
16
18
|
res = []
|
|
17
|
-
|
|
18
|
-
Nokogiri.parse(html, nil, nil).css(".com-blog-part.box4.fxpc > li").each do |c|
|
|
19
|
+
Nokogiri.parse(blog_list_page, nil, nil).css(".com-blog-part.box4.fxpc > li").each do |c|
|
|
19
20
|
info = {
|
|
20
21
|
member: c.css(".prof-in.fx > .name").children.to_s,
|
|
21
22
|
title: c.css(".date-title > .title").children.to_s,
|
|
@@ -25,14 +26,23 @@ module SakamichiScraper
|
|
|
25
26
|
end
|
|
26
27
|
end
|
|
27
28
|
|
|
28
|
-
|
|
29
|
+
def picture_in_newest_article
|
|
30
|
+
newest_article_url = article_urls_from_list_page(blog_list_page).first
|
|
31
|
+
article_html = get_content(newest_article_url)
|
|
32
|
+
image_urls = image_urls_from_article_url(article_html, "div.box-article")
|
|
29
33
|
|
|
30
|
-
|
|
31
|
-
|
|
34
|
+
mkdir_today_file_path unless Dir.exist?(image_file_path)
|
|
35
|
+
download_images_from_url_list(image_urls)
|
|
32
36
|
end
|
|
33
37
|
|
|
34
|
-
|
|
35
|
-
|
|
38
|
+
private
|
|
39
|
+
|
|
40
|
+
def article_urls_from_list_page(html)
|
|
41
|
+
[].tap do |array|
|
|
42
|
+
Nokogiri.parse(html, nil, nil).css(".com-blog-part.box4.fxpc > li").each do |c|
|
|
43
|
+
array << "#{@home_page}#{c.css("a")[0][:href]}"
|
|
44
|
+
end
|
|
45
|
+
end
|
|
36
46
|
end
|
|
37
47
|
end
|
|
38
48
|
end
|
data/sakamichi_scraper.gemspec
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
lib = File.expand_path("../lib", __FILE__)
|
|
1
|
+
lib = File.expand_path("lib", __dir__)
|
|
3
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
3
|
require "sakamichi_scraper/version"
|
|
5
4
|
|
|
@@ -9,25 +8,25 @@ Gem::Specification.new do |spec|
|
|
|
9
8
|
spec.authors = ["oyrarumakan"]
|
|
10
9
|
spec.email = ["ryo19911030@hotmail.co.jp"]
|
|
11
10
|
|
|
12
|
-
spec.summary =
|
|
13
|
-
spec.description =
|
|
11
|
+
spec.summary = "scrape gem from Sakamichi group's(Hinatazaka46, Sakurazaka46) blog"
|
|
12
|
+
spec.description = "This gem is used to scrape info from Sakamichi group's(Hinatazaka46, Sakurazaka46) blog."
|
|
14
13
|
spec.homepage = "https://github.com/oyrarumakan/sakamichi_scraper"
|
|
15
14
|
spec.license = "MIT"
|
|
16
15
|
|
|
17
16
|
# Specify which files should be added to the gem when it is released.
|
|
18
17
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
|
19
|
-
spec.files = Dir.chdir(File.expand_path(
|
|
18
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
|
20
19
|
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
|
21
20
|
end
|
|
22
21
|
spec.bindir = "exe"
|
|
23
|
-
spec.executables = spec.files.grep(%r
|
|
22
|
+
spec.executables = spec.files.grep(%r(^exe/)) { |f| File.basename(f) }
|
|
24
23
|
spec.require_paths = ["lib"]
|
|
25
24
|
|
|
26
|
-
spec.add_dependency "activesupport", "6.0.
|
|
27
|
-
spec.add_dependency "nokogiri", "1.
|
|
28
|
-
spec.add_development_dependency "bundler"
|
|
29
|
-
spec.add_development_dependency "
|
|
30
|
-
spec.add_development_dependency "
|
|
31
|
-
spec.add_development_dependency "
|
|
32
|
-
|
|
25
|
+
spec.add_dependency "activesupport", "~> 6.0.0"
|
|
26
|
+
spec.add_dependency "nokogiri", ">= 1.11.7"
|
|
27
|
+
spec.add_development_dependency "bundler"
|
|
28
|
+
spec.add_development_dependency "pry", "~> 0.13.0"
|
|
29
|
+
spec.add_development_dependency "rake", "~> 12.3.0"
|
|
30
|
+
spec.add_development_dependency "rspec", "~> 3.9.0"
|
|
31
|
+
spec.add_development_dependency "rubocop", "1.11.0"
|
|
33
32
|
end
|
metadata
CHANGED
|
@@ -1,100 +1,115 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: sakamichi_scraper
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.1
|
|
4
|
+
version: 0.2.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- oyrarumakan
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2023-06-11 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activesupport
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
|
-
- -
|
|
17
|
+
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: 6.0.
|
|
19
|
+
version: 6.0.0
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
|
-
- -
|
|
24
|
+
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: 6.0.
|
|
26
|
+
version: 6.0.0
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: nokogiri
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
30
30
|
requirements:
|
|
31
|
-
- -
|
|
31
|
+
- - ">="
|
|
32
32
|
- !ruby/object:Gem::Version
|
|
33
|
-
version: 1.
|
|
33
|
+
version: 1.11.7
|
|
34
34
|
type: :runtime
|
|
35
35
|
prerelease: false
|
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
|
37
37
|
requirements:
|
|
38
|
-
- -
|
|
38
|
+
- - ">="
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
|
-
version: 1.
|
|
40
|
+
version: 1.11.7
|
|
41
41
|
- !ruby/object:Gem::Dependency
|
|
42
42
|
name: bundler
|
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
|
44
44
|
requirements:
|
|
45
|
-
- -
|
|
45
|
+
- - ">="
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version:
|
|
47
|
+
version: '0'
|
|
48
48
|
type: :development
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
|
-
- -
|
|
52
|
+
- - ">="
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
|
-
version:
|
|
54
|
+
version: '0'
|
|
55
|
+
- !ruby/object:Gem::Dependency
|
|
56
|
+
name: pry
|
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
|
58
|
+
requirements:
|
|
59
|
+
- - "~>"
|
|
60
|
+
- !ruby/object:Gem::Version
|
|
61
|
+
version: 0.13.0
|
|
62
|
+
type: :development
|
|
63
|
+
prerelease: false
|
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
65
|
+
requirements:
|
|
66
|
+
- - "~>"
|
|
67
|
+
- !ruby/object:Gem::Version
|
|
68
|
+
version: 0.13.0
|
|
55
69
|
- !ruby/object:Gem::Dependency
|
|
56
70
|
name: rake
|
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
|
58
72
|
requirements:
|
|
59
73
|
- - "~>"
|
|
60
74
|
- !ruby/object:Gem::Version
|
|
61
|
-
version:
|
|
75
|
+
version: 12.3.0
|
|
62
76
|
type: :development
|
|
63
77
|
prerelease: false
|
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
79
|
requirements:
|
|
66
80
|
- - "~>"
|
|
67
81
|
- !ruby/object:Gem::Version
|
|
68
|
-
version:
|
|
82
|
+
version: 12.3.0
|
|
69
83
|
- !ruby/object:Gem::Dependency
|
|
70
84
|
name: rspec
|
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
|
72
86
|
requirements:
|
|
73
87
|
- - "~>"
|
|
74
88
|
- !ruby/object:Gem::Version
|
|
75
|
-
version:
|
|
89
|
+
version: 3.9.0
|
|
76
90
|
type: :development
|
|
77
91
|
prerelease: false
|
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
93
|
requirements:
|
|
80
94
|
- - "~>"
|
|
81
95
|
- !ruby/object:Gem::Version
|
|
82
|
-
version:
|
|
96
|
+
version: 3.9.0
|
|
83
97
|
- !ruby/object:Gem::Dependency
|
|
84
|
-
name:
|
|
98
|
+
name: rubocop
|
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
|
86
100
|
requirements:
|
|
87
101
|
- - '='
|
|
88
102
|
- !ruby/object:Gem::Version
|
|
89
|
-
version:
|
|
103
|
+
version: 1.11.0
|
|
90
104
|
type: :development
|
|
91
105
|
prerelease: false
|
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
107
|
requirements:
|
|
94
108
|
- - '='
|
|
95
109
|
- !ruby/object:Gem::Version
|
|
96
|
-
version:
|
|
97
|
-
description:
|
|
110
|
+
version: 1.11.0
|
|
111
|
+
description: This gem is used to scrape info from Sakamichi group's(Hinatazaka46,
|
|
112
|
+
Sakurazaka46) blog.
|
|
98
113
|
email:
|
|
99
114
|
- ryo19911030@hotmail.co.jp
|
|
100
115
|
executables: []
|
|
@@ -104,6 +119,7 @@ files:
|
|
|
104
119
|
- ".github/workflows/ruby.yml"
|
|
105
120
|
- ".gitignore"
|
|
106
121
|
- ".rspec"
|
|
122
|
+
- ".rubocop.yml"
|
|
107
123
|
- ".travis.yml"
|
|
108
124
|
- CODE_OF_CONDUCT.md
|
|
109
125
|
- Gemfile
|
|
@@ -138,8 +154,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
138
154
|
- !ruby/object:Gem::Version
|
|
139
155
|
version: '0'
|
|
140
156
|
requirements: []
|
|
141
|
-
rubygems_version: 3.
|
|
157
|
+
rubygems_version: 3.3.26
|
|
142
158
|
signing_key:
|
|
143
159
|
specification_version: 4
|
|
144
|
-
summary:
|
|
160
|
+
summary: scrape gem from Sakamichi group's(Hinatazaka46, Sakurazaka46) blog
|
|
145
161
|
test_files: []
|