granicus_migrate 0.0.1

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.
@@ -0,0 +1,3 @@
1
+ projects
2
+ agenda_temp.html
3
+ *.gem
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in gem_template.gemspec
4
+ gemspec
@@ -0,0 +1,52 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ granicus_migrate (0.0.1)
5
+ faraday_middleware (~> 0.7.0)
6
+ granicus-platform-api (>= 0.9.1)
7
+ nokogiri (>= 1.5.0)
8
+
9
+ GEM
10
+ remote: http://rubygems.org/
11
+ specs:
12
+ addressable (2.2.6)
13
+ akami (1.0.0)
14
+ gyoku (>= 0.4.0)
15
+ builder (3.0.0)
16
+ faraday (0.7.5)
17
+ addressable (~> 2.2.6)
18
+ multipart-post (~> 1.1.3)
19
+ rack (< 2, >= 1.1.0)
20
+ faraday_middleware (0.7.0)
21
+ faraday (~> 0.7.3)
22
+ granicus-platform-api (0.9.1)
23
+ hashie (~> 1.0.0)
24
+ savon (~> 0.9.2)
25
+ gyoku (0.4.4)
26
+ builder (>= 2.1.2)
27
+ hashie (1.0.0)
28
+ httpi (0.9.5)
29
+ rack
30
+ multipart-post (1.1.3)
31
+ nokogiri (1.5.0)
32
+ nori (1.0.2)
33
+ rack (1.3.5)
34
+ savon (0.9.7)
35
+ akami (~> 1.0)
36
+ builder (>= 2.1.2)
37
+ gyoku (>= 0.4.0)
38
+ httpi (~> 0.9)
39
+ nokogiri (>= 1.4.0)
40
+ nori (~> 1.0)
41
+ wasabi (~> 2.0)
42
+ wasabi (2.0.0)
43
+ nokogiri (>= 1.4.0)
44
+
45
+ PLATFORMS
46
+ ruby
47
+
48
+ DEPENDENCIES
49
+ faraday_middleware (~> 0.7.0)
50
+ granicus-platform-api (>= 0.9.1)
51
+ granicus_migrate!
52
+ nokogiri (>= 1.5.0)
@@ -0,0 +1,11 @@
1
+ #!/usr/bin/env ruby
2
+ require 'granicus_migrate_helper'
3
+
4
+ migrator = GranicusMigrateHelper.new(ARGV)
5
+
6
+ if migrator.missing_arguments?
7
+ migrator.show_help
8
+ exit
9
+ else
10
+ migrator.process_files
11
+ end
@@ -0,0 +1,28 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = "granicus_migrate"
6
+ s.version = "0.0.1"
7
+ s.platform = Gem::Platform::RUBY
8
+ s.authors = ["Javier Muniz"]
9
+ s.email = "javier@granicus.com"
10
+ s.summary = "Tool to mass-import files from old Webcasting.com customers to the Granicus Platform"
11
+ s.homepage = "http://github.com/granicus/granicus_migrate"
12
+ s.description = "Tool to mass-import files from old Webcasting.com customers to the Granicus Platform"
13
+
14
+ s.rubyforge_project = "granicus_migrate"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+
21
+ s.add_development_dependency('faraday_middleware', '~> 0.7.0')
22
+ s.add_development_dependency('granicus-platform-api','>= 0.9.1')
23
+ s.add_development_dependency('nokogiri','>= 1.5.0')
24
+
25
+ s.add_dependency('faraday_middleware', '~> 0.7.0')
26
+ s.add_dependency('granicus-platform-api','>= 0.9.1')
27
+ s.add_dependency('nokogiri','>= 1.5.0')
28
+ end
@@ -0,0 +1,145 @@
1
+ require 'granicus-platform-api'
2
+ require 'faraday_middleware'
3
+ require 'optparse'
4
+ require 'nokogiri'
5
+
6
+ class GranicusMigrateHelper
7
+ attr_accessor :host, :username, :password, :directory
8
+
9
+ def initialize(args)
10
+ # Handle options
11
+ options = {}
12
+ @option_parser = OptionParser.new do |opts|
13
+ opts.banner = "Usage: granicus_migrate [options]"
14
+ opts.separator ""
15
+ opts.separator "Specific options:"
16
+
17
+ # host
18
+ opts.on("-h","--host HOST","The Granicus platform host to load files into.") do |host|
19
+ @host = host
20
+ end
21
+
22
+ # username
23
+ opts.on("-u","--username USERNAME","The username to use to communicate with the Granicus host.") do |user|
24
+ @username = user
25
+ end
26
+
27
+ # password
28
+ opts.on("-p","--password PASSWORD","The password to use to communicate with the Granicus host.") do |pass|
29
+ @password = pass
30
+ end
31
+
32
+ # directory
33
+ opts.on("-d","--directory DIRECTORY", "The directory containing the HTML files to migrate.") do |dir|
34
+ @directory = dir
35
+ end
36
+
37
+ # No argument, shows at tail. This will print an options summary.
38
+ opts.on_tail("-?", "--help", "Show this message") do
39
+ puts opts
40
+ exit
41
+ end
42
+ end
43
+
44
+ # parse options
45
+ @option_parser.parse!(ARGV)
46
+ end
47
+
48
+ def extract_text(tag)
49
+ if tag.class == Nokogiri::XML::Text
50
+ tag.text.gsub('&nbsp;',' ')
51
+ else
52
+ text = ''
53
+ tag.children.each {|child| text += extract_text child }
54
+ text
55
+ end
56
+ end
57
+
58
+ def show_help
59
+ puts @option_parser
60
+ end
61
+
62
+ def missing_arguments?
63
+ return (@host.nil? or @username.nil? or @password.nil? or @directory.nil?)
64
+ end
65
+
66
+ def process_files
67
+ granicus = GranicusPlatformAPI::Client.new @host,@username,@password
68
+ clips = granicus.get_clips 1
69
+ clips.each do |clip|
70
+ # skip the file if we don't have a matching html document
71
+ fname = @directory + clip.Name + '.html'
72
+ unless File.exists? fname
73
+ puts "Couldn't find file: #{fname} (skipping)"
74
+ next
75
+ end
76
+
77
+ f = File.open fname
78
+ sushi = Nokogiri::HTML f
79
+ f.close
80
+ puts "Processing #{clip.Name}..."
81
+ paragraphs = sushi.xpath('//p')
82
+ meta_array = []
83
+ paragraphs.count.times do |index|
84
+ tag = paragraphs[index]
85
+ # process all of the text and see if we have an item
86
+ text = extract_text tag
87
+ text.gsub!(/\u00a0/,' ')
88
+ next if not text =~ /\w\w/
89
+
90
+ meta = GranicusPlatformAPI::MetaDataData.new
91
+ meta.Payload = GranicusPlatformAPI::AgendaItem.new
92
+ meta.Name = text
93
+
94
+ # grab any links in the tag
95
+ link_tag = tag.xpath('.//a')[0]
96
+ unless link_tag.nil?
97
+ unless link_tag['href'].nil?
98
+ meta.TimeStamp = link_tag['href'].gsub(/.*?(\d+\.\d\d\d).*/,'\\1').to_i
99
+ link_tag['href'] = 'javascript:void(0);'
100
+ link_tag['onclick'] = "top.SetPlayerPosition('0:#{meta.TimeStamp}',null);"
101
+ link_tag.remove_attribute 'target'
102
+ else
103
+ puts 'Unabled to find href in link: ' + link_tag.to_s
104
+ end
105
+ end
106
+
107
+ meta_array << meta
108
+ end
109
+
110
+ # write the html file and upload it to the platform
111
+ File.open('agenda_temp.html', 'w') {|f| f.write(sushi.to_html) }
112
+
113
+ options = {
114
+ :headers => {
115
+ 'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
116
+ 'Host' => @host,
117
+ 'Cookie' => "SESS1=#{granicus.impersonation_token}"},
118
+
119
+ :ssl => {:verify => false}
120
+ }
121
+
122
+ connection = Faraday::Connection.new(options) do |builder|
123
+ builder.use Faraday::Request::Multipart
124
+ builder.adapter(Faraday.default_adapter)
125
+ end
126
+
127
+ payload = {
128
+ :form_panel_agendaPublishing => 'uploaded',
129
+ :form_submit => 'Save Settings',
130
+ :form_panel_agendaFile => Faraday::UploadIO.new('agenda_temp.html', 'text/html')
131
+ }
132
+ response = connection.post "http://#{@host}/panes/EditFileAgenda.php?clip_id=#{clip.ID}", payload
133
+
134
+ File.delete('agenda_temp.html')
135
+
136
+ # upload all of the metadata
137
+ puts "Writing #{meta_array.count} items to Granicus Clip ID #{clip.ID}"
138
+ keymap = granicus.import_clip_meta_data clip.ID, meta_array
139
+
140
+ # make the clip public
141
+ clip.Status = "Public"
142
+ granicus.update_clip clip
143
+ end
144
+ end
145
+ end
metadata ADDED
@@ -0,0 +1,119 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: granicus_migrate
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Javier Muniz
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-11-08 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: faraday_middleware
16
+ requirement: &2153146660 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ~>
20
+ - !ruby/object:Gem::Version
21
+ version: 0.7.0
22
+ type: :development
23
+ prerelease: false
24
+ version_requirements: *2153146660
25
+ - !ruby/object:Gem::Dependency
26
+ name: granicus-platform-api
27
+ requirement: &2153146140 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: 0.9.1
33
+ type: :development
34
+ prerelease: false
35
+ version_requirements: *2153146140
36
+ - !ruby/object:Gem::Dependency
37
+ name: nokogiri
38
+ requirement: &2153145640 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: 1.5.0
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *2153145640
47
+ - !ruby/object:Gem::Dependency
48
+ name: faraday_middleware
49
+ requirement: &2153145080 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 0.7.0
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: *2153145080
58
+ - !ruby/object:Gem::Dependency
59
+ name: granicus-platform-api
60
+ requirement: &2153144540 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: 0.9.1
66
+ type: :runtime
67
+ prerelease: false
68
+ version_requirements: *2153144540
69
+ - !ruby/object:Gem::Dependency
70
+ name: nokogiri
71
+ requirement: &2153144060 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: 1.5.0
77
+ type: :runtime
78
+ prerelease: false
79
+ version_requirements: *2153144060
80
+ description: Tool to mass-import files from old Webcasting.com customers to the Granicus
81
+ Platform
82
+ email: javier@granicus.com
83
+ executables:
84
+ - granicus_migrate
85
+ extensions: []
86
+ extra_rdoc_files: []
87
+ files:
88
+ - .gitignore
89
+ - Gemfile
90
+ - Gemfile.lock
91
+ - bin/granicus_migrate
92
+ - granicus_migrate.gemspec
93
+ - lib/granicus_migrate_helper.rb
94
+ homepage: http://github.com/granicus/granicus_migrate
95
+ licenses: []
96
+ post_install_message:
97
+ rdoc_options: []
98
+ require_paths:
99
+ - lib
100
+ required_ruby_version: !ruby/object:Gem::Requirement
101
+ none: false
102
+ requirements:
103
+ - - ! '>='
104
+ - !ruby/object:Gem::Version
105
+ version: '0'
106
+ required_rubygems_version: !ruby/object:Gem::Requirement
107
+ none: false
108
+ requirements:
109
+ - - ! '>='
110
+ - !ruby/object:Gem::Version
111
+ version: '0'
112
+ requirements: []
113
+ rubyforge_project: granicus_migrate
114
+ rubygems_version: 1.8.5
115
+ signing_key:
116
+ specification_version: 3
117
+ summary: Tool to mass-import files from old Webcasting.com customers to the Granicus
118
+ Platform
119
+ test_files: []