ugigi 0.3.3 → 0.4
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.
- data/.rspec +2 -0
- data/.travis.yml +5 -0
- data/CHANGELOG.md +7 -0
- data/README.md +5 -3
- data/Rakefile +3 -0
- data/lib/ugigi.rb +69 -12
- data/lib/ugigi/scheme.rb +5 -5
- data/lib/ugigi/version.rb +1 -1
- data/spec/spec_helper.rb +14 -0
- data/spec/ugigi_spec.rb +30 -0
- data/ugigi.gemspec +0 -1
- metadata +11 -18
- data/lib/ugigi/parser.rb +0 -43
data/.rspec
ADDED
data/.travis.yml
ADDED
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -1,11 +1,10 @@
|
|
1
1
|
# Ugigi
|
2
2
|
|
3
|
-
Ugigi Wrapper for Ruby
|
3
|
+
Ugigi Wrapper for Ruby
|
4
4
|
|
5
5
|
## Requirements
|
6
6
|
|
7
|
-
* Ruby
|
8
|
-
* mechanize gem
|
7
|
+
* Ruby
|
9
8
|
|
10
9
|
## Installation
|
11
10
|
|
@@ -28,6 +27,9 @@ Ugigi Wrapper for Ruby 1.9.x
|
|
28
27
|
# "にとり"が文章中に含まれているSSの数を持ってくる
|
29
28
|
puts Ugigi.total_count(:free => "にとり")
|
30
29
|
|
30
|
+
# 東方創想話に限定して検索
|
31
|
+
puts Ugigi.search(:title => "霊夢", :only => :sosowa)
|
32
|
+
|
31
33
|
## Contributing
|
32
34
|
|
33
35
|
1. Fork it
|
data/Rakefile
CHANGED
data/lib/ugigi.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
|
1
3
|
require "kconv"
|
2
|
-
require "
|
4
|
+
require "net/http"
|
3
5
|
require "time"
|
4
6
|
require "json"
|
5
7
|
require "uri"
|
@@ -7,15 +9,13 @@ require "uri"
|
|
7
9
|
$LOAD_PATH.unshift(File.expand_path("../", __FILE__))
|
8
10
|
require "ugigi/version"
|
9
11
|
require "ugigi/scheme"
|
10
|
-
require "ugigi/parser"
|
11
12
|
|
12
13
|
module Ugigi
|
13
|
-
BASE_URL = "http://ugigi.dvrdns.org/api/
|
14
|
-
BASE_URL_NOAPI = "http://ugigi.dvrdns.org/search"
|
14
|
+
BASE_URL = "http://ugigi.dvrdns.org/api/"
|
15
15
|
|
16
16
|
protected
|
17
17
|
|
18
|
-
def self.serialize_parameter
|
18
|
+
def self.serialize_parameter(parameter={})
|
19
19
|
return "" unless parameter.class == Hash
|
20
20
|
ant = Hash.new
|
21
21
|
parameter.each do |key, value|
|
@@ -24,16 +24,73 @@ module Ugigi
|
|
24
24
|
param = ant.inject(""){|k,v|k+"&#{v[0]}=#{URI.escape(v[1])}"}.sub!(/^&/,"?")
|
25
25
|
return param ? param : ""
|
26
26
|
end
|
27
|
+
|
28
|
+
def self.send_req(path, params={})
|
29
|
+
uri = URI.join(BASE_URL, path, serialize_parameter(params))
|
30
|
+
response = Net::HTTP.get_response(uri)
|
31
|
+
return JSON.parse(response.body)
|
32
|
+
end
|
27
33
|
|
28
34
|
public
|
29
|
-
|
35
|
+
|
30
36
|
def self.search(args={})
|
31
|
-
|
32
|
-
|
37
|
+
case args[:only]
|
38
|
+
when :sosowa
|
39
|
+
args = args.update(:sswp => 0, :compe => 0)
|
40
|
+
when :compe
|
41
|
+
args = args.update(:sswl => 0, :sswp => 0)
|
42
|
+
when :sswp
|
43
|
+
args = args.update(:sswl => 0, :compe => 0)
|
44
|
+
end
|
45
|
+
args.delete(:only) if args.has_key? :only
|
46
|
+
data = send_req("search/list.json", args)
|
47
|
+
indexes = []
|
48
|
+
data.each do |e|
|
49
|
+
index = Index.new(e)
|
50
|
+
case args[:style]
|
51
|
+
when :sosowa
|
52
|
+
index.element = index.to_sosowa_index
|
53
|
+
indexes << index
|
54
|
+
else
|
55
|
+
indexes << index
|
56
|
+
end
|
57
|
+
end
|
58
|
+
return indexes
|
33
59
|
end
|
34
|
-
|
35
|
-
def self.total_count(args)
|
36
|
-
|
37
|
-
|
60
|
+
|
61
|
+
def self.total_count(args={})
|
62
|
+
data = send_req("search/list_count.json", args)
|
63
|
+
return data["count"]
|
64
|
+
end
|
65
|
+
|
66
|
+
def self.mylist(args={})
|
67
|
+
data = send_req("list/get", args)
|
68
|
+
indexes = []
|
69
|
+
data.each do |e|
|
70
|
+
index = Index.new(e)
|
71
|
+
case args[:style]
|
72
|
+
when :sosowa
|
73
|
+
index.element = index.to_sosowa_index
|
74
|
+
indexes << index
|
75
|
+
else
|
76
|
+
indexes << index
|
77
|
+
end
|
78
|
+
end
|
79
|
+
return indexes
|
80
|
+
end
|
81
|
+
|
82
|
+
def self.mylist_add(args={})
|
83
|
+
data = send_req("list/add", args)
|
84
|
+
return data
|
85
|
+
end
|
86
|
+
|
87
|
+
def seld.mylist_remove(args={})
|
88
|
+
data = send_req("list/rem", args)
|
89
|
+
return data
|
90
|
+
end
|
91
|
+
|
92
|
+
def seld.mylist_edit(args={})
|
93
|
+
data = send_req("list/edit", args)
|
94
|
+
return data
|
38
95
|
end
|
39
96
|
end
|
data/lib/ugigi/scheme.rb
CHANGED
@@ -1,6 +1,10 @@
|
|
1
1
|
module Ugigi
|
2
2
|
class Scheme
|
3
3
|
attr_accessor :element
|
4
|
+
|
5
|
+
def initialize(element)
|
6
|
+
@element = element
|
7
|
+
end
|
4
8
|
|
5
9
|
def method_missing(action, *args)
|
6
10
|
return @element[action.to_s] rescue nil
|
@@ -10,11 +14,7 @@ module Ugigi
|
|
10
14
|
alias_method :available_methods, :params
|
11
15
|
end
|
12
16
|
|
13
|
-
class Index < Scheme
|
14
|
-
def initialize(element)
|
15
|
-
@element = element
|
16
|
-
end
|
17
|
-
|
17
|
+
class Index < Scheme
|
18
18
|
def to_sosowa_index
|
19
19
|
log = @element["link"].scan(/log=(\d+)/)[0][0].to_i
|
20
20
|
key = @element["link"].scan(/key=(\d+)/)[0][0].to_i
|
data/lib/ugigi/version.rb
CHANGED
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
$LOAD_PATH << File.expand_path("../../../lib", __FILE__)
|
2
|
+
require "ugigi"
|
3
|
+
|
4
|
+
RSpec.configure do |config|
|
5
|
+
config.treat_symbols_as_metadata_keys_with_true_values = true
|
6
|
+
config.run_all_when_everything_filtered = true
|
7
|
+
config.filter_run :focus
|
8
|
+
|
9
|
+
# Run specs in random order to surface order dependencies. If you find an
|
10
|
+
# order dependency and want to debug it, you can fix the order by providing
|
11
|
+
# the seed, which is printed after each run.
|
12
|
+
# --seed 1234
|
13
|
+
config.order = 'random'
|
14
|
+
end
|
data/spec/ugigi_spec.rb
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
# -*- coding: utf-8 -*-
|
2
|
+
|
3
|
+
require "spec_helper"
|
4
|
+
require "pp"
|
5
|
+
|
6
|
+
describe Ugigi, "が #search を呼ぶ時は" do
|
7
|
+
before do
|
8
|
+
@free_search_result = Ugigi.search(:free => "霊夢")
|
9
|
+
end
|
10
|
+
|
11
|
+
it "Array を返すこと" do
|
12
|
+
@free_search_result.class.should == Array
|
13
|
+
end
|
14
|
+
|
15
|
+
it "配列の中身が全て Ugigi::Index であること" do
|
16
|
+
@free_search_result.each do |i|
|
17
|
+
i.class.should == Ugigi::Index
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe Ugigi, "が #total_count を呼ぶ時は" do
|
23
|
+
before do
|
24
|
+
@total_count_result = Ugigi.total_count(:free => "霊夢")
|
25
|
+
end
|
26
|
+
|
27
|
+
it "Fixnum を返すこと" do
|
28
|
+
@total_count_result.class.should == Fixnum
|
29
|
+
end
|
30
|
+
end
|
data/ugigi.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ugigi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: '0.4'
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,19 +9,8 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-
|
13
|
-
dependencies:
|
14
|
-
- !ruby/object:Gem::Dependency
|
15
|
-
name: mechanize
|
16
|
-
requirement: &70150130472260 !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
|
-
requirements:
|
19
|
-
- - ! '>='
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
version: '0'
|
22
|
-
type: :runtime
|
23
|
-
prerelease: false
|
24
|
-
version_requirements: *70150130472260
|
12
|
+
date: 2012-08-29 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
25
14
|
description: Ugigi Wrapper for Ruby
|
26
15
|
email:
|
27
16
|
- oame@oameya.com
|
@@ -30,15 +19,18 @@ extensions: []
|
|
30
19
|
extra_rdoc_files: []
|
31
20
|
files:
|
32
21
|
- .gitignore
|
22
|
+
- .rspec
|
23
|
+
- .travis.yml
|
33
24
|
- CHANGELOG.md
|
34
25
|
- Gemfile
|
35
26
|
- LICENSE
|
36
27
|
- README.md
|
37
28
|
- Rakefile
|
38
29
|
- lib/ugigi.rb
|
39
|
-
- lib/ugigi/parser.rb
|
40
30
|
- lib/ugigi/scheme.rb
|
41
31
|
- lib/ugigi/version.rb
|
32
|
+
- spec/spec_helper.rb
|
33
|
+
- spec/ugigi_spec.rb
|
42
34
|
- ugigi.gemspec
|
43
35
|
homepage: ''
|
44
36
|
licenses: []
|
@@ -60,9 +52,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
60
52
|
version: '0'
|
61
53
|
requirements: []
|
62
54
|
rubyforge_project:
|
63
|
-
rubygems_version: 1.8.
|
55
|
+
rubygems_version: 1.8.24
|
64
56
|
signing_key:
|
65
57
|
specification_version: 3
|
66
58
|
summary: Ugigi Wrapper for Ruby 1.9.x
|
67
|
-
test_files:
|
68
|
-
|
59
|
+
test_files:
|
60
|
+
- spec/spec_helper.rb
|
61
|
+
- spec/ugigi_spec.rb
|
data/lib/ugigi/parser.rb
DELETED
@@ -1,43 +0,0 @@
|
|
1
|
-
# coding: utf-8
|
2
|
-
|
3
|
-
module Ugigi
|
4
|
-
class Parser
|
5
|
-
def initialize
|
6
|
-
@agent = Mechanize.new
|
7
|
-
@agent.user_agent = "Ugigi Ruby #{Ugigi::VERSION}"
|
8
|
-
end
|
9
|
-
|
10
|
-
def fetch(args)
|
11
|
-
case args[:only]
|
12
|
-
when :sosowa
|
13
|
-
args = args.update(:sswp => 0, :compe => 0)
|
14
|
-
when :compe
|
15
|
-
args = args.update(:sswl => 0, :sswp => 0)
|
16
|
-
when :sswp
|
17
|
-
args = args.update(:sswl => 0, :compe => 0)
|
18
|
-
end
|
19
|
-
args.delete(:only) if args.has_key? :only
|
20
|
-
params = Ugigi.serialize_parameter(args)
|
21
|
-
page = @agent.get(URI.join(BASE_URL, params))
|
22
|
-
data = JSON.parse(page.body)
|
23
|
-
indexes = []
|
24
|
-
data.each do |e|
|
25
|
-
index = Index.new(e)
|
26
|
-
case args[:style]
|
27
|
-
when :sosowa
|
28
|
-
index.element = index.to_sosowa_index
|
29
|
-
indexes << index
|
30
|
-
else
|
31
|
-
indexes << index
|
32
|
-
end
|
33
|
-
end
|
34
|
-
return indexes
|
35
|
-
end
|
36
|
-
|
37
|
-
def total_count(args)
|
38
|
-
params = Ugigi.serialize_parameter(args)
|
39
|
-
page = @agent.get(URI.join(BASE_URL_NOAPI, params))
|
40
|
-
return page.search(%{div[@class="info"]}).children[0].text.strip.split("/")[1].to_i
|
41
|
-
end
|
42
|
-
end
|
43
|
-
end
|