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