lyne 0.0.2
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 +7 -0
- data/.gitignore +24 -0
- data/Gemfile +10 -0
- data/LICENSE.txt +22 -0
- data/README.md +58 -0
- data/Rakefile +2 -0
- data/lib/lyne.rb +19 -0
- data/lib/lyne/account.rb +9 -0
- data/lib/lyne/error.rb +10 -0
- data/lib/lyne/page/character.rb +73 -0
- data/lib/lyne/page/hook.rb +15 -0
- data/lib/lyne/page/show_table.rb +12 -0
- data/lib/lyne/parser/base.rb +40 -0
- data/lib/lyne/parser/home.rb +83 -0
- data/lib/lyne/session/browser.rb +67 -0
- data/lib/lyne/session/screen_transitions.rb +36 -0
- data/lib/lyne/version.rb +3 -0
- data/lyne.gemspec +28 -0
- data/spec/account.yaml.example +4 -0
- data/spec/character/info_spec.rb +50 -0
- data/spec/spec_helper.rb +4 -0
- metadata +151 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 0dd78c847a8051049b3e0cda371c44c78e3daa15
|
4
|
+
data.tar.gz: 4f1ffc77c868c1a57b7e13829571790bbc537da2
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 854764cabc0c3902f0407ee1c960da4009979d038399f13bd9ed6def14bd74820aaeabea6132a179ca350e15f31cd2ac117fe4f03d501ca02c27f85a6c3af79e
|
7
|
+
data.tar.gz: 90c412f9953f779a40f774864ee422b4c7ab211df1c5941dbf052147552e02553cd4e3216acea5c14ef83e888c7e26f9fa95b832eeb7098abfa527fa17ed8863
|
data/.gitignore
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
.bundle
|
4
|
+
.config
|
5
|
+
.yardoc
|
6
|
+
.rspec
|
7
|
+
Gemfile.lock
|
8
|
+
InstalledFiles
|
9
|
+
_yardoc
|
10
|
+
coverage
|
11
|
+
doc/
|
12
|
+
lib/bundler/man
|
13
|
+
pkg
|
14
|
+
rdoc
|
15
|
+
spec/reports
|
16
|
+
spec/account.yaml
|
17
|
+
test/tmp
|
18
|
+
test/version_tmp
|
19
|
+
tmp
|
20
|
+
*.bundle
|
21
|
+
*.so
|
22
|
+
*.o
|
23
|
+
*.a
|
24
|
+
mkmf.log
|
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 soplana
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
# Lyne
|
2
|
+
スクエアエニックスが運営するドラゴンクエスト10のメンバーズサイト「冒険者の広場」をスクレイピングするgemです.
|
3
|
+
|
4
|
+
# install
|
5
|
+
|
6
|
+
内部でphantomjsを使ってスクレイピングするためinstallしてください.
|
7
|
+
|
8
|
+
http://phantomjs.org/download.html
|
9
|
+
|
10
|
+
```bash
|
11
|
+
# osx
|
12
|
+
$ brew update && brew install phantomjs
|
13
|
+
```
|
14
|
+
|
15
|
+
# use
|
16
|
+
|
17
|
+
```bash
|
18
|
+
$ gem install Lyne
|
19
|
+
```
|
20
|
+
```
|
21
|
+
gem 'lyne'
|
22
|
+
```
|
23
|
+
|
24
|
+
optionで渡すcharacter_idはキャラクター選択画面の「このキャラを選択」ボタンのrel属性の値になります。
|
25
|
+
|
26
|
+

|
27
|
+
|
28
|
+
```ruby
|
29
|
+
require 'lyne'
|
30
|
+
|
31
|
+
dqx = Lyne::Account.new(
|
32
|
+
account: 'account_name',
|
33
|
+
password: 'account_password',
|
34
|
+
character_id: 975829418411224
|
35
|
+
)
|
36
|
+
|
37
|
+
info = dqx.character.info
|
38
|
+
info.id #=> "TV327-610"
|
39
|
+
info.name #=> "ソプラナ"
|
40
|
+
```
|
41
|
+
|
42
|
+
# test
|
43
|
+
|
44
|
+
```bash
|
45
|
+
$ cp spec/account.yaml.example spec/account.yaml
|
46
|
+
```
|
47
|
+
|
48
|
+
```yaml
|
49
|
+
# spec/account.yaml
|
50
|
+
account:
|
51
|
+
name: account_name
|
52
|
+
password: account_password
|
53
|
+
character_id: 975829418411224
|
54
|
+
```
|
55
|
+
|
56
|
+
```
|
57
|
+
$ rspec spec/character/info_spec.rb
|
58
|
+
```
|
data/Rakefile
ADDED
data/lib/lyne.rb
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
require "lyne/version"
|
2
|
+
require 'nokogiri'
|
3
|
+
require 'capybara/poltergeist'
|
4
|
+
require 'phantomjs'
|
5
|
+
require 'active_support'
|
6
|
+
require 'active_support/core_ext'
|
7
|
+
|
8
|
+
require './lib/lyne/error.rb'
|
9
|
+
require './lib/lyne/account.rb'
|
10
|
+
require './lib/lyne/session/screen_transitions.rb'
|
11
|
+
require './lib/lyne/session/browser.rb'
|
12
|
+
require './lib/lyne/parser/base.rb'
|
13
|
+
require './lib/lyne/parser/home.rb'
|
14
|
+
require './lib/lyne/page/hook.rb'
|
15
|
+
#require './lib/lyne/page/show_table.rb'
|
16
|
+
require './lib/lyne/page/character.rb'
|
17
|
+
|
18
|
+
module Lyne
|
19
|
+
end
|
data/lib/lyne/account.rb
ADDED
data/lib/lyne/error.rb
ADDED
@@ -0,0 +1,73 @@
|
|
1
|
+
# ページ毎にオブジェクトに切り出す
|
2
|
+
module Lyne::Page
|
3
|
+
# Character情報に紐づくオブジェクト
|
4
|
+
module Character
|
5
|
+
class Base
|
6
|
+
#include Lyne::Page::ShowTable
|
7
|
+
|
8
|
+
def initialize session
|
9
|
+
@parser = parser_class.new(session)
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
def parser_class
|
14
|
+
Lyne::Parser::Home
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
# Target以下のClassが実際の機能として提供される
|
19
|
+
# それぞれの機能が必要とするパーサを必ず指定する必要がある
|
20
|
+
module Target
|
21
|
+
class Info < Lyne::Page::Character::Base
|
22
|
+
PROPERTYS = %w(name job tribe level next_level genki_charge id gold)
|
23
|
+
include Lyne::Page::Hook::CreateProperty
|
24
|
+
|
25
|
+
private
|
26
|
+
def table_headers
|
27
|
+
%w(ID 名前 種族 職業 レベル 次のレベルまで 所持金 元気チャージ)
|
28
|
+
end
|
29
|
+
|
30
|
+
def table_rows
|
31
|
+
[id, name, job, tribe, level, next_level, gold, genki_charge]
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
def parser_class
|
36
|
+
Lyne::Parser::Info
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
class House < Lyne::Page::Character::Base
|
41
|
+
PROPERTYS = %w(country city house_number setting setting_type)
|
42
|
+
include Lyne::Page::Hook::CreateProperty
|
43
|
+
|
44
|
+
private
|
45
|
+
def parser_class
|
46
|
+
Lyne::Parser::House
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
# 実際の機能をLyne::Account(外部からのインターフェイス)に
|
52
|
+
# 提供する為のClass
|
53
|
+
# ドラクエ10Account内に複数キャラがいる場合などは
|
54
|
+
# キャラの切り替えなども発生するため
|
55
|
+
class Adapter
|
56
|
+
def initialize session
|
57
|
+
@session = session
|
58
|
+
@character = Lyne::Page::Character::Base.new(session)
|
59
|
+
end
|
60
|
+
|
61
|
+
Lyne::Page::Character::Target.constants.each do |target|
|
62
|
+
formatted_name = target.to_s.downcase
|
63
|
+
define_method(formatted_name) do
|
64
|
+
if instance_variable_defined?("@#{formatted_name}")
|
65
|
+
return instance_variable_get("@#{formatted_name}")
|
66
|
+
else
|
67
|
+
instance_variable_set("@#{formatted_name}", Lyne::Page::Character::Target.const_get(target).new(@session))
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module Lyne::Page
|
2
|
+
module Hook
|
3
|
+
module CreateProperty
|
4
|
+
def self.included(target_class)
|
5
|
+
target_class.class_eval do
|
6
|
+
self::PROPERTYS.each do |property|
|
7
|
+
define_method(property) do
|
8
|
+
@parser.__send__(property)
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
# Lyne::Util::Sessionからhtml情報を受け取り
|
2
|
+
# 必要に応じてパースする
|
3
|
+
module Lyne::Parser
|
4
|
+
class Base
|
5
|
+
def initialize session
|
6
|
+
@session = session
|
7
|
+
yield if block_given?
|
8
|
+
set_result
|
9
|
+
end
|
10
|
+
|
11
|
+
def nbsp
|
12
|
+
Nokogiri::HTML(" ").text
|
13
|
+
end
|
14
|
+
|
15
|
+
private
|
16
|
+
def set_result
|
17
|
+
@result = Nokogiri::HTML.parse(@session.html)
|
18
|
+
end
|
19
|
+
|
20
|
+
def get_parse_data option
|
21
|
+
raise Lyne::Error::ParseError.new if parse_data.blank?
|
22
|
+
option = option.reverse_merge(default_parse_result_options)
|
23
|
+
text = parse_data.children[option[:index]].children.text
|
24
|
+
|
25
|
+
if option[:regexp].present?
|
26
|
+
text.gsub(option[:regexp], '')
|
27
|
+
else
|
28
|
+
text
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
def default_parse_result_options
|
33
|
+
{}
|
34
|
+
end
|
35
|
+
|
36
|
+
def parse_data
|
37
|
+
@parse_data ||= @result.xpath(parse_target_xpath)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,83 @@
|
|
1
|
+
module Lyne::Parser
|
2
|
+
class Home < Lyne::Parser::Base
|
3
|
+
def initialize session
|
4
|
+
super(session) do
|
5
|
+
@session.first_visit!
|
6
|
+
end
|
7
|
+
end
|
8
|
+
end
|
9
|
+
|
10
|
+
class Info < Home
|
11
|
+
def name
|
12
|
+
@result.xpath("//h2[@id='myCharacterName']").text.gsub(/\[|\]/, '')
|
13
|
+
end
|
14
|
+
|
15
|
+
def job
|
16
|
+
get_parse_data(index: 11)
|
17
|
+
end
|
18
|
+
|
19
|
+
def tribe
|
20
|
+
get_parse_data(index: 7, regexp: /:|#{nbsp}|男|女/)
|
21
|
+
end
|
22
|
+
|
23
|
+
def level
|
24
|
+
get_parse_data(index: 15)
|
25
|
+
end
|
26
|
+
|
27
|
+
def id
|
28
|
+
get_parse_data(index: 3)
|
29
|
+
end
|
30
|
+
|
31
|
+
def next_level
|
32
|
+
get_parse_data(index: 19)
|
33
|
+
end
|
34
|
+
|
35
|
+
def gold
|
36
|
+
get_parse_data(index: 23)
|
37
|
+
end
|
38
|
+
|
39
|
+
def genki_charge
|
40
|
+
get_parse_data(index: 27)
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
def default_parse_result_options
|
45
|
+
{regexp: /:|#{nbsp}/}
|
46
|
+
end
|
47
|
+
|
48
|
+
def parse_target_xpath
|
49
|
+
"//div[@id='myCharacterStatusList']"
|
50
|
+
end
|
51
|
+
|
52
|
+
def parse_data
|
53
|
+
(super.children.presence || [])[1]
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
class House < Home
|
58
|
+
def country
|
59
|
+
get_parse_data(index: 3).split[0].scan(/.*住宅村/)[0]
|
60
|
+
end
|
61
|
+
|
62
|
+
def city
|
63
|
+
get_parse_data(index: 3).split[0].gsub(/#{country}/,'')
|
64
|
+
end
|
65
|
+
|
66
|
+
def house_number
|
67
|
+
get_parse_data(index: 3).split[1]
|
68
|
+
end
|
69
|
+
|
70
|
+
def setting
|
71
|
+
get_parse_data(index: 5)
|
72
|
+
end
|
73
|
+
|
74
|
+
def setting_type
|
75
|
+
get_parse_data(index: 7)
|
76
|
+
end
|
77
|
+
|
78
|
+
private
|
79
|
+
def parse_target_xpath
|
80
|
+
"//div[@id='myHouseStage']"
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
module Lyne::Session
|
2
|
+
# sessionの維持
|
3
|
+
# ページ遷移などのブラウザの動き
|
4
|
+
class Browser
|
5
|
+
include ScreenTransitions
|
6
|
+
|
7
|
+
def initialize options
|
8
|
+
@options = options.reverse_merge(default_options)
|
9
|
+
Capybara.register_driver :poltergeist do |app|
|
10
|
+
Capybara::Poltergeist::Driver.new(app, {
|
11
|
+
js_errors: false,
|
12
|
+
timeout: 1000,
|
13
|
+
phantomjs: @options[:phantomjs]
|
14
|
+
})
|
15
|
+
end
|
16
|
+
Capybara.default_selector = :xpath
|
17
|
+
@page = Capybara::Session.new(:poltergeist)
|
18
|
+
@page.driver.headers = {'User-Agent' => @options[:user_agent]}
|
19
|
+
end
|
20
|
+
|
21
|
+
def start!
|
22
|
+
go :welcome
|
23
|
+
go :character_select
|
24
|
+
self
|
25
|
+
end
|
26
|
+
|
27
|
+
def first_visit!
|
28
|
+
return if @page.current_path == '/sc/home/'
|
29
|
+
character_select_url? ? go(:home) : visit(:home)
|
30
|
+
end
|
31
|
+
|
32
|
+
def go type
|
33
|
+
__send__("go_to_#{type}")
|
34
|
+
end
|
35
|
+
|
36
|
+
def visit type
|
37
|
+
__send__("visit_to_#{type}")
|
38
|
+
end
|
39
|
+
|
40
|
+
def html
|
41
|
+
@page.html
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
def default_options
|
46
|
+
{
|
47
|
+
account: '',
|
48
|
+
password: '',
|
49
|
+
character_id: 0,
|
50
|
+
user_agent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X)',
|
51
|
+
phantomjs: Phantomjs.path
|
52
|
+
}
|
53
|
+
end
|
54
|
+
|
55
|
+
def login_url
|
56
|
+
url = 'https://secure.square-enix.com/account/app/svc/login?'
|
57
|
+
url += 'cont=dq_comm&'
|
58
|
+
url += 'svcgrp=Service_SEJ&'
|
59
|
+
url += 'retu=http%3A%2F%2Fhiroba.dqx.jp%2Fsc%2F&'
|
60
|
+
url += 'retl=dqx_p&ret=https%3A%2F%2Fsecure.dqx.jp%2Fsc%2Flogin%2Fexec%3Fp%3D0%26ott%3Dfeb84a119a6b2f7df40aac09a9c42f90'
|
61
|
+
end
|
62
|
+
|
63
|
+
def character_select_url?
|
64
|
+
@page.current_path == "/sc/login/characterselect/"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module Lyne::Session
|
2
|
+
module ScreenTransitions
|
3
|
+
def go_to_welcome
|
4
|
+
move_to do
|
5
|
+
@page.visit login_url
|
6
|
+
@page.fill_in '_pr_confData_sqexid', with: @options[:account]
|
7
|
+
@page.fill_in '_pr_confData_passwd', with: @options[:password]
|
8
|
+
@page.find(:xpath, ".//a[@id='btLogin']").click
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def go_to_character_select
|
13
|
+
move_to do
|
14
|
+
@page.find(:xpath, "//a[@href='/sc/login/characterselect/']").click
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def go_to_home
|
19
|
+
move_to do
|
20
|
+
@page.find(:xpath, "//a[@rel='#{@options[:character_id]}']").click
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def visit_to_home
|
25
|
+
move_to do
|
26
|
+
@page.visit('sc/home/')
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
def move_to
|
32
|
+
yield
|
33
|
+
sleep(2)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/lib/lyne/version.rb
ADDED
data/lyne.gemspec
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'lyne/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = "lyne"
|
8
|
+
spec.version = Lyne::VERSION
|
9
|
+
spec.authors = ["soplana"]
|
10
|
+
spec.email = ["sonosheet.jp@gmail.com"]
|
11
|
+
spec.summary = %q{dqx gem}
|
12
|
+
spec.description = %q{冒険者の広場をスクレイピングするgemです}
|
13
|
+
spec.homepage = "http://leeno.jp"
|
14
|
+
spec.license = "MIT"
|
15
|
+
|
16
|
+
spec.files = `git ls-files -z`.split("\x0")
|
17
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
18
|
+
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
|
+
spec.require_paths = ["lib"]
|
20
|
+
|
21
|
+
spec.add_development_dependency "bundler", "~> 1.6"
|
22
|
+
spec.add_development_dependency "nokogiri", '~> 1.3'
|
23
|
+
spec.add_development_dependency "poltergeist", '~> 1.5'
|
24
|
+
spec.add_development_dependency "capybara", '~> 2.4'
|
25
|
+
spec.add_development_dependency "phantomjs", '~> 1.9'
|
26
|
+
spec.add_development_dependency "activesupport", '~> 4.0'
|
27
|
+
|
28
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require File.expand_path(File.join('../', 'spec_helper'), File.dirname(__FILE__))
|
2
|
+
|
3
|
+
describe Lyne::Page::Character do
|
4
|
+
before(:all){ @account = YAML.load_file("./spec/account.yaml")['account'].symbolize_keys }
|
5
|
+
|
6
|
+
context 'character情報' do
|
7
|
+
let(:property){ nil }
|
8
|
+
# ほんとはletがいいけど, 一度しか実行したくない...
|
9
|
+
before(:all) do
|
10
|
+
dqx = Lyne::Account.new({
|
11
|
+
account: @account[:name],
|
12
|
+
password: @account[:password],
|
13
|
+
character_id: @account[:character_id]
|
14
|
+
})
|
15
|
+
@character = dqx.character
|
16
|
+
end
|
17
|
+
|
18
|
+
context 'Infoが取得できているる' do
|
19
|
+
subject{ @character.info }
|
20
|
+
|
21
|
+
context 'IDが取得できている' do
|
22
|
+
it { expect(subject.id).to match(/^[a-z]{2}\d{3}-\d{3}$/i) }
|
23
|
+
end
|
24
|
+
|
25
|
+
context 'levelが取得できている' do
|
26
|
+
it { expect(subject.level).to match(/^\d*$/) }
|
27
|
+
end
|
28
|
+
|
29
|
+
context 'next_levelが取得できている' do
|
30
|
+
it { expect(subject.next_level).to match(/.*P$/) }
|
31
|
+
end
|
32
|
+
|
33
|
+
context 'goldが取得できている' do
|
34
|
+
it { expect(subject.gold).to match(/.*G$/) }
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context 'Houseが取得できているる' do
|
39
|
+
subject{ @character.house }
|
40
|
+
|
41
|
+
context 'countryが取得できている' do
|
42
|
+
it { expect(subject.country).to match(/.*住宅村$/) }
|
43
|
+
end
|
44
|
+
|
45
|
+
context 'house_numberが取得できている' do
|
46
|
+
it { expect(subject.house_number).to match(/.*サイズ)$/) }
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,151 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: lyne
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.2
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- soplana
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-08-07 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: bundler
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.6'
|
20
|
+
type: :development
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.6'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: nokogiri
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.3'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.3'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: poltergeist
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.5'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.5'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: capybara
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.4'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '2.4'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: phantomjs
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '1.9'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '1.9'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: activesupport
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '4.0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '4.0'
|
97
|
+
description: "冒険者の広場をスクレイピングするgemです"
|
98
|
+
email:
|
99
|
+
- sonosheet.jp@gmail.com
|
100
|
+
executables: []
|
101
|
+
extensions: []
|
102
|
+
extra_rdoc_files: []
|
103
|
+
files:
|
104
|
+
- ".gitignore"
|
105
|
+
- Gemfile
|
106
|
+
- LICENSE.txt
|
107
|
+
- README.md
|
108
|
+
- Rakefile
|
109
|
+
- lib/lyne.rb
|
110
|
+
- lib/lyne/account.rb
|
111
|
+
- lib/lyne/error.rb
|
112
|
+
- lib/lyne/page/character.rb
|
113
|
+
- lib/lyne/page/hook.rb
|
114
|
+
- lib/lyne/page/show_table.rb
|
115
|
+
- lib/lyne/parser/base.rb
|
116
|
+
- lib/lyne/parser/home.rb
|
117
|
+
- lib/lyne/session/browser.rb
|
118
|
+
- lib/lyne/session/screen_transitions.rb
|
119
|
+
- lib/lyne/version.rb
|
120
|
+
- lyne.gemspec
|
121
|
+
- spec/account.yaml.example
|
122
|
+
- spec/character/info_spec.rb
|
123
|
+
- spec/spec_helper.rb
|
124
|
+
homepage: http://leeno.jp
|
125
|
+
licenses:
|
126
|
+
- MIT
|
127
|
+
metadata: {}
|
128
|
+
post_install_message:
|
129
|
+
rdoc_options: []
|
130
|
+
require_paths:
|
131
|
+
- lib
|
132
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
133
|
+
requirements:
|
134
|
+
- - ">="
|
135
|
+
- !ruby/object:Gem::Version
|
136
|
+
version: '0'
|
137
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
138
|
+
requirements:
|
139
|
+
- - ">="
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
142
|
+
requirements: []
|
143
|
+
rubyforge_project:
|
144
|
+
rubygems_version: 2.2.2
|
145
|
+
signing_key:
|
146
|
+
specification_version: 4
|
147
|
+
summary: dqx gem
|
148
|
+
test_files:
|
149
|
+
- spec/account.yaml.example
|
150
|
+
- spec/character/info_spec.rb
|
151
|
+
- spec/spec_helper.rb
|