fappu 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +14 -0
- data/Gemfile +14 -0
- data/LICENSE.txt +22 -0
- data/README.md +64 -0
- data/Rakefile +6 -0
- data/fappu.gemspec +27 -0
- data/fixtures/cassettes/Fappu_Manga/The_manga_is_Right_now_while_cleaning_the_pool_/_download_url/returns_the_download_link.yml +53 -0
- data/fixtures/cassettes/Fappu_Manga/The_manga_is_Right_now_while_cleaning_the_pool_/_related/behaves_like_a_manga_collection/.yml +103 -0
- data/fixtures/cassettes/Fappu_Manga/The_manga_is_Right_now_while_cleaning_the_pool_/_related/behaves_like_a_manga_collection/returns_an_array_of_Mangas.yml +103 -0
- data/fixtures/cassettes/Fappu_Manga/The_manga_is_Right_now_while_cleaning_the_pool_/_related/should_include_related_manga_related_to_pool_sex.yml +103 -0
- data/fixtures/cassettes/Fappu_Tag/_list/.yml +273 -0
- data/fixtures/cassettes/Fappu_Tag/_list/should_return_an_array_of_tag_objects.yml +273 -0
- data/fixtures/cassettes/connection.yml +203 -0
- data/fixtures/cassettes/heck.yml +203 -0
- data/fixtures/cassettes/manga.yml +221 -0
- data/fixtures/cassettes/manga_read_pool_sex.yml +58 -0
- data/fixtures/cassettes/pool_cleaning_comments.yml +107 -0
- data/fixtures/cassettes/pool_cleaning_top_comments.yml +107 -0
- data/fixtures/cassettes/related_pool_sex_manga.yml +103 -0
- data/fixtures/cassettes/search_tagged_netorare.yml +96 -0
- data/fixtures/cassettes/search_term_sao.yml +98 -0
- data/index.html +0 -0
- data/lib/fappu.rb +11 -0
- data/lib/fappu/comment.rb +27 -0
- data/lib/fappu/connection.rb +21 -0
- data/lib/fappu/manga.rb +106 -0
- data/lib/fappu/page.rb +29 -0
- data/lib/fappu/search.rb +105 -0
- data/lib/fappu/tag.rb +33 -0
- data/lib/fappu/version.rb +3 -0
- data/spec/lib/fappu/connection_spec.rb +23 -0
- data/spec/lib/fappu/manga_spec.rb +49 -0
- data/spec/lib/fappu/page_spec.rb +18 -0
- data/spec/lib/fappu/search_spec.rb +149 -0
- data/spec/lib/fappu/tag_spec.rb +14 -0
- data/spec/lib/fappu_spec.rb +4 -0
- data/spec/shared_examples.rb +10 -0
- data/spec/spec_helper.rb +24 -0
- metadata +146 -0
@@ -0,0 +1,98 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://api.fakku.net/search/sword%20art%20online
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers:
|
10
|
+
Accept-Encoding:
|
11
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
12
|
+
Accept:
|
13
|
+
- '*/*'
|
14
|
+
User-Agent:
|
15
|
+
- Ruby
|
16
|
+
response:
|
17
|
+
status:
|
18
|
+
code: 200
|
19
|
+
message: OK
|
20
|
+
headers:
|
21
|
+
Server:
|
22
|
+
- cloudflare-nginx
|
23
|
+
Date:
|
24
|
+
- Fri, 08 Aug 2014 08:09:31 GMT
|
25
|
+
Content-Type:
|
26
|
+
- application/json
|
27
|
+
Transfer-Encoding:
|
28
|
+
- chunked
|
29
|
+
Connection:
|
30
|
+
- keep-alive
|
31
|
+
Set-Cookie:
|
32
|
+
- __cfduid=d02b901001e0a18cf575737bbb61131c41407485371417; expires=Mon, 23-Dec-2019
|
33
|
+
23:50:00 GMT; path=/; domain=.fakku.net; HttpOnly
|
34
|
+
Access-Control-Allow-Origin:
|
35
|
+
- '*'
|
36
|
+
X-Varnish:
|
37
|
+
- '849060859'
|
38
|
+
Age:
|
39
|
+
- '0'
|
40
|
+
Via:
|
41
|
+
- 1.1 varnish
|
42
|
+
X-Cache:
|
43
|
+
- MISS
|
44
|
+
Dicks:
|
45
|
+
- PH
|
46
|
+
Cf-Ray:
|
47
|
+
- 156a3b7352ac0bb1-HKG
|
48
|
+
body:
|
49
|
+
encoding: UTF-8
|
50
|
+
string: '{"content":[{"content_name":"Sword Art Unlimited","content_url":"http:\/\/www.fakku.net\/doujinshi\/sword-art-unlimited-english","content_description":"CONTAINS
|
51
|
+
MILD SWORD ART ONLINE SPOILERS.\r\n\r\nVisit us at http:\/\/ufw.arinashi.com\/
|
52
|
+
for downloads and more releases.","content_language":"english","content_category":"doujinshi","content_date":1344990979,"content_filesize":59,"content_favorites":3521,"content_comments":130,"content_pages":32,"content_poster":"Raze","content_poster_url":"http:\/\/www.fakku.net\/users\/raze","content_tags":[{"attribute":"Color","attribute_link":"\/tags\/color"},{"attribute":"Vanilla","attribute_link":"\/tags\/vanilla"},{"attribute":"Oppai","attribute_link":"\/tags\/oppai"},{"attribute":"Hentai","attribute_link":"\/tags\/hentai"}],"content_translators":[{"attribute":"UFW","attribute_link":"\/translators\/ufw"}],"content_series":[{"attribute":"Sword
|
53
|
+
Art Online","attribute_link":"\/series\/sword-art-online"}],"content_artists":[{"attribute":"ASTRO
|
54
|
+
CREEP","attribute_link":"\/artists\/astro-creep"}],"content_images":{"cover":"https:\/\/t.fakku.net\/images\/manga\/s\/swordartunlimited_e\/thumbs\/001.thumb.jpg","sample":"https:\/\/t.fakku.net\/images\/manga\/s\/swordartunlimited_e\/thumbs\/015.thumb.jpg"}},{"content_name":"Sword
|
55
|
+
Art Offline -Silica Route-","content_url":"http:\/\/www.fakku.net\/doujinshi\/sword-art-offline-silica-route-english","content_description":"No
|
56
|
+
description has been written.","content_language":"english","content_category":"doujinshi","content_date":1347254938,"content_filesize":23,"content_favorites":1332,"content_comments":66,"content_pages":18,"content_poster":"Anonymous","content_poster_url":"http:\/\/www.fakku.net\/users\/anonymous","content_tags":[{"attribute":"Vanilla","attribute_link":"\/tags\/vanilla"},{"attribute":"Oral","attribute_link":"\/tags\/oral"},{"attribute":"Stockings","attribute_link":"\/tags\/stockings"},{"attribute":"Pettanko","attribute_link":"\/tags\/pettanko"},{"attribute":"Hentai","attribute_link":"\/tags\/hentai"}],"content_translators":[{"attribute":"Team
|
57
|
+
Vanilla","attribute_link":"\/translators\/team-vanilla"}],"content_series":[{"attribute":"Sword
|
58
|
+
Art Online","attribute_link":"\/series\/sword-art-online"}],"content_artists":[{"attribute":"Ahiru
|
59
|
+
Okano","attribute_link":"\/artists\/ahiru-okano"}],"content_images":{"cover":"https:\/\/t.fakku.net\/images\/manga\/s\/swordartofflinesilicaroute_e\/thumbs\/001.thumb.jpg","sample":"https:\/\/t.fakku.net\/images\/manga\/s\/swordartofflinesilicaroute_e\/thumbs\/004.thumb.jpg"}},{"content_name":"Sword
|
60
|
+
Art Extra","content_url":"http:\/\/www.fakku.net\/doujinshi\/sword-art-extra-english","content_description":"Brought
|
61
|
+
to you by http:\/\/life4kaoru.wordpress.com\/","content_language":"english","content_category":"doujinshi","content_date":1330745989,"content_filesize":21,"content_favorites":3321,"content_comments":89,"content_pages":21,"content_poster":"HououinKyouma","content_poster_url":"http:\/\/www.fakku.net\/users\/hououinkyouma","content_tags":[{"attribute":"Color","attribute_link":"\/tags\/color"},{"attribute":"Vanilla","attribute_link":"\/tags\/vanilla"},{"attribute":"Kemonomimi","attribute_link":"\/tags\/kemonomimi"},{"attribute":"Stockings","attribute_link":"\/tags\/stockings"},{"attribute":"Hentai","attribute_link":"\/tags\/hentai"}],"content_translators":[{"attribute":"Life4Kaoru","attribute_link":"\/translators\/life4kaoru"}],"content_series":[{"attribute":"Sword
|
62
|
+
Art Online","attribute_link":"\/series\/sword-art-online"}],"content_artists":[{"attribute":"ASTRO
|
63
|
+
CREEP","attribute_link":"\/artists\/astro-creep"}],"content_images":{"cover":"https:\/\/t.fakku.net\/images\/manga\/s\/swordartextra_e\/thumbs\/001.thumb.jpg","sample":"https:\/\/t.fakku.net\/images\/manga\/s\/swordartextra_e\/thumbs\/013.thumb.jpg"}},{"content_name":"SPECIAL
|
64
|
+
ASUNA ONLINE 2","content_url":"http:\/\/www.fakku.net\/doujinshi\/special-asuna-online-2-english","content_description":"No
|
65
|
+
description has been written.","content_language":"english","content_category":"doujinshi","content_date":1395787581,"content_filesize":21936400,"content_favorites":677,"content_comments":19,"content_pages":26,"content_poster":"biribiri","content_poster_url":"http:\/\/www.fakku.net\/users\/biribiri","content_tags":[{"attribute":"Vanilla","attribute_link":"\/tags\/vanilla"},{"attribute":"Oral","attribute_link":"\/tags\/oral"},{"attribute":"Oppai","attribute_link":"\/tags\/oppai"},{"attribute":"Hentai","attribute_link":"\/tags\/hentai"},{"attribute":"Ahegao","attribute_link":"\/tags\/ahegao"}],"content_translators":[{"attribute":"biribiri","attribute_link":"\/translators\/biribiri"}],"content_series":[{"attribute":"Sword
|
66
|
+
Art Online","attribute_link":"\/series\/sword-art-online"}],"content_artists":[{"attribute":"Nama
|
67
|
+
Cream Biyori","attribute_link":"\/artists\/nama-cream-biyori"}],"content_images":{"cover":"https:\/\/t.fakku.net\/images\/manga\/s\/[Nama_Cream_Biyori]_Sword_Art_Online_-_SPECIAL_ASUNA_ONLINE_2\/thumbs\/001.thumb.jpg","sample":"https:\/\/t.fakku.net\/images\/manga\/s\/[Nama_Cream_Biyori]_Sword_Art_Online_-_SPECIAL_ASUNA_ONLINE_2\/thumbs\/006.thumb.jpg"}},{"content_name":"Sister
|
68
|
+
Affection Online","content_url":"http:\/\/www.fakku.net\/doujinshi\/sister-affection-online-english","content_description":"No
|
69
|
+
description has been written.","content_language":"english","content_category":"doujinshi","content_date":1358737668,"content_filesize":11,"content_favorites":1331,"content_comments":46,"content_pages":19,"content_poster":"Anonymous","content_poster_url":"http:\/\/www.fakku.net\/users\/anonymous","content_tags":[{"attribute":"Paizuri","attribute_link":"\/tags\/paizuri"},{"attribute":"Vanilla","attribute_link":"\/tags\/vanilla"},{"attribute":"Oppai","attribute_link":"\/tags\/oppai"},{"attribute":"Hentai","attribute_link":"\/tags\/hentai"}],"content_translators":[{"attribute":"Usual
|
70
|
+
Translations","attribute_link":"\/translators\/usual-translations"}],"content_series":[{"attribute":"Sword
|
71
|
+
Art Online","attribute_link":"\/series\/sword-art-online"}],"content_artists":[{"attribute":"Primal
|
72
|
+
Gym","attribute_link":"\/artists\/primal-gym"}],"content_images":{"cover":"https:\/\/t.fakku.net\/images\/manga\/s\/sisteraffectiononline_e\/thumbs\/001.thumb.jpg","sample":"https:\/\/t.fakku.net\/images\/manga\/s\/sisteraffectiononline_e\/thumbs\/006.thumb.jpg"}},{"content_name":"Lisbeth...
|
73
|
+
Kirito ni wa Suterare, Kyaku ni wa Okasare Nakadashi Ninshin... Asuna to no
|
74
|
+
Kakusa ga Hirogaru Online","content_url":"http:\/\/www.fakku.net\/doujinshi\/lisbeth-kirito-ni-wa-suterare-kyaku-ni-wa-okasare-nakadashi-ninshin-asuna-to-no-kakusa-ga-hirogaru-online-english","content_description":"To
|
75
|
+
survive in the world of business and trade, you need to expand to other outlets
|
76
|
+
if necessary.","content_language":"english","content_category":"doujinshi","content_date":1358570012,"content_filesize":5,"content_favorites":899,"content_comments":37,"content_pages":26,"content_poster":"CGrascal","content_poster_url":"http:\/\/www.fakku.net\/users\/cgrascal","content_tags":[{"attribute":"Paizuri","attribute_link":"\/tags\/paizuri"},{"attribute":"Anal","attribute_link":"\/tags\/anal"},{"attribute":"Oral","attribute_link":"\/tags\/oral"},{"attribute":"Oppai","attribute_link":"\/tags\/oppai"},{"attribute":"Group","attribute_link":"\/tags\/group"}],"content_translators":[{"attribute":"CGRascal","attribute_link":"\/translators\/cgrascal"}],"content_series":[{"attribute":"Sword
|
77
|
+
Art Online","attribute_link":"\/series\/sword-art-online"}],"content_artists":[{"attribute":"Studio
|
78
|
+
Nunchaku","attribute_link":"\/artists\/studio-nunchaku"}],"content_images":{"cover":"https:\/\/t.fakku.net\/images\/manga\/l\/lisbethkiritoniwasuterarekyakuniwaokasarenakadashininshinasunatonokakusagahirogaruonline_e\/thumbs\/001.thumb.jpg","sample":"https:\/\/t.fakku.net\/images\/manga\/l\/lisbethkiritoniwasuterarekyakuniwaokasarenakadashininshinasunatonokakusagahirogaruonline_e\/thumbs\/013.thumb.jpg"}},{"content_name":"Asuna
|
79
|
+
to Online","content_url":"http:\/\/www.fakku.net\/doujinshi\/asuna-to-online-english","content_description":"No
|
80
|
+
description has been written.","content_language":"english","content_category":"doujinshi","content_date":1345456629,"content_filesize":17,"content_favorites":1801,"content_comments":50,"content_pages":23,"content_poster":"Anonymous","content_poster_url":"http:\/\/www.fakku.net\/users\/anonymous","content_tags":[{"attribute":"Vanilla","attribute_link":"\/tags\/vanilla"},{"attribute":"Oral","attribute_link":"\/tags\/oral"},{"attribute":"Stockings","attribute_link":"\/tags\/stockings"},{"attribute":"Hentai","attribute_link":"\/tags\/hentai"}],"content_translators":[{"attribute":"Team
|
81
|
+
Vanilla","attribute_link":"\/translators\/team-vanilla"}],"content_series":[{"attribute":"Sword
|
82
|
+
Art Online","attribute_link":"\/series\/sword-art-online"}],"content_artists":[{"attribute":"Mugenkidou
|
83
|
+
A","attribute_link":"\/artists\/mugenkidou-a"}],"content_images":{"cover":"https:\/\/t.fakku.net\/images\/manga\/a\/asunatoonline_e\/thumbs\/001.thumb.jpg","sample":"https:\/\/t.fakku.net\/images\/manga\/a\/asunatoonline_e\/thumbs\/014.thumb.jpg"}},{"content_name":"KARORFUL
|
84
|
+
MIX EX10","content_url":"http:\/\/www.fakku.net\/doujinshi\/karorful-mix-ex10-english","content_description":"Final
|
85
|
+
release for the SAO festival. Enjoy!","content_language":"english","content_category":"doujinshi","content_date":1405430220,"content_filesize":60230000,"content_favorites":1288,"content_comments":41,"content_pages":27,"content_poster":"EdMX","content_poster_url":"http:\/\/www.fakku.net\/users\/edmx","content_tags":[{"attribute":"Color","attribute_link":"\/tags\/color"},{"attribute":"Vanilla","attribute_link":"\/tags\/vanilla"},{"attribute":"Oppai","attribute_link":"\/tags\/oppai"},{"attribute":"Hentai","attribute_link":"\/tags\/hentai"}],"content_translators":[{"attribute":"Genesis
|
86
|
+
Translations","attribute_link":"\/translators\/genesis-translations"}],"content_series":[{"attribute":"Sword
|
87
|
+
Art Online","attribute_link":"\/series\/sword-art-online"}],"content_artists":[{"attribute":"Karomix","attribute_link":"\/artists\/karomix"}],"content_images":{"cover":"https:\/\/t.fakku.net\/images\/manga\/k\/[Karomix]_Sword_Art_Online_-_KARORFUL_MIX_EX10\/thumbs\/001.thumb.jpg","sample":"https:\/\/t.fakku.net\/images\/manga\/k\/[Karomix]_Sword_Art_Online_-_KARORFUL_MIX_EX10\/thumbs\/010.thumb.jpg"}},{"content_name":"KARORFUL
|
88
|
+
MIX EX9","content_url":"http:\/\/www.fakku.net\/doujinshi\/karorful-mix-ex9","content_description":"No
|
89
|
+
description has been written.","content_language":"english","content_category":"doujinshi","content_date":1404829197,"content_filesize":41698800,"content_favorites":975,"content_comments":33,"content_pages":20,"content_poster":"Tech","content_poster_url":"http:\/\/www.fakku.net\/users\/tech","content_tags":[{"attribute":"Color","attribute_link":"\/tags\/color"},{"attribute":"Vanilla","attribute_link":"\/tags\/vanilla"},{"attribute":"Hentai","attribute_link":"\/tags\/hentai"}],"content_translators":[{"attribute":"Genesis
|
90
|
+
Translations","attribute_link":"\/translators\/genesis-translations"}],"content_series":[{"attribute":"Sword
|
91
|
+
Art Online","attribute_link":"\/series\/sword-art-online"}],"content_artists":[{"attribute":"Karomix","attribute_link":"\/artists\/karomix"}],"content_images":{"cover":"https:\/\/t.fakku.net\/images\/manga\/k\/[Karomix]_Sword_Art_Online_-_KAROMIX_EX9\/thumbs\/002.thumb.jpg","sample":"https:\/\/t.fakku.net\/images\/manga\/k\/[Karomix]_Sword_Art_Online_-_KAROMIX_EX9\/thumbs\/014.thumb.jpg"}},{"content_name":"no
|
92
|
+
passage","content_url":"http:\/\/www.fakku.net\/doujinshi\/no-passage-english","content_description":"No
|
93
|
+
description has been written.","content_language":"english","content_category":"doujinshi","content_date":1404401594,"content_filesize":23235100,"content_favorites":1332,"content_comments":38,"content_pages":29,"content_poster":"Tech","content_poster_url":"http:\/\/www.fakku.net\/users\/tech","content_tags":[{"attribute":"Vanilla","attribute_link":"\/tags\/vanilla"},{"attribute":"Oppai","attribute_link":"\/tags\/oppai"},{"attribute":"Incest","attribute_link":"\/tags\/incest"},{"attribute":"Hentai","attribute_link":"\/tags\/hentai"}],"content_translators":[{"attribute":"Genesis
|
94
|
+
Translations","attribute_link":"\/translators\/genesis-translations"}],"content_series":[{"attribute":"Sword
|
95
|
+
Art Online","attribute_link":"\/series\/sword-art-online"}],"content_artists":[{"attribute":"Tracklisko","attribute_link":"\/artists\/tracklisko"}],"content_images":{"cover":"https:\/\/t.fakku.net\/images\/manga\/n\/[Tracklisko]_Sword_Art_Online_-_no_passage\/thumbs\/001.thumb.jpg","sample":"https:\/\/t.fakku.net\/images\/manga\/n\/[Tracklisko]_Sword_Art_Online_-_no_passage\/thumbs\/015.thumb.jpg"}}],"total":60,"page":1,"pages":6}'
|
96
|
+
http_version:
|
97
|
+
recorded_at: Fri, 08 Aug 2014 08:09:26 GMT
|
98
|
+
recorded_with: VCR 2.9.2
|
data/index.html
ADDED
File without changes
|
data/lib/fappu.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
module Fappu
|
2
|
+
class Comment
|
3
|
+
attr_accessor :id, :attached_id, :poster, :poster_url, :reputation,
|
4
|
+
:text, :date
|
5
|
+
|
6
|
+
def initialize args
|
7
|
+
comment_args = comment_parameters(args)
|
8
|
+
comment_args.each do |k,v|
|
9
|
+
instance_variable_set("@#{k}",v) unless v.nil?
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
def comment_parameters(comment)
|
16
|
+
params = {
|
17
|
+
title: comment["comment_id"],
|
18
|
+
attached_id: comment["comment_attached_id"],
|
19
|
+
poster: comment["comment_poster"],
|
20
|
+
poster_url: comment["comment_poster_url"],
|
21
|
+
reputation: comment["comment_reputation"],
|
22
|
+
body: comment["comment_text"],
|
23
|
+
date: comment["comment_date"]
|
24
|
+
}
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
module Fappu
|
2
|
+
class Connection
|
3
|
+
|
4
|
+
attr_accessor :base_url, :title, :url, :documentation, :response, :body
|
5
|
+
|
6
|
+
def initialize(settings={})
|
7
|
+
@base_url = settings[:base_url] || "https://api.fakku.net/index"
|
8
|
+
|
9
|
+
# @response = RestClient.get @base_url
|
10
|
+
@response = URI.parse(@base_url).read
|
11
|
+
|
12
|
+
@body = JSON.parse @response
|
13
|
+
@title = @response['title']
|
14
|
+
end
|
15
|
+
|
16
|
+
def base_url
|
17
|
+
@base_url || "https://api.fakku.net"
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
data/lib/fappu/manga.rb
ADDED
@@ -0,0 +1,106 @@
|
|
1
|
+
module Fappu
|
2
|
+
class Manga
|
3
|
+
|
4
|
+
attr_accessor :title, :url, :description, :language, :category, :date, :filesize,
|
5
|
+
:favorites, :comment_count, :page_count, :poster, :poster_url, :tags, :translators,
|
6
|
+
:series, :artists, :images, :tags
|
7
|
+
|
8
|
+
|
9
|
+
def initialize args
|
10
|
+
tags = args.delete(:tags)
|
11
|
+
|
12
|
+
args.each do |k,v|
|
13
|
+
instance_variable_set("@#{k}",v) unless v.nil?
|
14
|
+
end
|
15
|
+
|
16
|
+
set_tags(tags) if tags
|
17
|
+
end
|
18
|
+
|
19
|
+
|
20
|
+
def top_comments
|
21
|
+
response = JSON.parse( URI.parse(comment_api_url + "/top").read )
|
22
|
+
arr = response['comments']
|
23
|
+
|
24
|
+
arr.collect do |comment|
|
25
|
+
Fappu::Comment.new(comment)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
def related
|
31
|
+
Fappu::Search.related(self)
|
32
|
+
end
|
33
|
+
|
34
|
+
def download_url
|
35
|
+
response = JSON.parse ( URI.parse(download_api_url).read )
|
36
|
+
response['downloads'].collect do |d|
|
37
|
+
d['download_url']
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def pages
|
42
|
+
response = JSON.parse( URI.parse(read_online_url).read )
|
43
|
+
arr = response['pages']
|
44
|
+
|
45
|
+
arr.collect do |k,v|
|
46
|
+
Fappu::Page.new_from_json({k => v})
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# WIP : Wait for API to be fixed
|
51
|
+
def comments(page = 1)
|
52
|
+
response = JSON.parse( URI.parse(comment_api_url + "/page/#{page}").read )
|
53
|
+
arr = response['comments']
|
54
|
+
|
55
|
+
arr.collect do |comment|
|
56
|
+
Fappu::Comment.new(comment)
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def base_api_url
|
61
|
+
base_api_url = URI(url)
|
62
|
+
|
63
|
+
new_host = base_api_url.host.split('.')
|
64
|
+
new_host[0] = 'api'
|
65
|
+
|
66
|
+
base_api_url.host = new_host.join('.')
|
67
|
+
base_api_url.scheme = 'https'
|
68
|
+
base_api_url
|
69
|
+
end
|
70
|
+
|
71
|
+
private
|
72
|
+
|
73
|
+
def related_api_url
|
74
|
+
comment_url = base_api_url
|
75
|
+
comment_url.path += "/related"
|
76
|
+
comment_url.to_s
|
77
|
+
end
|
78
|
+
|
79
|
+
def download_api_url
|
80
|
+
comment_url = base_api_url
|
81
|
+
comment_url.path += "/download"
|
82
|
+
comment_url.to_s
|
83
|
+
end
|
84
|
+
|
85
|
+
def set_tags(tags)
|
86
|
+
@tags = tags.collect do |tag|
|
87
|
+
Fappu::Tag.new(name: tag['attribute'], url: tag['attribute_link'])
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def read_online_url
|
92
|
+
read_url = base_api_url
|
93
|
+
read_url.path += '/read'
|
94
|
+
read_url.to_s
|
95
|
+
end
|
96
|
+
|
97
|
+
|
98
|
+
|
99
|
+
def comment_api_url
|
100
|
+
comment_url = base_api_url
|
101
|
+
comment_url.path += "/comments"
|
102
|
+
comment_url.to_s
|
103
|
+
end
|
104
|
+
|
105
|
+
end
|
106
|
+
end
|
data/lib/fappu/page.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
module Fappu
|
2
|
+
class Page
|
3
|
+
|
4
|
+
attr_accessor :thumbnail_url, :image_url, :page_number
|
5
|
+
|
6
|
+
def initialize(args={})
|
7
|
+
args.each do |k,v|
|
8
|
+
instance_variable_set("@#{k}",v) unless v.nil?
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
# Receies page has
|
13
|
+
# ex. self.new_from_json({'1' => { thumb => 'xx', image => 'yy')}})
|
14
|
+
#
|
15
|
+
# Returns
|
16
|
+
# #<Page @page_number: 1, @thumbnail_url: 'xx', @image_url: 'yy>
|
17
|
+
def self.new_from_json(args)
|
18
|
+
page = Page.new
|
19
|
+
args.each do |k,v|
|
20
|
+
page.page_number = k
|
21
|
+
page.thumbnail_url = v["thumb"]
|
22
|
+
page.image_url = v["image"]
|
23
|
+
end
|
24
|
+
page
|
25
|
+
end
|
26
|
+
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
data/lib/fappu/search.rb
ADDED
@@ -0,0 +1,105 @@
|
|
1
|
+
module Fappu
|
2
|
+
module Search
|
3
|
+
|
4
|
+
module_function
|
5
|
+
URL = "https://api.fakku.net/manga"
|
6
|
+
|
7
|
+
def self.tagged(tag)
|
8
|
+
tag.downcase!
|
9
|
+
url = "https://api.fakku.net/tags/#{tag}"
|
10
|
+
response = JSON.parse( URI.parse(url).read )
|
11
|
+
arr = response["content"]
|
12
|
+
|
13
|
+
arr.collect do |manga|
|
14
|
+
Fappu::Manga.new(manga_parameters(manga))
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.terms(search_terms)
|
19
|
+
search_terms.downcase!
|
20
|
+
search_terms = URI.encode(search_terms)
|
21
|
+
url = "https://api.fakku.net/search/#{search_terms}"
|
22
|
+
response = JSON.parse( URI.parse(url).read )
|
23
|
+
arr = response["content"]
|
24
|
+
|
25
|
+
arr.collect do |manga|
|
26
|
+
Fappu::Manga.new(manga_parameters(manga))
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
# Returns an array of the latest mangas as Manga instances
|
31
|
+
def self.latest
|
32
|
+
response = JSON.parse( URI.parse("https://api.fakku.net/manga").read )
|
33
|
+
arr = response["latest"]
|
34
|
+
|
35
|
+
arr.collect do |manga|
|
36
|
+
Fappu::Manga.new(manga_parameters(manga))
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
# Returns an array of the most favorite'd mangas as Manga instances
|
41
|
+
def self.favorites
|
42
|
+
response = JSON.parse( URI.parse("https://api.fakku.net/manga").read )
|
43
|
+
arr = response["favorites"]
|
44
|
+
|
45
|
+
arr.collect do |manga|
|
46
|
+
Fappu::Manga.new(manga_parameters(manga))
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# Returns an array of the most popular mangas as Manga instances
|
51
|
+
def self.popular
|
52
|
+
response = JSON.parse( URI.parse("https://api.fakku.net/manga").read )
|
53
|
+
arr = response["popular"]
|
54
|
+
|
55
|
+
arr.collect do |manga|
|
56
|
+
Fappu::Manga.new(manga_parameters(manga))
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
# Returns an array of the most controversial mangas as Manga instances
|
61
|
+
def self.controversial
|
62
|
+
response = JSON.parse( URI.parse("https://api.fakku.net/manga").read )
|
63
|
+
arr = response["controversial"]
|
64
|
+
|
65
|
+
arr.collect do |manga|
|
66
|
+
Fappu::Manga.new(manga_parameters(manga))
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
# Returns an array of related mangas
|
71
|
+
def self.related(manga)
|
72
|
+
response = JSON.parse ( URI.parse(manga.base_api_url.to_s + "/related").read )
|
73
|
+
arr = response["related"]
|
74
|
+
|
75
|
+
arr.collect do |m|
|
76
|
+
Fappu::Manga.new(manga_parameters(m))
|
77
|
+
end
|
78
|
+
end
|
79
|
+
private
|
80
|
+
|
81
|
+
# Removes the 'content' suffix for manga attributes from the json response
|
82
|
+
def self.manga_parameters(raw_manga_params)
|
83
|
+
params = {
|
84
|
+
title: raw_manga_params["content_name"],
|
85
|
+
url: raw_manga_params["content_url"],
|
86
|
+
description: raw_manga_params["content_description"],
|
87
|
+
language: raw_manga_params["content_language"],
|
88
|
+
category: raw_manga_params["content_category"],
|
89
|
+
date: raw_manga_params["content_date"],
|
90
|
+
filesize: raw_manga_params["content_filesize"],
|
91
|
+
favorites: raw_manga_params["content_favorites"],
|
92
|
+
comment_count: raw_manga_params["content_comments"],
|
93
|
+
page_count: raw_manga_params["content_pages"],
|
94
|
+
poster: raw_manga_params["content_poster"],
|
95
|
+
poster_url: raw_manga_params["content_poster_url"],
|
96
|
+
tags: raw_manga_params["content_tags"],
|
97
|
+
translators: raw_manga_params["content_translators"],
|
98
|
+
series: raw_manga_params["content_series"],
|
99
|
+
artists: raw_manga_params["content_artists"],
|
100
|
+
images: raw_manga_params["content_images"],
|
101
|
+
tags: raw_manga_params["content_tags"]
|
102
|
+
}
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
data/lib/fappu/tag.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
module Fappu
|
2
|
+
class Tag
|
3
|
+
|
4
|
+
attr_accessor :name, :url
|
5
|
+
URL = "https://api.fakku.net/tags"
|
6
|
+
|
7
|
+
def initialize args
|
8
|
+
args.each do |k,v|
|
9
|
+
instance_variable_set("@#{k}",v) unless v.nil?
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.list
|
14
|
+
response = JSON.parse( URI.parse(URL).read )
|
15
|
+
arr = response["tags"]
|
16
|
+
|
17
|
+
arr.collect do |tag|
|
18
|
+
self.new(tag_parameters(tag))
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def self.tag_parameters(tag)
|
25
|
+
params = {
|
26
|
+
name: tag["tag_name"],
|
27
|
+
url: tag["tag_url"]
|
28
|
+
}
|
29
|
+
end
|
30
|
+
|
31
|
+
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe Fappu::Connection, vcr: {cassette_name: 'connection'} do
|
4
|
+
describe ".new" do
|
5
|
+
subject { described_class.new }
|
6
|
+
|
7
|
+
it {expect(subject).to be_a Fappu::Connection}
|
8
|
+
|
9
|
+
it "defaults to Fakku's API url" do
|
10
|
+
expect(subject.base_url).to eq("https://api.fakku.net/index")
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "#body" do
|
16
|
+
subject {described_class.new.body}
|
17
|
+
it "lists info about hentai mangoes" do
|
18
|
+
expect(subject['total']).to be > 0
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
|
23
|
+
end
|