parentvue 0.1.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.
- checksums.yaml +7 -0
- data/bin/parentvue +33 -0
- data/lib/parentvue.rb +4 -0
- data/lib/parentvue/service.rb +58 -0
- metadata +88 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 81c3a8cd21105d87423dceeadf43e5cd20b1f7724b765b0567c899fe6840b4cc
|
4
|
+
data.tar.gz: 1a9c572b5af5d46f1f6cd3f51d4e1e6cbf1545e23a373e013158feb2f75f1651
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: fa37351d26ae60d0f7918f52aea0cd46b76d663159aa48efdd49b87994fa43e642245e27c81dbe6703986a3e5aa25d814d7bece497465a4afdc019a88c340dd2
|
7
|
+
data.tar.gz: dc86dc9d1d65e67b76b5d24241443d9bd1998f3f9c7970641ad3bee6e428417058823639bb983ee9c470c4c8d5e800d49a9604ebebf9e88a898afb16115ed9b4
|
data/bin/parentvue
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# frozen_string_literal: true
|
4
|
+
|
5
|
+
require 'parentvue'
|
6
|
+
require 'thor'
|
7
|
+
require 'pp'
|
8
|
+
|
9
|
+
class ParentVUEScript < Thor
|
10
|
+
class_option :login_url, aliases: '-l', desc: 'Login Page URL', default: 'https://portal.sfusd.edu/PXP2_Login.aspx'
|
11
|
+
class_option :username, aliases: '-U', desc: 'Username', required: true
|
12
|
+
class_option :password, aliases: '-P', desc: 'Password', required: true
|
13
|
+
# TODO: language switch
|
14
|
+
|
15
|
+
desc 'list', 'Print list of students associated with your account.'
|
16
|
+
|
17
|
+
def list
|
18
|
+
pp service.students
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def service
|
24
|
+
return @service if @service
|
25
|
+
|
26
|
+
@service = ParentVUE::Service.new(options)
|
27
|
+
@service.parent_sign_in options[:username], options[:password]
|
28
|
+
|
29
|
+
return @service
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
ParentVUEScript.start(ARGV)
|
data/lib/parentvue.rb
ADDED
@@ -0,0 +1,58 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'mechanize'
|
4
|
+
|
5
|
+
class ParentVUE::Service
|
6
|
+
attr_reader :mechanize
|
7
|
+
attr_reader :base_url
|
8
|
+
attr_reader :students
|
9
|
+
|
10
|
+
def initialize(options = {})
|
11
|
+
@mechanize = Mechanize.new
|
12
|
+
|
13
|
+
@login_url = options[:login_url]
|
14
|
+
|
15
|
+
uri = URI.parse(@login_url)
|
16
|
+
@base_url = "#{uri.scheme}://#{uri.host}"
|
17
|
+
end
|
18
|
+
|
19
|
+
def main_login_page
|
20
|
+
@mechanize.get(@login_url)
|
21
|
+
end
|
22
|
+
|
23
|
+
def parent_sign_in(username, password)
|
24
|
+
parent_login_link = main_login_page.link_with(text: /ParentVUE/)
|
25
|
+
login_page = parent_login_link.click
|
26
|
+
|
27
|
+
post_login_page = login_with_credentials(login_page, username, password)
|
28
|
+
|
29
|
+
return false if post_login_page.at '#ctl00_USER_ERROR'
|
30
|
+
|
31
|
+
scrape_students(post_login_page)
|
32
|
+
|
33
|
+
return post_login_page
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def login_with_credentials(parent_login_page, username, password)
|
39
|
+
login_form = parent_login_page.form('aspnetForm')
|
40
|
+
login_form['ctl00$MainContent$username'] = username
|
41
|
+
login_form['ctl00$MainContent$password'] = password
|
42
|
+
@mechanize.submit(login_form, login_form.buttons.first)
|
43
|
+
end
|
44
|
+
|
45
|
+
def scrape_students(home_page)
|
46
|
+
@students = []
|
47
|
+
home_page.search('div.student-info').each do |element|
|
48
|
+
student_id = element.search('span.student-id').text
|
49
|
+
student_id.slice! 'ID: '
|
50
|
+
|
51
|
+
@students << {
|
52
|
+
name: element.search('span.student-name').text,
|
53
|
+
id: student_id,
|
54
|
+
school_name: element.search('div.school').text
|
55
|
+
}
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
metadata
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: parentvue
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Dav Yaginuma
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2010-04-28 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: mechanize
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.7'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2.7'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: thor
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.0'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '2.1'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '2.1'
|
55
|
+
description: Provides a web scraping library to interact with the ParentVUE website
|
56
|
+
email: dav@akuaku.org
|
57
|
+
executables:
|
58
|
+
- parentvue
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- bin/parentvue
|
63
|
+
- lib/parentvue.rb
|
64
|
+
- lib/parentvue/service.rb
|
65
|
+
homepage: https://github.com/dav/ParentVUE-Gem
|
66
|
+
licenses:
|
67
|
+
- MIT
|
68
|
+
metadata: {}
|
69
|
+
post_install_message:
|
70
|
+
rdoc_options: []
|
71
|
+
require_paths:
|
72
|
+
- lib
|
73
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
74
|
+
requirements:
|
75
|
+
- - ">="
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
requirements: []
|
84
|
+
rubygems_version: 3.0.3
|
85
|
+
signing_key:
|
86
|
+
specification_version: 4
|
87
|
+
summary: For programmatic access to the ParentVUE website
|
88
|
+
test_files: []
|