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.
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: