panchira 1.3.2 → 1.3.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/.github/workflows/ruby.yml +1 -1
- data/CHANGELOG.md +31 -2
- data/Gemfile.lock +3 -3
- data/README.md +1 -1
- data/lib/panchira/resolvers/dlsite_resolver.rb +7 -1
- data/lib/panchira/resolvers/image_resolver.rb +2 -0
- data/lib/panchira/resolvers/iwara_resolver.rb +39 -0
- data/lib/panchira/resolvers/melonbooks_resolver.rb +4 -1
- data/lib/panchira/resolvers/narou_resolver.rb +10 -0
- data/lib/panchira/resolvers/pixiv_resolver.rb +27 -0
- data/lib/panchira/resolvers/resolver.rb +10 -7
- data/lib/panchira/resolvers/twitter_resolver.rb +24 -0
- data/lib/panchira/version.rb +1 -1
- data/panchira.gemspec +1 -1
- metadata +6 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 56602175dff2975d0d6f606c31da48b8cf904c61aa98d8f0e6d940ef4c1d230d
|
4
|
+
data.tar.gz: b1ceb998bb60dafbb5b992ad156192d6ea2f58fec8ee606aac3d1d88ebe9b1b0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5909d32a1231288cc8567ada0a58fb038d1eaf8424ac9ff3b4298dd81b3f95651217ddb3b5b39e24834174abbc7bfd454d083836a0889df2188df511600f7a49
|
7
|
+
data.tar.gz: 0f8d01c68ceb44f10ef06d274667e8acd254254987056e25624d2a3f58de0e05fc95a07002b3cb7d0d8a207461bf6f0a96c211714fed015eadc3e9673eb17699
|
data/.github/workflows/ruby.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -4,10 +4,35 @@ All notable changes to this project will be documented in this file.
|
|
4
4
|
The format is based on [Keep a Changelog](http://keepachangelog.com/)
|
5
5
|
and this project adheres to [Semantic Versioning](http://semver.org/).
|
6
6
|
|
7
|
+
## 1.3.6 - 2021-10-19
|
8
|
+
### Added
|
9
|
+
- Added support for Twitter.
|
10
|
+
|
11
|
+
### Changed
|
12
|
+
- Melonbooks Resolver now returns image URI without resizing queries.
|
13
|
+
|
14
|
+
## 1.3.5 - 2021-09-01
|
15
|
+
### Added
|
16
|
+
- Added support for Pixiv Novel.
|
17
|
+
|
18
|
+
### Fixed
|
19
|
+
- Fixed an issue where Image Resolver missed image scales.
|
20
|
+
|
21
|
+
## 1.3.4 - 2021-07-26
|
22
|
+
### Fixed
|
23
|
+
- Fixed an issue where Iwara Resolver failed when a description was present.
|
24
|
+
|
25
|
+
## 1.3.3 - 2021-07-25
|
26
|
+
### Added
|
27
|
+
- Added support for Iwara.
|
28
|
+
|
29
|
+
### Fixed
|
30
|
+
- Fixed an issue where DLsite Resolver was retrieving wrong tags.
|
31
|
+
|
7
32
|
## 1.3.2 - 2021-05-23
|
8
33
|
### Fixed
|
9
|
-
- Fixed an issue where Fanza Resolver was retrieving incorrect
|
10
|
-
- Fixed an issue where Narou Resolver
|
34
|
+
- Fixed an issue where Fanza Resolver was retrieving incorrect canonical URLs.
|
35
|
+
- Fixed an issue where Narou Resolver was retrieving wrong descriptions.
|
11
36
|
|
12
37
|
### Changed
|
13
38
|
- Updated dependencies.
|
@@ -79,6 +104,10 @@ and this project adheres to [Semantic Versioning](http://semver.org/).
|
|
79
104
|
### Added
|
80
105
|
- Released Panchira gem. At this time we can parse only 5 websites.
|
81
106
|
|
107
|
+
[1.3.5]: https://github.com/nuita/panchira/releases/tag/v1.3.5
|
108
|
+
[1.3.4]: https://github.com/nuita/panchira/releases/tag/v1.3.4
|
109
|
+
[1.3.3]: https://github.com/nuita/panchira/releases/tag/v1.3.3
|
110
|
+
[1.3.2]: https://github.com/nuita/panchira/releases/tag/v1.3.2
|
82
111
|
[1.3.1]: https://github.com/nuita/panchira/releases/tag/v1.3.1
|
83
112
|
[1.3.0]: https://github.com/nuita/panchira/releases/tag/v1.3.0
|
84
113
|
[1.2.0]: https://github.com/nuita/panchira/releases/tag/v1.2.0
|
data/Gemfile.lock
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
panchira (1.3.
|
4
|
+
panchira (1.3.6)
|
5
5
|
fastimage (~> 2.1.7)
|
6
|
-
nokogiri (>= 1.10.9, < 1.
|
6
|
+
nokogiri (>= 1.10.9, < 1.13.0)
|
7
7
|
|
8
8
|
GEM
|
9
9
|
remote: https://rubygems.org/
|
@@ -11,7 +11,7 @@ GEM
|
|
11
11
|
ast (2.4.2)
|
12
12
|
fastimage (2.1.7)
|
13
13
|
minitest (5.14.4)
|
14
|
-
nokogiri (1.11.
|
14
|
+
nokogiri (1.11.7-x86_64-darwin)
|
15
15
|
racc (~> 1.4)
|
16
16
|
parallel (1.20.1)
|
17
17
|
parser (3.0.1.1)
|
data/README.md
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
|
7
7
|
Due to some legal or ethical issues, most hentai and NSFW platforms don't clarify their content on meta tags. As a result, most hentai platforms are rendered poorly on the card previews on social media.
|
8
8
|
|
9
|
-
To solve this issue, Panchira is made to parse correct and uncensored metadata from such web platforms (at this time we cover **DLSite, Komiflo, Melonbooks, Nijie, Pixiv, Shousetsuka ni narou, Fanza and Twitter**).
|
9
|
+
To solve this issue, Panchira is made to parse correct and uncensored metadata from such web platforms (at this time we cover **DLSite, Komiflo, Melonbooks, Nijie, Pixiv, Shousetsuka ni narou, Fanza, Iwara and Twitter**).
|
10
10
|
|
11
11
|
If you need card previews of hentai on your web application, but can't get them with simply parsing metatags, then it is time for Panchira.
|
12
12
|
|
@@ -39,7 +39,13 @@ module Panchira
|
|
39
39
|
end
|
40
40
|
|
41
41
|
def parse_tags
|
42
|
-
@page.css('
|
42
|
+
@page.css('table[id*="work_"] tr').each do |tr|
|
43
|
+
next unless tr.css('th').text =~ /ジャンル/
|
44
|
+
|
45
|
+
return tr.css('td a').map do |node|
|
46
|
+
node.text.strip
|
47
|
+
end
|
48
|
+
end
|
43
49
|
end
|
44
50
|
end
|
45
51
|
|
@@ -0,0 +1,39 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Panchira
|
4
|
+
class IwaraResolver < Resolver
|
5
|
+
URL_REGEXP = /(www|ecchi)\.iwara\.tv\//.freeze
|
6
|
+
|
7
|
+
private
|
8
|
+
def parse_title
|
9
|
+
super.split(' | ')[0]
|
10
|
+
end
|
11
|
+
|
12
|
+
def parse_image_url
|
13
|
+
url = @page.at_css('#video-player')&.attributes['poster']&.value
|
14
|
+
'https:' + url if url
|
15
|
+
end
|
16
|
+
|
17
|
+
def parse_author
|
18
|
+
@page.at_css('.node-info .username')&.children&.[](0)&.text
|
19
|
+
end
|
20
|
+
|
21
|
+
def parse_tags
|
22
|
+
@page.css('.field-name-field-categories .field-item').map { |e| e.children&.text }
|
23
|
+
end
|
24
|
+
|
25
|
+
def parse_description
|
26
|
+
@page.at_css('.field-name-body')&.text
|
27
|
+
end
|
28
|
+
|
29
|
+
def cookie
|
30
|
+
'show_adult=1'
|
31
|
+
end
|
32
|
+
|
33
|
+
def parse_canonical_url
|
34
|
+
@url # canonical has relative path. ignore it
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
::Panchira::Extensions.register(Panchira::IwaraResolver)
|
39
|
+
end
|
@@ -57,7 +57,10 @@ module Panchira
|
|
57
57
|
end
|
58
58
|
|
59
59
|
def parse_image_url
|
60
|
-
@page.css('//meta[property="og:image"]/@content').first.to_s
|
60
|
+
url = @page.css('//meta[property="og:image"]/@content').first.to_s
|
61
|
+
image = url.match(/resize_image.php\?image=([^&]+)/)[1]
|
62
|
+
|
63
|
+
"https://melonbooks.akamaized.net/user_data/packages/resize_image.php?image=#{image}"
|
61
64
|
end
|
62
65
|
|
63
66
|
def parse_tags
|
@@ -37,6 +37,11 @@ module Panchira
|
|
37
37
|
# つらい。
|
38
38
|
@desc&.xpath('//*[@id="noveltable1"]/tr[3]')&.text&.split("\n\n\n")&.dig(1)&.split(' ')
|
39
39
|
end
|
40
|
+
|
41
|
+
# og:urlで指定されたncode.syosetu.com/~~~にアクセスすると301で戻されるので何もしない
|
42
|
+
def parse_canonical_url
|
43
|
+
@url
|
44
|
+
end
|
40
45
|
end
|
41
46
|
|
42
47
|
class NcodeResolver < Resolver
|
@@ -63,6 +68,11 @@ module Panchira
|
|
63
68
|
# めっちゃつらい。
|
64
69
|
@desc&.xpath('//*[@id="noveltable1"]/tr[3]')&.text&.split("\n\n\n")&.dig(1)&.delete("\u00A0")&.split(' ')&.grep_v('')
|
65
70
|
end
|
71
|
+
|
72
|
+
# og:urlで指定されたncode.syosetu.com/~~~にアクセスすると301で戻されるので何もしない
|
73
|
+
def parse_canonical_url
|
74
|
+
@url
|
75
|
+
end
|
66
76
|
end
|
67
77
|
end
|
68
78
|
|
@@ -44,5 +44,32 @@ module Panchira
|
|
44
44
|
end
|
45
45
|
end
|
46
46
|
|
47
|
+
class PixivNovelResolver < Resolver
|
48
|
+
URL_REGEXP = %r{pixiv\.net/novel/show.php\?id=(\d+)}.freeze
|
49
|
+
|
50
|
+
def initialize(url)
|
51
|
+
super(url)
|
52
|
+
@novel_id = url.slice(URL_REGEXP, 1)
|
53
|
+
|
54
|
+
raw_json = URI.parse("https://www.pixiv.net/ajax/novel/#{@novel_id}").read('User-Agent' => user_agent)
|
55
|
+
@json = JSON.parse(raw_json)
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def parse_title
|
61
|
+
@json['body']['title']
|
62
|
+
end
|
63
|
+
|
64
|
+
def parse_author
|
65
|
+
@json['body']['userName']
|
66
|
+
end
|
67
|
+
|
68
|
+
def parse_tags
|
69
|
+
@json['body']['tags']['tags'].map { |content| content['tag'] }
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
47
73
|
::Panchira::Extensions.register(Panchira::PixivResolver)
|
74
|
+
::Panchira::Extensions.register(Panchira::PixivNovelResolver)
|
48
75
|
end
|
@@ -67,17 +67,20 @@ module Panchira
|
|
67
67
|
# fetch page and refresh canonical_url until canonical_url converges.
|
68
68
|
loop do
|
69
69
|
url_in_res = @page.css('//link[rel="canonical"]/@href').to_s
|
70
|
+
if url_in_res.empty?
|
71
|
+
url_in_res = @page.css('//meta[property="og:url"]/@content').to_s
|
72
|
+
end
|
70
73
|
|
71
74
|
if url_in_res.empty?
|
72
75
|
return history.last || @url
|
73
|
-
else
|
74
|
-
if history.include?(url_in_res) || history.length > 5
|
75
|
-
return url_in_res
|
76
|
-
else
|
77
|
-
history.push(url_in_res)
|
78
|
-
@page = fetch_page(url_in_res)
|
79
|
-
end
|
80
76
|
end
|
77
|
+
|
78
|
+
if history.include?(url_in_res) || history.length > 5
|
79
|
+
return url_in_res
|
80
|
+
end
|
81
|
+
|
82
|
+
history.push(url_in_res)
|
83
|
+
@page = fetch_page(url_in_res)
|
81
84
|
end
|
82
85
|
end
|
83
86
|
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Panchira
|
2
|
+
class TwitterResolver < Resolver
|
3
|
+
URL_REGEXP = /twitter.com\/\w+\/status\/\d+/.freeze
|
4
|
+
|
5
|
+
private
|
6
|
+
def parse_title
|
7
|
+
@title = super
|
8
|
+
end
|
9
|
+
|
10
|
+
def parse_author
|
11
|
+
@title.match(/\A(.+) on Twitter\z/)[1]
|
12
|
+
end
|
13
|
+
|
14
|
+
def parse_description
|
15
|
+
@description = super.gsub(/\A“|”\z/, '')
|
16
|
+
end
|
17
|
+
|
18
|
+
def parse_tags
|
19
|
+
@description.scan(/[##]([^##\s]+)/).map(&:first)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
::Panchira::Extensions.register(Panchira::TwitterResolver)
|
24
|
+
end
|
data/lib/panchira/version.rb
CHANGED
data/panchira.gemspec
CHANGED
@@ -40,5 +40,5 @@ Gem::Specification.new do |spec|
|
|
40
40
|
spec.add_development_dependency 'rubocop-minitest', '~> 0.10'
|
41
41
|
|
42
42
|
spec.add_dependency 'fastimage', '~> 2.1.7'
|
43
|
-
spec.add_dependency 'nokogiri', '>= 1.10.9', '< 1.
|
43
|
+
spec.add_dependency 'nokogiri', '>= 1.10.9', '< 1.13.0'
|
44
44
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: panchira
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- kyp
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-10-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -103,7 +103,7 @@ dependencies:
|
|
103
103
|
version: 1.10.9
|
104
104
|
- - "<"
|
105
105
|
- !ruby/object:Gem::Version
|
106
|
-
version: 1.
|
106
|
+
version: 1.13.0
|
107
107
|
type: :runtime
|
108
108
|
prerelease: false
|
109
109
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -113,7 +113,7 @@ dependencies:
|
|
113
113
|
version: 1.10.9
|
114
114
|
- - "<"
|
115
115
|
- !ruby/object:Gem::Version
|
116
|
-
version: 1.
|
116
|
+
version: 1.13.0
|
117
117
|
description: |2
|
118
118
|
Panchira allows you to parse attributes of hentais on some web platforms, such as Pixiv and DLSite.
|
119
119
|
If you need card previews on hentai but can't get it with simply parsing metatags, then it is time for Panchira.
|
@@ -141,12 +141,14 @@ files:
|
|
141
141
|
- lib/panchira/resolvers/dlsite_resolver.rb
|
142
142
|
- lib/panchira/resolvers/fanza_resolver.rb
|
143
143
|
- lib/panchira/resolvers/image_resolver.rb
|
144
|
+
- lib/panchira/resolvers/iwara_resolver.rb
|
144
145
|
- lib/panchira/resolvers/komiflo_resolver.rb
|
145
146
|
- lib/panchira/resolvers/melonbooks_resolver.rb
|
146
147
|
- lib/panchira/resolvers/narou_resolver.rb
|
147
148
|
- lib/panchira/resolvers/nijie_resolver.rb
|
148
149
|
- lib/panchira/resolvers/pixiv_resolver.rb
|
149
150
|
- lib/panchira/resolvers/resolver.rb
|
151
|
+
- lib/panchira/resolvers/twitter_resolver.rb
|
150
152
|
- lib/panchira/version.rb
|
151
153
|
- panchira.gemspec
|
152
154
|
homepage: https://github.com/nuita/panchira
|