link_preview_generator 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/link_preview_generator.rb +86 -0
  2. 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: