shinybooru 1.2.2 → 1.2.3
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/.gitignore +43 -6
- data/README.md +16 -2
- data/lib/shinybooru.rb +65 -55
- data/lib/shinybooru/version.rb +1 -1
- data/shinybooru.gemspec +14 -14
- metadata +15 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0f5d98dd9a4f66c28a4cfaa465234ccc3db7b7ef
|
4
|
+
data.tar.gz: 02ff295c1cac7811a3b1638c9c3720aebadae704
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 58e9f503cfc4ca936378d57f560068b98668024998df688e754ab5d4eaaef8e8c1ac35fb20ceffc602ea42dcc0a42f2f4f3722d61497a1b9ccbc79b6468a1396
|
7
|
+
data.tar.gz: 4b5188ed3c1c33fe6b9b53b47fa574434af7589d3381de850dd12cd57b2111e48729223ca2e821a697a9b66de99734f44ade23d2f47eca085bbd0d15fcc854ba
|
data/.gitignore
CHANGED
@@ -1,10 +1,47 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
/_yardoc/
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
/.config
|
5
4
|
/coverage/
|
6
|
-
/
|
5
|
+
/InstalledFiles
|
7
6
|
/pkg/
|
8
7
|
/spec/reports/
|
8
|
+
/spec/examples.txt
|
9
|
+
/test/tmp/
|
10
|
+
/test/version_tmp/
|
9
11
|
/tmp/
|
10
|
-
|
12
|
+
|
13
|
+
## Specific to RubyMotion:
|
14
|
+
.dat*
|
15
|
+
.repl_history
|
16
|
+
build/
|
17
|
+
|
18
|
+
## Documentation cache and generated files:
|
19
|
+
/.yardoc/
|
20
|
+
/_yardoc/
|
21
|
+
/doc/
|
22
|
+
/rdoc/
|
23
|
+
|
24
|
+
## Environment normalization:
|
25
|
+
/.bundle/
|
26
|
+
/vendor/bundle
|
27
|
+
/lib/bundler/man/
|
28
|
+
|
29
|
+
# for a library or gem, you might want to ignore these files since the code is
|
30
|
+
# intended to run in multiple environments; otherwise, check them in:
|
31
|
+
# Gemfile.lock
|
32
|
+
# .ruby-version
|
33
|
+
# .ruby-gemset
|
34
|
+
|
35
|
+
# unless supporting rvm < 1.11.0 or doing something fancy, ignore this:
|
36
|
+
.rvmrc
|
37
|
+
|
38
|
+
# swap
|
39
|
+
[._]*.s[a-w][a-z]
|
40
|
+
[._]s[a-w][a-z]
|
41
|
+
# session
|
42
|
+
Session.vim
|
43
|
+
# temporary
|
44
|
+
.netrwhist
|
45
|
+
*~
|
46
|
+
# auto-generated tag files
|
47
|
+
tags
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# Shinybooru
|
2
2
|
[](https://travis-ci.org/calvcoll/shinybooru)
|
3
3
|
|
4
|
-
A gem which returns an easy to use object for Gelbooru requests
|
4
|
+
A gem which returns an easy to use object for Gelbooru/Safebooru requests
|
5
5
|
|
6
6
|
## Installation
|
7
7
|
|
@@ -26,6 +26,13 @@ Or install it yourself as:
|
|
26
26
|
booru = Shinybooru::Booru.new
|
27
27
|
```
|
28
28
|
|
29
|
+
Optionally, provide the site URL. Only safebooru.org and gelbooru.com
|
30
|
+
are supported at this time.
|
31
|
+
|
32
|
+
```ruby
|
33
|
+
booru = Shinybooru::Booru.new 'safebooru.org'
|
34
|
+
```
|
35
|
+
|
29
36
|
###Retrieving posts from Gelbooru server
|
30
37
|
```ruby
|
31
38
|
booru = Shinybooru::Booru.new
|
@@ -35,7 +42,14 @@ post = booru.posts 1 #returns Shinybooru::Post
|
|
35
42
|
###Retrieving posts from Gelbooru server
|
36
43
|
```ruby
|
37
44
|
booru = Shinybooru::Booru.new
|
38
|
-
posts = booru.posts 10 #returns Array of Shinybooru::Post
|
45
|
+
posts = booru.posts limit: 10 #returns Array of Shinybooru::Post
|
46
|
+
```
|
47
|
+
|
48
|
+
###Searching for tags
|
49
|
+
```ruby
|
50
|
+
booru = Shinybooru::Booru.new
|
51
|
+
posts = booru.posts tags: "highres" #returns Shinybooru::Post, with tag highres
|
52
|
+
posts = booru.posts tags: ["highres", "couple"] #returns Shinybooru::Post, with tags highres, couple
|
39
53
|
```
|
40
54
|
|
41
55
|
## Development
|
data/lib/shinybooru.rb
CHANGED
@@ -1,22 +1,28 @@
|
|
1
|
-
require
|
2
|
-
require
|
3
|
-
require
|
1
|
+
require 'shinybooru/version'
|
2
|
+
require 'http_requestor'
|
3
|
+
require 'nokogiri'
|
4
4
|
|
5
5
|
module Shinybooru
|
6
|
+
# A gem which returns an easy to use object for Gelbooru requests
|
6
7
|
class Booru
|
7
|
-
attr_accessor :online
|
8
|
+
attr_accessor :online, :url
|
8
9
|
|
9
|
-
def initialize
|
10
|
-
|
11
|
-
|
10
|
+
def initialize(site = nil)
|
11
|
+
good_sites = %w(gelbooru.com safebooru.org)
|
12
|
+
# Default to safebooru
|
13
|
+
@url = if good_sites.include? site
|
14
|
+
site
|
15
|
+
else
|
16
|
+
'safebooru.org'
|
17
|
+
end
|
18
|
+
@booru = HTTP::Requestor.new @url
|
19
|
+
check_connection
|
12
20
|
end
|
13
21
|
|
14
|
-
def
|
22
|
+
def check_connection
|
15
23
|
begin
|
16
24
|
conn = @booru.get 'index.php'
|
17
|
-
if conn
|
18
|
-
@online = true
|
19
|
-
end
|
25
|
+
@online = true if conn
|
20
26
|
rescue TimeoutError
|
21
27
|
@online = false
|
22
28
|
end
|
@@ -26,47 +32,48 @@ module Shinybooru
|
|
26
32
|
!@online
|
27
33
|
end
|
28
34
|
|
29
|
-
def booru_get
|
35
|
+
def booru_get(page)
|
30
36
|
@booru.get '/index.php?page=dapi&s=post&q=index' + page
|
31
37
|
end
|
32
38
|
|
33
|
-
def posts
|
34
|
-
limit = args[:limit]
|
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
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
posts
|
65
|
-
else
|
66
|
-
posts[0]
|
39
|
+
def posts(args = {})
|
40
|
+
limit = args[:limit].nil? ? 10 : args[:limit]
|
41
|
+
tags = args[:tags].nil? ? [] : args[:tags]
|
42
|
+
sfw = args[:sfw] == true
|
43
|
+
# Always sfw if safebooru, so no need for rating tags
|
44
|
+
sfw = false if @url == 'safebooru.org'
|
45
|
+
|
46
|
+
raise Shinybooru::OfflineError unless @online
|
47
|
+
|
48
|
+
req = '&limit=' + limit.to_s
|
49
|
+
|
50
|
+
if tags
|
51
|
+
tags = tags.join('%20') unless tags.is_a? String
|
52
|
+
req += '&tags=' + tags
|
53
|
+
end
|
54
|
+
|
55
|
+
if sfw
|
56
|
+
explicit_tags = '-rating%3aquestionable%20-rating%3explicit'
|
57
|
+
req += if tags
|
58
|
+
'%20' + explicit_tags
|
59
|
+
else
|
60
|
+
'&tags=' + explicit_tags
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
data = Nokogiri::Slop((booru_get req).body)
|
65
|
+
posts = []
|
66
|
+
|
67
|
+
data.posts.children.each do |post|
|
68
|
+
if post.is_a? Nokogiri::XML::Element
|
69
|
+
posts.push Shinybooru::Post.new(post)
|
67
70
|
end
|
71
|
+
end
|
72
|
+
|
73
|
+
if posts.length > 1
|
74
|
+
posts
|
68
75
|
else
|
69
|
-
|
76
|
+
posts[0]
|
70
77
|
end
|
71
78
|
end
|
72
79
|
end
|
@@ -74,19 +81,22 @@ module Shinybooru
|
|
74
81
|
class OfflineError < StandardError
|
75
82
|
end
|
76
83
|
|
84
|
+
# Used internally
|
77
85
|
class Post
|
78
86
|
attr_reader :data
|
79
|
-
def initialize
|
80
|
-
@data =
|
87
|
+
def initialize(nokogiri_data)
|
88
|
+
@data = {}
|
81
89
|
nokogiri_data.attribute_nodes.each do |node|
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
90
|
+
@data[node.name.to_sym] = if node.name == 'tags'
|
91
|
+
# so that the tags are a list
|
92
|
+
node.value.split ' '
|
93
|
+
else
|
94
|
+
node.value
|
95
|
+
end
|
88
96
|
data
|
89
97
|
end
|
90
98
|
end
|
91
99
|
end
|
92
100
|
end
|
101
|
+
|
102
|
+
# vim:tabstop=2 softtabstop=2 expandtab shiftwidth=2 smarttab foldmethod=syntax:
|
data/lib/shinybooru/version.rb
CHANGED
data/shinybooru.gemspec
CHANGED
@@ -4,24 +4,24 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
|
4
4
|
require 'shinybooru/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name =
|
7
|
+
spec.name = 'shinybooru'
|
8
8
|
spec.version = Shinybooru::VERSION
|
9
|
-
spec.authors = [
|
10
|
-
spec.email = [
|
9
|
+
spec.authors = ['Calv Collins']
|
10
|
+
spec.email = ['calvcoll@gmail.com']
|
11
11
|
|
12
|
-
spec.summary =
|
13
|
-
spec.description =
|
14
|
-
spec.homepage =
|
15
|
-
spec.license =
|
12
|
+
spec.summary = 'API for Gelbooru'
|
13
|
+
spec.description = 'Provides, hopefully, an easy to use interface for Gelbooru'
|
14
|
+
spec.homepage = 'https://github.com/calvcoll/shinybooru'
|
15
|
+
spec.license = 'MIT'
|
16
16
|
|
17
17
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
18
|
-
spec.bindir =
|
18
|
+
spec.bindir = 'exe'
|
19
19
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
|
-
spec.require_paths = [
|
20
|
+
spec.require_paths = ['lib']
|
21
21
|
|
22
|
-
spec.add_development_dependency
|
23
|
-
spec.add_development_dependency
|
24
|
-
spec.add_development_dependency
|
25
|
-
spec.add_runtime_dependency
|
26
|
-
spec.add_runtime_dependency
|
22
|
+
spec.add_development_dependency 'bundler', '>= 1.10'
|
23
|
+
spec.add_development_dependency 'rake', '>= 10.0'
|
24
|
+
spec.add_development_dependency 'rspec'
|
25
|
+
spec.add_runtime_dependency 'http-requestor', '>= 1.0'
|
26
|
+
spec.add_runtime_dependency 'nokogiri', '>= 1.6'
|
27
27
|
end
|
metadata
CHANGED
@@ -1,41 +1,41 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shinybooru
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Calv Collins
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-04-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '1.10'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- - "
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.10'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '10.0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '10.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
@@ -56,30 +56,30 @@ dependencies:
|
|
56
56
|
name: http-requestor
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- - "
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 1.0
|
61
|
+
version: '1.0'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- - "
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: 1.0
|
68
|
+
version: '1.0'
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: nokogiri
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
72
72
|
requirements:
|
73
|
-
- - "
|
73
|
+
- - ">="
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: 1.6
|
75
|
+
version: '1.6'
|
76
76
|
type: :runtime
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
|
-
- - "
|
80
|
+
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: 1.6
|
82
|
+
version: '1.6'
|
83
83
|
description: Provides, hopefully, an easy to use interface for Gelbooru
|
84
84
|
email:
|
85
85
|
- calvcoll@gmail.com
|
@@ -119,7 +119,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
119
119
|
version: '0'
|
120
120
|
requirements: []
|
121
121
|
rubyforge_project:
|
122
|
-
rubygems_version: 2.
|
122
|
+
rubygems_version: 2.5.1
|
123
123
|
signing_key:
|
124
124
|
specification_version: 4
|
125
125
|
summary: API for Gelbooru
|