gogoanime 0.0.2 → 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.
- checksums.yaml +4 -4
- data/lib/gogoanime.rb +105 -92
- metadata +2 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bdb76e3ab54ab3754059dd85104b35d27c4972646bdac4c5dc96967f0bf0cc50
|
4
|
+
data.tar.gz: efa000b1bf087cccf3894fd8fca51b0a4171ffaba9a11d0f1418b622357aac8a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: '08cac14652de456784dffeffc8ce902eafa30fe555e414b890eb560836a5972e0d6bfbad2e556aab4a502609b791da36ec42ae3593b15b46d8d2692ab76885c7'
|
7
|
+
data.tar.gz: bd535b22f2309cfa6a803ede0f6c5dccb1cb3c0cd4600c735c22ae93cd489d48d03bdbb6f393f5d9d1cb4bcab0ea48cae0eaa28d0fd090e5dd428fb67d661b10
|
data/lib/gogoanime.rb
CHANGED
@@ -1,93 +1,106 @@
|
|
1
|
-
require 'open-uri'
|
2
|
-
require 'nokogiri'
|
3
|
-
require 'json'
|
4
|
-
|
5
|
-
module Gogoanime
|
6
|
-
class
|
7
|
-
def recent(pages=1)
|
8
|
-
|
9
|
-
result = []
|
10
|
-
|
11
|
-
|
12
|
-
result <<
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
for
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
1
|
+
require 'open-uri'
|
2
|
+
require 'nokogiri'
|
3
|
+
require 'json'
|
4
|
+
|
5
|
+
module Gogoanime
|
6
|
+
class Scraper
|
7
|
+
def recent(pages=1)
|
8
|
+
|
9
|
+
result = []
|
10
|
+
|
11
|
+
pages.times do |i|
|
12
|
+
result << Thread.new do
|
13
|
+
tmp = []
|
14
|
+
document = fetch("#{BASE_URL}?page=#{i+1}")
|
15
|
+
document.css('ul.items li').each do |item|
|
16
|
+
a = item.css('a')[0]
|
17
|
+
tmp << {
|
18
|
+
image_url: item.css('img')[0]['src'],
|
19
|
+
title: a['title'],
|
20
|
+
episode_url: a['href'],
|
21
|
+
episode: item.css('p.episode').text.split(' ').last.to_i,
|
22
|
+
anime_path: a['href'].split('-episode-').first
|
23
|
+
}
|
24
|
+
end
|
25
|
+
Thread.current[:output] = tmp
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
return result.map do |x|
|
30
|
+
x.join
|
31
|
+
x = x[:output]
|
32
|
+
end.flatten
|
33
|
+
end
|
34
|
+
|
35
|
+
def anime(path)
|
36
|
+
document = fetch(File.join(BASE_URL, 'category' , path))
|
37
|
+
t = document.css('p.type')
|
38
|
+
return {
|
39
|
+
title: document.css('h1').text,
|
40
|
+
type: t[0].css('a')[0].text,
|
41
|
+
summary: t[1].text[14..-1],
|
42
|
+
genre: t[2].css('a').map { |a| a = a.text.gsub(',', '').strip },
|
43
|
+
released: t[3].text[10..-1].to_i,
|
44
|
+
status: t[4].text[8..-1],
|
45
|
+
other_names: t[5].text.split(': ')[1..-1].join.split(', '),
|
46
|
+
image_url: document.css('div.anime_info_body_bg img')[0]['src'],
|
47
|
+
episodes: document.css('ul#episode_page li').last.css('a')[0]['ep_end']
|
48
|
+
}
|
49
|
+
end
|
50
|
+
|
51
|
+
def episode(path, number)
|
52
|
+
document = fetch(File.join(BASE_URL, "#{path}-episode-#{number}"))
|
53
|
+
result = {
|
54
|
+
title: document.css('div.title_name h2')[0].text,
|
55
|
+
category: document.css('div.anime_video_body_cate a')[0].text,
|
56
|
+
info: document.css('div.anime-info a')[0].text,
|
57
|
+
number: number,
|
58
|
+
sources: []
|
59
|
+
}
|
60
|
+
for link in document.css('div.anime_muti_link ul li a').map { |a| a = a['data-video']}
|
61
|
+
|
62
|
+
result[:sources] << (link.start_with?('http') ? link : File.join('https://', link))
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
return result
|
67
|
+
end
|
68
|
+
|
69
|
+
def search(str)
|
70
|
+
document = fetch(File.join(BASE_URL, "search.html?keyword=#{str.downcase}"))
|
71
|
+
results = []
|
72
|
+
for item in document.css('ul.items li')
|
73
|
+
results << {
|
74
|
+
image_url: item.css('div.img a img')[0]['src'],
|
75
|
+
title: item.css('p.name a')[0].text,
|
76
|
+
released: item.css('p.released')[0].text.split(':').last.strip.to_i,
|
77
|
+
path: item.css('p.name a')[0]['href'].split('/').last
|
78
|
+
}
|
79
|
+
end
|
80
|
+
return results
|
81
|
+
end
|
82
|
+
|
83
|
+
def autocomplete(str)
|
84
|
+
document = open("https://ajax.gogocdn.net/site/loadAjaxSearch?keyword=#{str.downcase.gsub(' ', '+')}").read
|
85
|
+
document = Nokogiri::HTML(JSON.parse(document)['content'])
|
86
|
+
results = []
|
87
|
+
for item in document.css('div.list_search_ajax') do
|
88
|
+
a = item.css('a')[0]
|
89
|
+
results << {
|
90
|
+
image_url: item.css('div.thumbnail-recent_search')[0]['style'].split(': url("').last[0..-3],
|
91
|
+
path: a['href'].split('/').last,
|
92
|
+
title: a.text
|
93
|
+
}
|
94
|
+
end
|
95
|
+
return results
|
96
|
+
end
|
97
|
+
|
98
|
+
private
|
99
|
+
|
100
|
+
BASE_URL = "https://www1.gogoanime.movie/"
|
101
|
+
|
102
|
+
def fetch(url)
|
103
|
+
return Nokogiri::HTML(open(url).read)
|
104
|
+
end
|
105
|
+
end
|
93
106
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gogoanime
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- LainLayer
|
@@ -36,8 +36,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
36
36
|
- !ruby/object:Gem::Version
|
37
37
|
version: '0'
|
38
38
|
requirements: []
|
39
|
-
|
40
|
-
rubygems_version: 2.7.6.2
|
39
|
+
rubygems_version: 3.1.2
|
41
40
|
signing_key:
|
42
41
|
specification_version: 4
|
43
42
|
summary: gogoanime.io scraper
|