fb_video_url_converter 0.2.9 → 0.3.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.
- data/CHANGELOG.rdoc +3 -0
- data/Rakefile +1 -1
- data/fb_video_url_converter.gemspec +3 -3
- data/lib/facebook_bot.rb +33 -46
- data/spec/spec_helper.rb +2 -2
- metadata +9 -9
data/CHANGELOG.rdoc
CHANGED
data/Rakefile
CHANGED
|
@@ -3,7 +3,7 @@ require 'rubygems'
|
|
|
3
3
|
require 'rake'
|
|
4
4
|
require 'echoe'
|
|
5
5
|
|
|
6
|
-
Echoe.new('fb_video_url_converter', '0.
|
|
6
|
+
Echoe.new('fb_video_url_converter', '0.3.0') do |p|
|
|
7
7
|
p.description = "Facebook Video URL Converter is intended as an easy alternative to changing video hosting from Facebook to a different one."
|
|
8
8
|
p.url = "https://github.com/mensfeld/FB-Video-URL-Converter"
|
|
9
9
|
p.author = "Maciej Mensfeld"
|
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
Gem::Specification.new do |s|
|
|
4
4
|
s.name = "fb_video_url_converter"
|
|
5
|
-
s.version = "0.
|
|
5
|
+
s.version = "0.3.0"
|
|
6
6
|
|
|
7
7
|
s.required_rubygems_version = Gem::Requirement.new(">= 1.2") if s.respond_to? :required_rubygems_version=
|
|
8
8
|
s.authors = ["Maciej Mensfeld"]
|
|
9
|
-
s.date = "2012-
|
|
9
|
+
s.date = "2012-12-22"
|
|
10
10
|
s.description = "Facebook Video URL Converter is intended as an easy alternative to changing video hosting from Facebook to a different one."
|
|
11
11
|
s.email = "maciej@mensfeld.pl"
|
|
12
12
|
s.extra_rdoc_files = ["CHANGELOG.rdoc", "README.md", "lib/facebook_bot.rb", "lib/facebook_video.rb", "lib/fb_video_url_converter.rb", "lib/generators/fb_video_url_converter/install_generator.rb", "lib/generators/fb_video_url_converter/templates/create_facebook_videos_migration.rb", "lib/generators/fb_video_url_converter/templates/facebook_video_converter_init.rb"]
|
|
@@ -15,7 +15,7 @@ Gem::Specification.new do |s|
|
|
|
15
15
|
s.rdoc_options = ["--line-numbers", "--inline-source", "--title", "Fb_video_url_converter", "--main", "README.md"]
|
|
16
16
|
s.require_paths = ["lib"]
|
|
17
17
|
s.rubyforge_project = "fb_video_url_converter"
|
|
18
|
-
s.rubygems_version = "1.8.
|
|
18
|
+
s.rubygems_version = "1.8.10"
|
|
19
19
|
s.summary = "Facebook Video URL Converter is intended as an easy alternative to changing video hosting from Facebook to a different one."
|
|
20
20
|
|
|
21
21
|
if s.respond_to? :specification_version then
|
data/lib/facebook_bot.rb
CHANGED
|
@@ -6,6 +6,7 @@ require 'mechanize'
|
|
|
6
6
|
require 'uri'
|
|
7
7
|
require 'cgi'
|
|
8
8
|
require 'time'
|
|
9
|
+
require 'json'
|
|
9
10
|
|
|
10
11
|
class Mechanize::Page
|
|
11
12
|
def form_id(formId)
|
|
@@ -35,51 +36,13 @@ class FacebookBot
|
|
|
35
36
|
@video_page = nil
|
|
36
37
|
@agent = Mechanize.new
|
|
37
38
|
@agent.user_agent_alias = USER_AGENT
|
|
38
|
-
|
|
39
|
-
begin
|
|
40
|
-
@@root = File.join(Rails.root, 'tmp')
|
|
41
|
-
rescue
|
|
42
|
-
raise CookiePathNotInitialized, 'Specify cookie_path' if self.class.cookie_path.nil?
|
|
43
|
-
@@root = self.class.cookie_path
|
|
44
|
-
end
|
|
45
|
-
|
|
46
|
-
@cookies = File.join(@@root, "cookie_#{self.class.email}.yml")
|
|
47
|
-
|
|
48
|
-
begin
|
|
49
|
-
@agent.cookie_jar.load(@cookies)
|
|
50
|
-
rescue
|
|
51
|
-
end if (File.file?(@cookies) && File.size(@cookies) > 10)
|
|
52
|
-
|
|
53
|
-
self.login
|
|
54
|
-
end
|
|
55
|
-
|
|
56
|
-
def login
|
|
57
|
-
page = @agent.get(FB_URL)
|
|
58
|
-
|
|
59
|
-
if (loginf = page.form_with(:id => "login_form"))
|
|
60
|
-
loginf.set_fields(:email => self.class.email, :pass => self.class.password)
|
|
61
|
-
|
|
62
|
-
page = @agent.submit(loginf, loginf.buttons.first)
|
|
63
|
-
end
|
|
64
|
-
|
|
65
|
-
@agent.cookie_jar.save_as(@cookies)
|
|
66
|
-
|
|
67
|
-
body = page.root.to_html
|
|
68
|
-
@post_form_id = %r{<input type="hidden" .* name="post_form_id" value="([^"]+)}.match(body)[1]
|
|
69
|
-
if body.include?('Incorrect Email')
|
|
70
|
-
raise self.class::LoginFailed, 'Incorrect login/password or cookie corrupted'
|
|
71
|
-
end
|
|
72
|
-
rescue
|
|
73
|
-
@agent.cookie_jar.clear!
|
|
74
|
-
@agent.cookie_jar.save_as(@cookies)
|
|
75
|
-
raise self.class::LoginFailed, 'Incorrect login/password or cookie corrupted'
|
|
76
39
|
end
|
|
77
40
|
|
|
78
41
|
def video_url(id)
|
|
79
42
|
load_video_page(id)
|
|
80
43
|
get_url(@video_page)
|
|
81
|
-
rescue
|
|
82
|
-
|
|
44
|
+
#rescue
|
|
45
|
+
# VIDEO_ERROR
|
|
83
46
|
end
|
|
84
47
|
|
|
85
48
|
def video_name(id)
|
|
@@ -96,21 +59,45 @@ class FacebookBot
|
|
|
96
59
|
end
|
|
97
60
|
end
|
|
98
61
|
|
|
99
|
-
def get_url(
|
|
62
|
+
def get_url(page)
|
|
63
|
+
url ||= extract_url_hd(page)
|
|
64
|
+
url ||= extract_url_sd(page)
|
|
65
|
+
url ||= extract_url_old(page)
|
|
66
|
+
url.nil? ? raise(RuntimeError) : url
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def get_name(site)
|
|
70
|
+
name = site.scan(/title>(.+)<\/title>/ix).first
|
|
71
|
+
name ? name.first : VIDEO_ERROR
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def extract_url_old(url)
|
|
100
75
|
url = url.scan(/\[\"highqual_src\",\"(.+)\"\]/ix).first
|
|
101
76
|
url = url.first
|
|
102
|
-
url = url.
|
|
77
|
+
url = url.gsub('\u00253A', ':')
|
|
103
78
|
url = url.gsub('\u00252F', '/')
|
|
104
79
|
url = url.gsub('\u00253F', '?')
|
|
105
80
|
url = url.gsub('\u00253D', '=')
|
|
106
81
|
url = url.gsub('\u002526', '&')
|
|
82
|
+
url = url.gsub('\u00255C', '\\')
|
|
107
83
|
url = "http://#{url.split('http://')[1]}".split('"').first
|
|
108
84
|
CGI.unescapeHTML(url)
|
|
109
|
-
|
|
85
|
+
rescue
|
|
86
|
+
nil
|
|
87
|
+
end
|
|
110
88
|
|
|
111
|
-
def
|
|
112
|
-
|
|
113
|
-
|
|
89
|
+
def extract_url_hd(page)
|
|
90
|
+
url = page.scan(/hd_src.*(http.*?)(\\u002522)/ix).last.first
|
|
91
|
+
URI.decode(JSON('["'+url+'"]').first).gsub('\\', '')
|
|
92
|
+
#rescue
|
|
93
|
+
# nil
|
|
94
|
+
end
|
|
95
|
+
|
|
96
|
+
def extract_url_sd(page)
|
|
97
|
+
url = page.scan(/sd_src.*(http.*?)(\\u002522)/ix).last.first
|
|
98
|
+
URI.decode(JSON('["'+url+'"]').first).gsub('\\', '')
|
|
99
|
+
rescue
|
|
100
|
+
nil
|
|
114
101
|
end
|
|
115
102
|
|
|
116
103
|
end
|
data/spec/spec_helper.rb
CHANGED
|
@@ -23,8 +23,8 @@ require 'fb_video_url_converter'
|
|
|
23
23
|
require 'active_record'
|
|
24
24
|
require 'fileutils'
|
|
25
25
|
|
|
26
|
-
FacebookBot.email = '
|
|
27
|
-
FacebookBot.password = '
|
|
26
|
+
FacebookBot.email = 'email'
|
|
27
|
+
FacebookBot.password = 'password'
|
|
28
28
|
FacebookBot.cookie_path = File.join(File.expand_path(File.dirname(__FILE__)), '..', 'lib')
|
|
29
29
|
FacebookVideo.cache = 60*10
|
|
30
30
|
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: fb_video_url_converter
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.3.0
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -9,11 +9,11 @@ authors:
|
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2012-
|
|
12
|
+
date: 2012-12-22 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: activerecord
|
|
16
|
-
requirement: &
|
|
16
|
+
requirement: &15952360 !ruby/object:Gem::Requirement
|
|
17
17
|
none: false
|
|
18
18
|
requirements:
|
|
19
19
|
- - ! '>='
|
|
@@ -21,10 +21,10 @@ dependencies:
|
|
|
21
21
|
version: '0'
|
|
22
22
|
type: :runtime
|
|
23
23
|
prerelease: false
|
|
24
|
-
version_requirements: *
|
|
24
|
+
version_requirements: *15952360
|
|
25
25
|
- !ruby/object:Gem::Dependency
|
|
26
26
|
name: mechanize
|
|
27
|
-
requirement: &
|
|
27
|
+
requirement: &15951100 !ruby/object:Gem::Requirement
|
|
28
28
|
none: false
|
|
29
29
|
requirements:
|
|
30
30
|
- - ! '>='
|
|
@@ -32,10 +32,10 @@ dependencies:
|
|
|
32
32
|
version: '0'
|
|
33
33
|
type: :runtime
|
|
34
34
|
prerelease: false
|
|
35
|
-
version_requirements: *
|
|
35
|
+
version_requirements: *15951100
|
|
36
36
|
- !ruby/object:Gem::Dependency
|
|
37
37
|
name: rspec
|
|
38
|
-
requirement: &
|
|
38
|
+
requirement: &15950400 !ruby/object:Gem::Requirement
|
|
39
39
|
none: false
|
|
40
40
|
requirements:
|
|
41
41
|
- - ! '>='
|
|
@@ -43,7 +43,7 @@ dependencies:
|
|
|
43
43
|
version: 2.0.0
|
|
44
44
|
type: :development
|
|
45
45
|
prerelease: false
|
|
46
|
-
version_requirements: *
|
|
46
|
+
version_requirements: *15950400
|
|
47
47
|
description: Facebook Video URL Converter is intended as an easy alternative to changing
|
|
48
48
|
video hosting from Facebook to a different one.
|
|
49
49
|
email: maciej@mensfeld.pl
|
|
@@ -102,7 +102,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
102
102
|
version: '1.2'
|
|
103
103
|
requirements: []
|
|
104
104
|
rubyforge_project: fb_video_url_converter
|
|
105
|
-
rubygems_version: 1.8.
|
|
105
|
+
rubygems_version: 1.8.10
|
|
106
106
|
signing_key:
|
|
107
107
|
specification_version: 3
|
|
108
108
|
summary: Facebook Video URL Converter is intended as an easy alternative to changing
|