link_preview_generator 1.0.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/lib/link_preview_generator.rb +86 -0
- metadata +59 -0
@@ -0,0 +1,86 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'nokogiri'
|
3
|
+
|
4
|
+
class LinkPreviewGenerator
|
5
|
+
|
6
|
+
|
7
|
+
def self.get_preview_elements(url)
|
8
|
+
link_elements = nil
|
9
|
+
|
10
|
+
# generate a html get request to the link
|
11
|
+
begin
|
12
|
+
html_body = self.html_get_req(url)
|
13
|
+
rescue Exception => e
|
14
|
+
puts "ERROR getting link preview : "+e.message
|
15
|
+
return nil
|
16
|
+
end
|
17
|
+
|
18
|
+
#parse the html body and retrieve the preiview elements
|
19
|
+
if html_body != nil
|
20
|
+
link_elements = self.get_html_elements(html_body)
|
21
|
+
return link_elements
|
22
|
+
else
|
23
|
+
return nil
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.html_get_req(url)
|
29
|
+
|
30
|
+
ishttps = false
|
31
|
+
host = 80
|
32
|
+
|
33
|
+
# if the link does not containt http or https then add
|
34
|
+
if (/^https:\/\//.match(url))
|
35
|
+
host = 443
|
36
|
+
ishttps = true
|
37
|
+
elsif (/^http:\/\//.match(url))
|
38
|
+
# do nothing
|
39
|
+
else
|
40
|
+
url = "http://"+url
|
41
|
+
end
|
42
|
+
|
43
|
+
uri = URI.parse(url);
|
44
|
+
http = Net::HTTP.new(uri.host, host)
|
45
|
+
|
46
|
+
#if https link enable ssl
|
47
|
+
if ishttps
|
48
|
+
http.use_ssl = true
|
49
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
50
|
+
end
|
51
|
+
|
52
|
+
#Http request
|
53
|
+
request = Net::HTTP::Get.new(uri.request_uri)
|
54
|
+
response = http.request(request)
|
55
|
+
|
56
|
+
if response.code == "200"
|
57
|
+
return response.body
|
58
|
+
else
|
59
|
+
return nil
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
def self.get_html_elements(html)
|
65
|
+
elements = {}
|
66
|
+
#parse the html
|
67
|
+
resp = Nokogiri::HTML(html)
|
68
|
+
#fetch title
|
69
|
+
elements[:title] = !(resp.css("meta [property='og:title']").empty?) ? resp.css("meta [property='og:title']")[0]["content"] : (!(resp.css("title").empty?) ? resp.css("title")[0].children[0].content : "" )
|
70
|
+
|
71
|
+
#fetch description
|
72
|
+
elements[:description] = !(resp.css("meta [property='og:description']").empty?) ? resp.css("meta [property='og:description']")[0]["content"] : ""
|
73
|
+
|
74
|
+
#fetch image
|
75
|
+
elements[:image_url] = !(resp.css("meta [property='og:image']").empty?) ? resp.css("meta [property='og:image']")[0]["content"] : ""
|
76
|
+
|
77
|
+
#fetch type
|
78
|
+
elements[:link_type] = !(resp.css("meta [property='og:type']").empty?) ? resp.css("meta [property='og:type']")[0]["content"] : ""
|
79
|
+
|
80
|
+
#if type is video feth the video link
|
81
|
+
elements[:video_url] = (elements[:link_type] == "video") ? resp.css("meta [property='og:url']")[0]["content"] : ""
|
82
|
+
|
83
|
+
return elements
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
metadata
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: link_preview_generator
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- Dalvir Suri
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2014-03-08 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: nokogiri
|
16
|
+
requirement: &20595780 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ~>
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 1.6.1
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *20595780
|
25
|
+
description: Instantly get preview elements for a link
|
26
|
+
email: dalvir30@gmail.com
|
27
|
+
executables: []
|
28
|
+
extensions: []
|
29
|
+
extra_rdoc_files: []
|
30
|
+
files:
|
31
|
+
- lib/link_preview_generator.rb
|
32
|
+
homepage: http://rubygems.org/gems/link_preview_generator
|
33
|
+
licenses:
|
34
|
+
- MIT
|
35
|
+
post_install_message: Voila!!! You have succeeded in installing this gem. Drinks are
|
36
|
+
on you the next time we meet.
|
37
|
+
rdoc_options: []
|
38
|
+
require_paths:
|
39
|
+
- lib
|
40
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
47
|
+
none: false
|
48
|
+
requirements:
|
49
|
+
- - ! '>='
|
50
|
+
- !ruby/object:Gem::Version
|
51
|
+
version: '0'
|
52
|
+
requirements: []
|
53
|
+
rubyforge_project:
|
54
|
+
rubygems_version: 1.8.11
|
55
|
+
signing_key:
|
56
|
+
specification_version: 3
|
57
|
+
summary: Link Preview Generator
|
58
|
+
test_files: []
|
59
|
+
has_rdoc:
|