shinybooru 1.2.2 → 1.2.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
[![Build Status](https://travis-ci.org/calvcoll/shinybooru.svg?branch=master)](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
|