gogoanime 0.0.1 → 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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/gogoanime.rb +105 -90
  3. metadata +2 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dd3ce312ba7f93a77e7bb1ced0d7b71888610c1146a87717fd0c585120c3ad4f
4
- data.tar.gz: 61c22daee9904d8cde212cff03c20385a9d42f4775d441ee4a52e453368aa244
3
+ metadata.gz: 40a10208d14dc49ec3d0c8d6e5e5693c9b60c5075f8bc9eeaeef5515af51de49
4
+ data.tar.gz: faf80bda10bcacfa95043ddb72e5620ec378a1c4e819308f16085c09970a0f8c
5
5
  SHA512:
6
- metadata.gz: 1058d4ea219ae00171e46bd588f8938529c37ba8b0800cdb0679004040227ba1162dcf9e1e9613931642994bf421ed37d8cb344231a5d765f48a01ed6e495cd7
7
- data.tar.gz: fde3813ebfe4b91b4b5afd0e46d592862682888b452e854a138bb5d5fe71dab993aadde897811167cbc82aeea482d0e65ef75f073a808cf606674c4a8b5508a2
6
+ metadata.gz: dc781f011bac504cb4e73345e4d6aa9d906c5d485ad36f80171b2e49d62d88c97898cf65407674fbb63d8156e377b5599109131a86cf0b1aedc5958ea89ef26e
7
+ data.tar.gz: e718de4747e5c4e986f3d1783d254cf63f71028e520a64598b5549973bed59c1234d29e285067e6d76264c9ef0317875b6829043c0c27c64ab0f20e79bef13e3
@@ -1,91 +1,106 @@
1
- require 'open-uri'
2
- require 'nokogiri'
3
- require 'json'
4
-
5
- class Gogoanime
6
- def recent(pages=1)
7
- document = fetch(BASE_URL)
8
- result = []
9
- document.css('ul.items li').each do |item|
10
- a = item.css('a')[0]
11
- result << {
12
- image_url: item.css('img')[0]['src'],
13
- title: a['title'],
14
- episode_url: a['href'],
15
- episode: item.css('p.episode').text.split(' ').last.to_i,
16
- anime_path: a['href'].split('-episode-').first
17
- }
18
- end
19
- return result
20
- end
21
-
22
- def anime(path)
23
- document = fetch(File.join(BASE_URL, 'category' , path))
24
- t = document.css('p.type')
25
- return {
26
- title: document.css('h1').text,
27
- type: t[0].css('a')[0].text,
28
- summary: t[1].text[14..-1],
29
- genre: t[2].css('a').map { |a| a = a.text.gsub(',', '').strip },
30
- released: t[3].text[10..-1].to_i,
31
- status: t[4].text[8..-1],
32
- other_names: t[5].text.split(': ')[1..-1].join.split(', '),
33
- image_url: document.css('div.anime_info_body_bg img')[0]['src'],
34
- episodes: document.css('ul#episode_page li').last.css('a')[0]['ep_end']
35
- }
36
- end
37
-
38
- def episode(path, number)
39
- document = fetch(File.join(BASE_URL, "#{path}-episode-#{number}"))
40
- result = {
41
- title: document.css('div.title_name h2')[0].text,
42
- category: document.css('div.anime_video_body_cate a')[0].text,
43
- info: document.css('div.anime-info a')[0].text,
44
- number: number,
45
- sources: []
46
- }
47
- for link in document.css('div.anime_muti_link ul li a').map { |a| a = a['data-video']}
48
-
49
- result[:sources] << (link.start_with?('http') ? link : File.join('https://', link))
50
-
51
- end
52
-
53
- return result
54
- end
55
-
56
- def search(str)
57
- document = fetch(File.join(BASE_URL, "search.html?keyword=#{str.downcase}"))
58
- results = []
59
- for item in document.css('ul.items li')
60
- results << {
61
- image_url: item.css('div.img a img')[0]['src'],
62
- title: item.css('p.name a')[0].text,
63
- released: item.css('p.released')[0].text.split(':').last.strip.to_i
64
- }
65
- end
66
- return results
67
- end
68
-
69
- def autocomplete(str)
70
- document = open("https://ajax.gogocdn.net/site/loadAjaxSearch?keyword=#{str.downcase.gsub(' ', '+')}&id=-1&link_web=https%3A%2F%2Fwww19.gogoanime.io%2F").read
71
- document = Nokogiri::HTML(JSON.parse(document)['content'])
72
- results = []
73
- for item in document.css('div.list_search_ajax') do
74
- a = item.css('a')[0]
75
- results << {
76
- image_url: item.css('div.thumbnail-recent_search')[0]['style'].split(': url("').last[0..-3],
77
- path: a['href'].split('/').last,
78
- title: a.text
79
- }
80
- end
81
- return results
82
- end
83
-
84
- private
85
-
86
- BASE_URL = "https://www.gogoanime.io/"
87
-
88
- def fetch(url)
89
- return Nokogiri::HTML(open(url).read)
90
- end
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://www.gogoanime.io/"
101
+
102
+ def fetch(url)
103
+ return Nokogiri::HTML(open(url).read)
104
+ end
105
+ end
91
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.1
4
+ version: 0.0.6
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
- rubyforge_project:
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