fappu 1.0.0

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 (40) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +14 -0
  3. data/Gemfile +14 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +64 -0
  6. data/Rakefile +6 -0
  7. data/fappu.gemspec +27 -0
  8. data/fixtures/cassettes/Fappu_Manga/The_manga_is_Right_now_while_cleaning_the_pool_/_download_url/returns_the_download_link.yml +53 -0
  9. data/fixtures/cassettes/Fappu_Manga/The_manga_is_Right_now_while_cleaning_the_pool_/_related/behaves_like_a_manga_collection/.yml +103 -0
  10. 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
  11. 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
  12. data/fixtures/cassettes/Fappu_Tag/_list/.yml +273 -0
  13. data/fixtures/cassettes/Fappu_Tag/_list/should_return_an_array_of_tag_objects.yml +273 -0
  14. data/fixtures/cassettes/connection.yml +203 -0
  15. data/fixtures/cassettes/heck.yml +203 -0
  16. data/fixtures/cassettes/manga.yml +221 -0
  17. data/fixtures/cassettes/manga_read_pool_sex.yml +58 -0
  18. data/fixtures/cassettes/pool_cleaning_comments.yml +107 -0
  19. data/fixtures/cassettes/pool_cleaning_top_comments.yml +107 -0
  20. data/fixtures/cassettes/related_pool_sex_manga.yml +103 -0
  21. data/fixtures/cassettes/search_tagged_netorare.yml +96 -0
  22. data/fixtures/cassettes/search_term_sao.yml +98 -0
  23. data/index.html +0 -0
  24. data/lib/fappu.rb +11 -0
  25. data/lib/fappu/comment.rb +27 -0
  26. data/lib/fappu/connection.rb +21 -0
  27. data/lib/fappu/manga.rb +106 -0
  28. data/lib/fappu/page.rb +29 -0
  29. data/lib/fappu/search.rb +105 -0
  30. data/lib/fappu/tag.rb +33 -0
  31. data/lib/fappu/version.rb +3 -0
  32. data/spec/lib/fappu/connection_spec.rb +23 -0
  33. data/spec/lib/fappu/manga_spec.rb +49 -0
  34. data/spec/lib/fappu/page_spec.rb +18 -0
  35. data/spec/lib/fappu/search_spec.rb +149 -0
  36. data/spec/lib/fappu/tag_spec.rb +14 -0
  37. data/spec/lib/fappu_spec.rb +4 -0
  38. data/spec/shared_examples.rb +10 -0
  39. data/spec/spec_helper.rb +24 -0
  40. 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
File without changes
@@ -0,0 +1,11 @@
1
+ require "fappu/version"
2
+
3
+ require 'open-uri'
4
+ require 'json'
5
+
6
+ require "fappu/connection"
7
+ require "fappu/comment"
8
+ require "fappu/manga"
9
+ require "fappu/page"
10
+ require "fappu/tag"
11
+ require "fappu/search"
@@ -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
@@ -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
@@ -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
+
@@ -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
@@ -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,3 @@
1
+ module Fappu
2
+ VERSION = "1.0.0"
3
+ 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