chocolate_rain 0.0.2 → 0.0.3

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,17 @@
1
+ require 'net/ftp'
2
+ require 'fileutils'
3
+ include Daemon
4
+ include ChocolateRain
5
+
6
+ class FtpMachine < Daemon::Base
7
+ def self.start
8
+ loop do
9
+ ChocolateRain::FtpWorker.do_work
10
+ sleep(30)
11
+ end
12
+ end
13
+
14
+ def self.stop
15
+ put "Stopping FtpMachine"
16
+ end
17
+ end
@@ -0,0 +1,51 @@
1
+ require 'net/ftp'
2
+ require 'fileutils'
3
+
4
+ module ChocolateRain
5
+ class FtpWorker < ActionMailer::Base
6
+ def do_work
7
+ @@ftp_creds = YAML.load(File.open("config/fms_config.yml"))["#{Rails.env}"]
8
+
9
+ @local_files = []
10
+
11
+ ftp = Net::FTP.new
12
+ ftp.passive = true
13
+
14
+ puts "Connection"
15
+ ftp.connect(@@ftp_creds["url"], 21)
16
+ ftp.login(@@ftp_creds["username"], @@ftp_creds["password"])
17
+ puts "logged in"
18
+
19
+ ftp.chdir(@@ftp_creds["directory"])
20
+ puts "chdir"
21
+ filenames = ftp.nlst("*.#{@@ftp_creds["format"]}")
22
+ puts "got files"
23
+ # loop by index
24
+ filenames.each_index do |i|
25
+ begin
26
+ f = File.open("#{Rails.root}/tmp/#{i}.#{@@ftp_creds["format"]}")
27
+ ftp.getbinaryfile(filenames[i], f)
28
+ v = ChocolateRain::YVideo.new()
29
+ v.filename = i
30
+ v.file_object = f
31
+ v.title = i
32
+ @local_files << "#{i}.#{@@ftp_creds["format"]}"
33
+ rescue Exception => e
34
+ puts "Error in FTP: #{e.message}"
35
+ end
36
+ end
37
+
38
+ filenames.each do |filename|
39
+ # ftp.delete("#{filename}")
40
+ end
41
+
42
+ @local_files.each do |f|
43
+ begin
44
+ v.save
45
+ rescue Exception => e
46
+ puts "Exception: #{e.message}"
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,26 @@
1
+ require 'net/pop'
2
+ require 'mail'
3
+ include Daemon
4
+ include ChocolateRain
5
+
6
+ class MailFetcher < Daemon::Base
7
+ def self.start
8
+ loop do
9
+ pop = Net::POP3.new('mail.hasflavor.com')
10
+ pop.start("app@hasflavor.com", "oi890po")
11
+
12
+ if !pop.mails.empty?
13
+ pop.each_mail do |m|
14
+ ChocolateRain::MailHandler.receive(m.pop)
15
+ # m.delete
16
+ end
17
+ end
18
+ pop.finish
19
+ sleep(30)
20
+ end
21
+ end
22
+
23
+ def self.stop
24
+ puts "Stopping Mail Fetcher Daemon"
25
+ end
26
+ end
@@ -0,0 +1,44 @@
1
+ require 'mail'
2
+ require 'stringio'
3
+
4
+ module ChocolateRain
5
+ class MailHandler < ActionMailer::Base
6
+ def resend(sender, recipient, subject, body)
7
+ mail(:from => sender,
8
+ :to => recipient,
9
+ :subject => subject,
10
+ :body => body)
11
+ end
12
+
13
+ def receive(email)
14
+ resend_multipart(email)
15
+ end
16
+
17
+ def resend_multipart(email)
18
+ email.attachments.each do |att|
19
+ fn = att.filename
20
+ v = ChocolateRain::YVideo.new()
21
+ begin
22
+ f = StringIO.new(att.body.decoded)
23
+ v.filename = fn
24
+ v.file_object = f
25
+ v.title = fn
26
+ begin
27
+ v.save
28
+ rescue Exception => e
29
+ puts "Exception: #{e.message}"
30
+ end
31
+ rescue Exception => e
32
+ puts "Exception: #{e.message}"
33
+ end
34
+
35
+ begin
36
+ resent = resend("whyhermancain@gmail.com", "support@wearefound.com", "[CAIN] Successful Upload", "A new testimonial video has been uploaded via email to s3. Its url is http://s3.amazonaws.com/whyHermanCain/#{v.filename}")
37
+ resent.deliver
38
+ rescue
39
+ return
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -1,3 +1,3 @@
1
1
  module ChocolateRain
2
- VERSION = "0.0.2"
2
+ VERSION = "0.0.3"
3
3
  end
@@ -1,49 +1,71 @@
1
1
  require 'youtube_it'
2
2
  require 'aws/s3'
3
3
 
4
- class YVideo
5
- attr_accessor :filename, :file_object, :title, :description, :category, :keywords, :list, :comments, :rate, :commentVote, :videoRespond, :embed, :syndicate
6
-
7
- @@YCONN = YouTubeIt::Client.new(:username => "whyhermancain" , :password => "999m3@nsj0bs" , :dev_key => "AI39si79BSRx1X9AtG5zNxo-wk5YGiIHa-FAt5BNvb2poO7AVdNJEYoCgxg-JilsgHbNr0IUFk8j490v_LOZ8iPKueOUea6DdQ")
8
- @@y = YAML.load(File.open("#{Rails.root.to_s}/config/s3.yml"))
9
- AWS::S3::Base.establish_connection!(
10
- :access_key_id => @@y[(Rails.env)]["access_key_id"],
11
- :secret_access_key => @@y[(Rails.env)]["secret_access_key"]
12
- )
13
-
14
- def initialize
15
- @filename = nil
16
- @description = nil
17
- @category = nil
18
- @keywords = []
19
- @list = "denied"
20
- @comments = "denied"
21
- @rate = "denied"
22
- @commentVote = "denied"
23
- @videoRespond = "denied"
24
- @embed = "denied"
25
- @syndicate = "denied"
26
- end
27
-
28
- def to_hash
29
- self.instance_variables.inject({}) { |hash,var| hash[var.to_s.delete("@")] = self.instance_variable_get(var); hash }
30
- end
31
-
32
- def upload
33
- @@YCONN.video_upload(File.open("#{Rails.root.to_s}/public/videos/#{f}"), :title => "#{f}", :description => "Testimonial Video", :category => "Entertainment", :keywords => %w[herman cain whyhermancain republican politics testimonal donate donation], :list => "denied", :comments => "denied", :rate => "denied", :commentVote => "denied", :videoRespond => "denied", :embed => "denied", :syndicate => "denied")
34
- end
35
-
36
- def save
37
- puts "in save"
4
+ module ChocolateRain
5
+ class YVideo
6
+ attr_accessor :filename, :file_object, :title, :description, :category, :keywords, :list, :comments, :rate, :commentVote, :videoRespond, :embed, :syndicate
7
+
8
+ @@y_creds = {}
9
+ YAML.load(File.open("config/youtube_config.yml"))[(Rails.env)].each{|key, val| @@y_creds[key.to_sym] = val}
10
+ @@y_conn = YouTubeIt::Client.new(:username => @@y_creds[:username] , :password => @@y_creds[:password] , :dev_key => @@y_creds[:dev_key])
11
+ @@s3_creds = YAML.load(File.open("config/s3.yml"))
12
+ AWS::S3::Base.establish_connection!(
13
+ :access_key_id => @@s3_creds[(Rails.env)]["access_key_id"],
14
+ :secret_access_key => @@s3_creds[(Rails.env)]["secret_access_key"]
15
+ )
16
+
38
17
  begin
39
- bucket = AWS::S3::Bucket.find(@@y[(Rails.env)]["bucket"])
18
+ @@bucket = AWS::S3::Bucket.find(@@s3_creds[(Rails.env)]["bucket"])
40
19
  rescue
41
- bucket = AWS::S3::Bucket.create(@@y[(Rails.env)]["bucket"])
20
+ @@bucket = AWS::S3::Bucket.create(@@s3_creds[(Rails.env)]["bucket"])
21
+ end
22
+
23
+ def initialize
24
+ @filename = nil
25
+ @title = ""
26
+ @description = "Testimonial Video"
27
+ @category = "Entertainment"
28
+ @keywords = %w[herman cain whyhermancain republican politics testimonal donate donation]
29
+ @list = "denied"
30
+ @comments = "denied"
31
+ @rate = "denied"
32
+ @commentVote = "denied"
33
+ @videoRespond = "denied"
34
+ @embed = "denied"
35
+ @syndicate = "denied"
36
+ @private = true
37
+ end
38
+
39
+ def to_hash
40
+ self.instance_variables.inject({}) { |hash,var| hash[var.to_s.delete("@").to_sym] = self.instance_variable_get(var); hash }
42
41
  end
43
- if AWS::S3::S3Object.store(self.filename, self.file_object, @@y[(Rails.env)]["bucket"], :access => :public_read)
42
+
43
+ def to_upload_options_hash
44
+ self.instance_variables.inject({}) { |hash,var| (hash[var.to_s.delete("@").to_sym] = self.instance_variable_get(var) unless (["filename", "file_object"].include?(var.to_s.delete("@")))); hash }
45
+ end
46
+
47
+ def upload
48
+ resp = @@y_conn.video_upload(self.file_object, self.to_upload_options_hash
49
+ )
50
+ puts "Response: #{resp.inspect}"
51
+ puts "***"
52
+ puts "ID: #{resp.video_id.split(":").last}"
44
53
  return true
45
- else
46
- return false
54
+ end
55
+
56
+ def save
57
+ begin
58
+ AWS::S3::S3Object.store(self.filename, self.file_object, @@s3_creds[(Rails.env)]["bucket"], :access => :public_read)
59
+ begin
60
+ self.upload
61
+ return true
62
+ rescue Exception => e
63
+ puts "Upload Failed. #{e.message}"
64
+ end
65
+ rescue Exception => e
66
+ puts "Could not complete save. #{e.message}"
67
+ return false
68
+ end
47
69
  end
48
70
  end
49
71
  end
@@ -3,44 +3,16 @@ require 'logger'
3
3
  version
4
4
  daemon
5
5
  y_video
6
- mail_rain/mail_handler
7
- mail_rain/inbox
6
+ mail_handler
7
+ inbox
8
+ ftp
9
+ ftp_worker
8
10
  ).each{|m| require File.dirname(__FILE__) + '/chocolate_rain/' + m }
9
11
 
10
- class ChocolateRain
11
-
12
- # Base error class for the extension
13
- class Error < RuntimeError
14
- end
15
-
16
- # URL-escape a string. Stolen from Camping (wonder how many Ruby libs in the wild can say the same)
17
- def self.esc(s) #:nodoc:
18
- s.to_s.gsub(/[^ \w.-]+/n){'%'+($&.unpack('H2'*$&.size)*'%').upcase}.tr(' ', '+')
19
- end
20
-
21
- # Set the logger for the library
22
- def self.logger=(any_logger)
23
- @logger = any_logger
24
- end
25
-
26
- # Get the logger for the library (by default will log to STDOUT). TODO: this is where we grab the Rails logger too
27
- def self.logger
28
- @logger ||= create_default_logger
29
- end
30
-
31
- # Gets mixed into the classes to provide the logger method
32
- module Logging #:nodoc:
33
-
34
- # Return the base logger set for the library
35
- def logger
36
- YouTubeIt.logger
37
- end
38
- end
39
-
40
- private
41
- def self.create_default_logger
42
- logger = Logger.new(STDOUT)
43
- logger.level = Logger::DEBUG
44
- logger
45
- end
12
+ module ChocolateRain
13
+ puts "Starting MailFetcher"
14
+ MailFetcher.start
15
+ puts "Starting FtpMachine"
16
+ FtpMachine.start
17
+ puts "All started"
46
18
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chocolate_rain
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -13,7 +13,7 @@ date: 2011-11-23 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: youtube_it
16
- requirement: &2152231740 !ruby/object:Gem::Requirement
16
+ requirement: &2156678920 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,7 +21,7 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *2152231740
24
+ version_requirements: *2156678920
25
25
  description: Monitor E-Mail and FTP for videos to upload to YouTube
26
26
  email:
27
27
  - kevin@wearefound.com
@@ -35,9 +35,10 @@ files:
35
35
  - chocolate_rain.gemspec
36
36
  - lib/chocolate_rain.rb
37
37
  - lib/chocolate_rain/daemon.rb
38
- - lib/chocolate_rain/ftp_files_and_upload.rb
39
- - lib/chocolate_rain/mail_rain/inbox.rb
40
- - lib/chocolate_rain/mail_rain/mail_handler.rb
38
+ - lib/chocolate_rain/ftp.rb
39
+ - lib/chocolate_rain/ftp_worker.rb
40
+ - lib/chocolate_rain/inbox.rb
41
+ - lib/chocolate_rain/mail_handler.rb
41
42
  - lib/chocolate_rain/version.rb
42
43
  - lib/chocolate_rain/y_video.rb
43
44
  homepage: ''
@@ -1,54 +0,0 @@
1
- require 'net/ftp'
2
- require 'fileutils'
3
- require 'youtube_it'
4
-
5
- module YouTuber
6
- # Youtube Creds
7
- def upload(f)
8
- YT_CLIENT ||= YouTubeIt::Client.new(:username => "whyhermancain" , :password => "999m3@nsj0bs" , :dev_key => "AI39si79BSRx1X9AtG5zNxo-wk5YGiIHa-FAt5BNvb2poO7AVdNJEYoCgxg-JilsgHbNr0IUFk8j490v_LOZ8iPKueOUea6DdQ")
9
-
10
- YT_CLIENT.video_upload(File.open("#{Rails.root.to_s}/public/videos/#{f}"), :title => "#{f}", :description => "Testimonial Video", :category => "Entertainment", :keywords => %w[herman cain whyhermancain republican politics testimonal donate donation], :list => "denied", :comments => "denied", :rate => "denied", :commentVote => "denied", :videoRespond => "denied", :embed => "denied", :syndicate => "denied")
11
- puts "completed #{f}"
12
- end
13
- end
14
-
15
- # FTP creds
16
- URL = "fx0j7sls.rtmphost.com"
17
- USERNAME = "fx0j7sls"
18
- PASSWORD = "oi890_{PO"
19
- DIRECTORY = "/fx0j7sls_apps/VideoGallery/streams/_definst_"
20
- FORMAT = "flv"
21
-
22
- @local_files = []
23
-
24
- ftp = Net::FTP.new
25
- ftp.connect(URL, 21)
26
- ftp.login(USERNAME, PASSWORD)
27
-
28
-
29
- ftp.chdir(DIRECTORY)
30
- filenames = ftp.nlst("*.#{FORMAT}") # comes back as array
31
-
32
- # loop by index
33
- filenames.each_index do |i|
34
- puts "working with index: #{i}"
35
- localfile = "#{Rails.root.to_s}/public/videos/#{i}.#{FORMAT}"
36
- ftp.getbinaryfile(filenames[i], localfile)
37
- puts "got #{i}.#{FORMAT}"
38
- @local_files << "#{i}.#{FORMAT}"
39
- puts "*** \n"
40
- end
41
-
42
- filenames.each do |filename|
43
- puts "Deleting #{filename}"
44
- ftp.delete("#{filename}") # deleting from server so we don't re-download
45
- puts "complete.\n***\n"
46
- end
47
-
48
- puts "Starting upload stack\n...\n......"
49
- @local_files.each do |f|
50
- YT_CLIENT.video_upload(File.open("#{Rails.root.to_s}/public/videos/#{f}"), :title => "#{f}", :description => "Testimonial Video", :category => "Entertainment", :keywords => %w[herman cain whyhermancain republican politics testimonal donate donation], :list => "denied", :comments => "denied", :rate => "denied", :commentVote => "denied", :videoRespond => "denied", :embed => "denied", :syndicate => "denied")
51
- puts "completed #{f}"
52
- end
53
-
54
- puts "...el fine..."
@@ -1,39 +0,0 @@
1
- require 'net/pop'
2
- require 'mail'
3
- require 'daemon'
4
- require 'y_video'
5
- require 'mail_handler'
6
-
7
- class MailFetcher < Daemon::Base
8
- def self.start
9
- loop do
10
- puts "Running Mail Importer..."
11
- pop = Net::POP3.new('mail.hasflavor.com')
12
-
13
- pop.start("app@hasflavor.com", "oi890po")
14
-
15
- if pop.mails.empty?
16
- puts "NO MAIL"
17
- else
18
- i = 0
19
- puts "receiving mail..."
20
- pop.each_mail do |m|
21
- MailHandler.receive(m.pop)
22
- m.delete
23
- i += 1
24
- end
25
- puts "#{pop.mails.size} mails popped"
26
- end
27
- pop.finish
28
- puts "Finished Mail Importer."
29
-
30
- sleep(10)
31
- end
32
- end
33
-
34
- def self.stop
35
- puts "Stopping Mail Fetcher Daemon"
36
- end
37
- end
38
-
39
- MailFetcher.start
@@ -1,53 +0,0 @@
1
- require 'mail'
2
- require 'stringio'
3
- require 'y_video'
4
-
5
- class MailHandler < ActionMailer::Base
6
- def resend(sender, recipient, subject, body)
7
- mail(:from => sender,
8
- :to => recipient,
9
- :subject => subject,
10
- :body => body)
11
- puts "Mail sent to #{recipient}"
12
- end
13
-
14
- def receive(email)
15
- to_email = "apx05eq15zgx@m.youtube.com"
16
- resend_multipart(email)
17
- end
18
-
19
- def resend_multipart(email)
20
- email.attachments.each do |att|
21
- fn = att.filename
22
- v = YVideo.new()
23
- begin
24
- f = StringIO.new(att.body.decoded)
25
- v.filename = fn
26
- v.file_object = f
27
- v.title = fn
28
- begin
29
- v.save
30
- puts "Saving to S3 succeeded"
31
- rescue Exception => e
32
- puts "S3 Failed miserably: #{e.message}"
33
- end
34
- rescue Exception => e
35
- puts "Unable to save data for #{fn} because of #{e.message}"
36
- end
37
- end
38
-
39
- text_body = email.parts.select{|p| p.content_type.include? "text/plain" }.first.body.to_s
40
- puts "Email subject: #{email.subject}"
41
- begin
42
- resent = MailHandler.resend(["whyhermancain@gmail.com"], ["support@wearefound.com"], "[CAIN] Successful Upload", "A new testimonial video has been uploaded via email to s3. Its url is http://s3.amazonaws.com/whyHermanCain/#{v.filename}")
43
- resent.deliver
44
- puts "sent"
45
- rescue
46
- return
47
- end
48
- end
49
-
50
- def upload(f)
51
- puts "completed #{f}"
52
- end
53
- end