etvnet_seek 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGES CHANGED
@@ -4,3 +4,7 @@
4
4
  == Version 0.1.0
5
5
 
6
6
  * Initial release.
7
+
8
+ == Version 0.2.0
9
+
10
+ * Bug fixes, code for Windows
data/bin/etvnet_seek CHANGED
@@ -1,30 +1,26 @@
1
1
  #!/usr/bin/env ruby
2
+ # encoding: utf-8
2
3
 
3
4
  require 'rubygems' unless RUBY_VERSION =~ /1.9.*/
4
5
 
5
6
  $:.unshift(File::join(File::dirname(File::dirname(__FILE__)), "lib"))
6
7
 
7
- require 'etvnet_seek'
8
+ $KCODE='u'
8
9
 
9
- client = EtvnetSeek.new
10
+ require 'main'
10
11
 
11
- items = client.search ARGV.join(' ')
12
+ client = Main.new
12
13
 
13
- client.display_search_items items
14
+ movie_link = client.search_and_grab_link ARGV.join(' ')
14
15
 
15
- title_number = ask("Select title : ")
16
+ if movie_link
17
+ puts "Link: #{movie_link}"
18
+
19
+ if RUBY_PLATFORM =~ /(win|w)32$/
20
+ `wmplayer #{movie_link}`
21
+ elsif RUBY_PLATFORM =~ /darwin/
22
+ `open #{movie_link}`
23
+ end
16
24
 
17
- dot_index = title_number.index('.')
18
-
19
- if not dot_index.nil?
20
- pos1 = title_number[0..dot_index-1].to_i
21
- pos2 = title_number[dot_index+1..-1].to_i
22
-
23
- movie_link = client.grab_movie_link items[pos1-1][:container][pos2-1][:link]
24
- else
25
- movie_link = client.grab_movie_link items[title_number.to_i-1][:link]
26
25
  end
27
26
 
28
- puts "Link: #{movie_link}"
29
-
30
- `open #{movie_link}`
data/etvnet_seek.gemspec CHANGED
@@ -4,7 +4,7 @@ require "rake"
4
4
 
5
5
  Gem::Specification.new do |s|
6
6
  s.name = %q{etvnet_seek}
7
- s.version = "0.1.0"
7
+ s.version = "0.2.0"
8
8
 
9
9
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
10
10
 
data/lib/cookie_helper.rb CHANGED
@@ -7,7 +7,7 @@ module CookieHelper
7
7
  conn = Net::HTTP.new(uri.host, uri.port)
8
8
 
9
9
  headers = { "Content-Type" => "application/x-www-form-urlencoded" }
10
- resp, data = conn.post("/cgi-bin/video/login.fcgi",
10
+ resp, data = conn.post(uri.path,
11
11
  "action=login&username=#{username}&pwd=#{password}&skip_notice=&redirect=", headers)
12
12
 
13
13
  cookie = resp.response['set-cookie']
data/lib/main.rb ADDED
@@ -0,0 +1,94 @@
1
+ require 'rubygems' unless RUBY_VERSION =~ /1.9.*/
2
+
3
+ #require "readline"
4
+ require "highline/import"
5
+
6
+ require 'cookie_helper'
7
+ require 'url_seeker'
8
+
9
+ class Main
10
+ include CookieHelper
11
+
12
+ BASE_URL = "http://www.etvnet.ca"
13
+ SEARCH_URL = BASE_URL + "/cgi-bin/video/eitv_browse.fcgi?action=search"
14
+ ACCESS_URL = BASE_URL + "/cgi-bin/video/access.fcgi"
15
+ LOGIN_URL = BASE_URL + "/cgi-bin/video/login.fcgi"
16
+
17
+ attr_reader :cookie
18
+
19
+ def initialize
20
+ @cookie = get_cookie
21
+ end
22
+
23
+ def self.search_url keywords, order_direction='-'
24
+ SEARCH_URL + "&keywords=#{CGI.escape(keywords)}&order_direction=#{order_direction}"
25
+ end
26
+
27
+ def search_and_grab_link keywords
28
+ if(keywords.strip.size == 0)
29
+ while keywords.strip.size == 0
30
+ keywords = ask("Keywords: ")
31
+ end
32
+ end
33
+
34
+ url_seeker = UrlSeeker.new
35
+
36
+ items = url_seeker.search Main.search_url(keywords)
37
+
38
+ if items.size == 0
39
+ say "Empty search result."
40
+ link = nil
41
+ else
42
+ url_seeker.display_results items
43
+
44
+ title_number = ask("Select title number: ")
45
+ while not title_number =~ /(\d+)(\.?)(\d*)/
46
+ title_number = ask("Select title number: ")
47
+ end
48
+
49
+ dot_index = title_number.index('.')
50
+
51
+ if not dot_index.nil?
52
+ pos1 = title_number[0..dot_index-1].to_i
53
+ pos2 = title_number[dot_index+1..-1].to_i
54
+
55
+ link = url_seeker.grab_movie_link items[pos1-1][:container][pos2-1][:link], cookie, ACCESS_URL
56
+ else
57
+ link = url_seeker.grab_movie_link items[title_number.to_i-1][:link], cookie, ACCESS_URL
58
+ end
59
+ end
60
+
61
+ link
62
+ end
63
+
64
+ private
65
+
66
+ def get_cookie
67
+ file_name = ENV['HOME'] + "/.etvnet-seek"
68
+
69
+ if File.exist? file_name
70
+ cookie = read_user_file file_name
71
+ else
72
+ username = ask("Enter username : " )
73
+ password = ask("Enter password : " ) { |q| q.echo = '*' }
74
+
75
+ cookie = retrieve_cookie LOGIN_URL, username, password
76
+
77
+ write_user_file file_name, cookie
78
+ end
79
+
80
+ cookie
81
+ end
82
+
83
+ def read_user_file file_name
84
+ File.open(file_name, 'r') do |file|
85
+ return file.gets
86
+ end
87
+ end
88
+
89
+ def write_user_file file_name, cookie
90
+ File.open(file_name, 'w') do |file|
91
+ file.puts cookie
92
+ end
93
+ end
94
+ end
data/lib/runglish.rb ADDED
@@ -0,0 +1,44 @@
1
+ # Converts file names in directory recursively from Russian to Runglish.
2
+ #
3
+ # Runglish stands for Russian text in Latin letters.
4
+
5
+ class Runglish
6
+ RUSSIAN_TABLE = [
7
+ '\u0430', '\u0431', '\u0432', '\u0433', '\u0434', '\u0435', '\u0436', '\u0437',
8
+ '\u0438', '\u0439', '\u043a', '\u043b', '\u043c', '\u043d', '\u043e', '\u043f',
9
+ '\u0440', '\u0441', '\u0442', '\u0443', '\u0444', '\u0445', '\u0446', '\u0447',
10
+ '\u0448', '\u0449', '\u044a', '\u044b', '\u044c', '\u044d', '\u044e', '\u044f',
11
+ '\u0451',
12
+ '\u0401',
13
+ '\u0410', '\u0411', '\u0412', '\u0413', '\u0414', '\u0415', '\u0416', '\u0417',
14
+ '\u0418', '\u0419', '\u041a', '\u041b', '\u041c', '\u041d', '\u041e', '\u041f',
15
+ '\u0420', '\u0421', '\u0422', '\u0423', '\u0424', '\u0425', '\u0426', '\u0427',
16
+ '\u0428', '\u0429', '\u042a', '\u042b', '\u042c', '\u042d', '\u042e', '\u042f'
17
+ ]
18
+
19
+
20
+ ENGLISH_TABLE = [
21
+ "a", "b", "v", "g", "d", "e", "zh", "z", "i", "y", "k", "l", "m", "n", "o", "p", "r",
22
+ "s", "t", "u", "f", "h", "c", "ch", "sh", "s'h", "''", "yi", "'", "ye", "yu", "ya",
23
+ "yo",
24
+ "YO",
25
+ "A", "B", "V", "G", "D", "E", "Zh", "Z", "I", "Y", "K", "L", "M", "N", "O", "P", "R",
26
+ "S", "T", "U", "F", "H", "C", "Ch", "Sh", "S'h", "''", "Yi", "'", "Ye", "Yu", "Ya"
27
+ ]
28
+
29
+ ENGLISH_RUSSIAN_MAP = Hash[*ENGLISH_TABLE.zip(RUSSIAN_TABLE).flatten]
30
+
31
+ def translate(old_text)
32
+ new_text = ""
33
+
34
+ old_text.each_char do |ch|
35
+ new_ch = ENGLISH_RUSSIAN_MAP[ch].nil? ? ch : ENGLISH_RUSSIAN_MAP[ch]
36
+
37
+ new_text += new_ch
38
+ end
39
+
40
+ new_text
41
+ end
42
+ end
43
+
44
+
@@ -1,31 +1,11 @@
1
- require 'rubygems' unless RUBY_VERSION =~ /1.9.*/
2
-
3
1
  require 'nokogiri'
4
2
  require 'open-uri'
5
- #require "readline"
6
- require "highline/import"
7
3
  require 'cgi'
8
4
  require 'json'
9
5
 
10
- require 'cookie_helper'
11
-
12
- class EtvnetSeek
13
- include CookieHelper
14
-
15
- BASE_URL = "http://www.etvnet.ca"
16
- SEARCH_URL = BASE_URL + "/cgi-bin/video/eitv_browse.fcgi?action=search"
17
- ACCESS_URL = BASE_URL + "/cgi-bin/video/access.fcgi"
18
- LOGIN_URL = BASE_URL + "/cgi-bin/video/login.fcgi"
19
-
20
- def cookie
21
- @cookie ||= get_cookie
22
- end
23
-
24
- def search keywords, order_direction = '-'
25
- search_items SEARCH_URL + "&keywords=#{CGI.escape(keywords)}&order_direction=#{order_direction}"
26
- end
6
+ class UrlSeeker
27
7
 
28
- def search_items url
8
+ def search url
29
9
  doc = Nokogiri::HTML(open(url))
30
10
 
31
11
  list = []
@@ -48,7 +28,7 @@ class EtvnetSeek
48
28
  }
49
29
 
50
30
  if href =~ /action=browse_container/
51
- record[:container] = search_items(href)
31
+ record[:container] = search(href)
52
32
  else
53
33
  result = href.match(/(\w*)\/(\w*)\/(\w*)\/([\w|-]*)/)
54
34
 
@@ -65,7 +45,7 @@ class EtvnetSeek
65
45
  list
66
46
  end
67
47
 
68
- def display_search_items items
48
+ def display_results items
69
49
  items.each_with_index do |item1, index1|
70
50
 
71
51
  if item1[:container].nil?
@@ -80,49 +60,20 @@ class EtvnetSeek
80
60
  end
81
61
  end
82
62
 
83
- def grab_movie_link link
63
+ def grab_movie_link link, cookie, url
84
64
  result = link.match(/(\w*)\/(\w*)\/(\w*)\/([\w|-]*)/)
85
65
 
86
66
  media_file = (not result.nil? and result.size > 2) ? result[3] : ""
87
67
 
88
- media_info = request_media_info media_file, cookie
68
+ media_info = request_media_info media_file, cookie, url
89
69
 
90
70
  mms_link(media_info)
91
71
  end
92
72
 
93
73
  private
94
74
 
95
- def get_cookie
96
- file_name = ENV['HOME'] + "/.etvnet-seek"
97
-
98
- if File.exist? file_name
99
- cookie = read_user_file file_name
100
- else
101
- username = ask("Enter username : " )
102
- password = ask("Enter password : " ) { |q| q.echo = '*' }
103
-
104
- cookie = retrieve_cookie LOGIN_URL, username, password
105
-
106
- write_user_file file_name, cookie
107
- end
108
-
109
- cookie
110
- end
111
-
112
- def read_user_file file_name
113
- File.open(file_name, 'r') do |file|
114
- return file.gets
115
- end
116
- end
117
-
118
- def write_user_file file_name, cookie
119
- File.open(file_name, 'w') do |file|
120
- file.puts cookie
121
- end
122
- end
123
-
124
- def request_media_info media_file, cookie
125
- url = URI.parse(ACCESS_URL)
75
+ def request_media_info media_file, cookie, url
76
+ url = URI.parse(url)
126
77
  conn = Net::HTTP.new(url.host, url.port)
127
78
 
128
79
  headers = { 'Cookie' => cookie }
@@ -4,20 +4,30 @@ require 'rubygems' unless RUBY_VERSION =~ /1.9.*/
4
4
 
5
5
  #require 'spec'
6
6
 
7
- require 'etvnet_seek'
7
+ require 'main'
8
+ require 'url_seeker'
9
+ require 'runglish'
8
10
 
9
- describe EtvnetSeek do
11
+ describe UrlSeeker do
10
12
 
11
13
  before :each do
12
- @client = EtvnetSeek.new
14
+ @client = UrlSeeker.new
13
15
  end
14
16
 
15
17
  it "should return search menu items" do
16
18
  keywords = "красная шапочка"
17
19
 
18
- @client.search(keywords).size.should > 0
19
- items = @client.search(keywords)
20
- @client.display_search_items items
20
+ #@client.search(keywords).size.should > 0
21
+
22
+ items = @client.search(Main.search_url(keywords))
23
+ @client.display_results items
21
24
  end
22
25
 
23
26
  end
27
+
28
+ describe Runglish do
29
+ it "should return translation" do
30
+ Runglish.new.translate("kak dela?").size.should > 0
31
+ p Runglish.new.translate("kak dela?")
32
+ end
33
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: etvnet_seek
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Shvets
@@ -74,7 +74,9 @@ files:
74
74
  - bin/etvnet_seek
75
75
  - bin/etvnet_seek.bat
76
76
  - lib/cookie_helper.rb
77
- - lib/etvnet_seek.rb
77
+ - lib/main.rb
78
+ - lib/runglish.rb
79
+ - lib/url_seeker.rb
78
80
  - spec/etvnet_seek_spec.rb
79
81
  - spec/spec.opts
80
82
  - CHANGES