feedie_the_feed 0.0.1

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f50a2f884fa7b2cc27447dba1f67d2111a12edc9
4
+ data.tar.gz: b4be442cf52a973cfb7176ac885467a8fbbcbd7d
5
+ SHA512:
6
+ metadata.gz: 4a9b029ebbda614af096c801077f0894a5120fd1e6d5eb21fc0c60a2cba71e8f359a0ab1e26c478a251bf5a2eea252d4c12d672cf7c454e4f103802680c39934
7
+ data.tar.gz: 9aa4488e8010c2ff6a55582d62a1024d76c6c8922c844f39409e6b133a9b2a63231058f86a12ba10eb5684c80257b925f9ac6b34b1ef7ce9cf4c98c25e2ce101
data/LICENSE ADDED
@@ -0,0 +1,13 @@
1
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
2
+ Version 2, December 2004
3
+
4
+ Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>
5
+
6
+ Everyone is permitted to copy and distribute verbatim or modified
7
+ copies of this license document, and changing it is allowed as long
8
+ as the name is changed.
9
+
10
+ DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
11
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
12
+
13
+ 0. You just DO WHAT THE FUCK YOU WANT TO.
data/README.md ADDED
@@ -0,0 +1,5 @@
1
+ # Feedie The Feed
2
+ under development... coming soon...
3
+
4
+ ## If you feel adventurous...
5
+ ...just check `try_me.rb` out, it's quite self-explanatory.
@@ -0,0 +1,110 @@
1
+ # WorldsBestRssAndFBParser::Feed.execute "http://abcnews.go.com/abcnews/topstories"
2
+ # WorldsBestRssAndFBParser::Feed.execute "https://www.facebook.com/leagueoflegends/"
3
+
4
+ #FACEBOOK_APPID="458198461180322"
5
+ #FACEBOOK_SECRET="f256365f32d5cea44316ecfcda203d99"
6
+
7
+ #facebook_appid="458198461180322"
8
+ #facebook_secret="f256365f32d5cea44316ecfcda203d99"
9
+
10
+ require 'feedjira'
11
+ require 'koala'
12
+ require 'uri'
13
+ require 'public_suffix'
14
+
15
+ module FeedieTheFeed
16
+ class FeedGrabber
17
+
18
+ # Stops feedjira spamming in console when there is no last modified time field in an rss feed
19
+ Feedjira.logger.level = Logger::FATAL
20
+
21
+ def initialize(facebook_appid=nil, facebook_secret=nil)
22
+ @facebook_appid = facebook_appid
23
+ @facebook_secret = facebook_secret
24
+ end
25
+
26
+ def get(url, facebook_appid=nil, facebook_secret=nil)
27
+ set_facebook_credentials(facebook_appid, facebook_secret) if facebook_appid && facebook_secret
28
+ validate_url_and_start(url)
29
+ end
30
+
31
+ private
32
+
33
+ def set_facebook_credentials(facebook_appid, facebook_secret)
34
+ @facebook_appid = facebook_appid
35
+ @facebook_secret = facebook_secret
36
+ end
37
+
38
+ def validate_url_and_start(url)
39
+ if url =~ /\A#{URI::regexp(['http', 'https'])}\z/
40
+ get_proper_feed(url)
41
+ else
42
+ p "Bad url." #GOTA THROW EXCEPTION
43
+ end
44
+ end
45
+
46
+ def get_proper_feed(url)
47
+ is_facebook_url?(url) ? get_facebook_feed(url) : get_rss_feed(url)
48
+ end
49
+
50
+ def is_facebook_url?(url)
51
+ uri = URI.parse(url)
52
+ PublicSuffix.parse(uri.host).domain == 'facebook.com'
53
+ end
54
+
55
+ def get_facebook_feed(url)
56
+ authorize_facebook
57
+ posts = @fb_graph_api.get_connection(get_fb_page_name(url), 'posts', {
58
+ limit: 10, # max 100
59
+ fields: ['message', 'id', 'from', 'type', 'picture', 'link', 'created_time']
60
+ })
61
+ formalize_fb_feed_array(posts.to_a)
62
+ end
63
+
64
+ def authorize_facebook
65
+ @facebook_appid ||= ENV['FACEBOOK_APPID']
66
+ @facebook_secret ||= ENV['FACEBOOK_SECRET']
67
+ oauth = Koala::Facebook::OAuth.new(@facebook_appid, @facebook_secret)
68
+ access_token = oauth.get_app_access_token
69
+ @fb_graph_api = Koala::Facebook::API.new(access_token)
70
+ end
71
+
72
+ def get_fb_page_name(url)
73
+ URI.parse(url).path.match(/\A\/([^\/]*)/)[1]
74
+ end
75
+
76
+ def truncate(text, options = {})
77
+ return text unless text.length > options[:length]
78
+
79
+ omission = options[:omission] || "..."
80
+ length_with_room_for_omission = options[:length] - omission.length
81
+ stop = \
82
+ if options[:separator]
83
+ text.rindex(options[:separator], length_with_room_for_omission) || length_with_room_for_omission
84
+ else
85
+ length_with_room_for_omission
86
+ end
87
+
88
+ "#{text[0, stop]}#{omission}"
89
+ end
90
+
91
+ def formalize_fb_feed_array(array)
92
+ array.each do |hash|
93
+ hash['entry_id'] = hash.delete 'id'
94
+ hash['summary'] = hash.delete 'message'
95
+ hash['title'] = truncate(hash['summary'], length: 80, separator: ' ') if hash['summary']
96
+ hash['url'] = hash.delete 'link'
97
+ hash['published'] = Time.parse hash.delete('created_time')
98
+ hash['image'] = hash.delete 'picture'
99
+ end
100
+ end
101
+
102
+ def get_rss_feed(url)
103
+ feed = Feedjira::Feed.fetch_and_parse url
104
+ feed.entries.map! do |entry|
105
+ entry.to_h
106
+ end
107
+ end
108
+
109
+ end
110
+ end
@@ -0,0 +1,3 @@
1
+ module FeedieTheFeed
2
+ VERSION = '0.0.1'
3
+ end
@@ -0,0 +1,4 @@
1
+ require 'feedie_the_feed/feed_grabber'
2
+
3
+ module FeedieTheFeed
4
+ end
metadata ADDED
@@ -0,0 +1,91 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: feedie_the_feed
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Jerry Wisdom
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-10-07 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: feedjira
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 2.1.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 2.1.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: koala
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 3.0.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 3.0.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: public_suffix
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 3.0.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 3.0.0
55
+ description: A feed posts aggregator for rss and facebook pages
56
+ email:
57
+ - krabique48@gmail.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - LICENSE
63
+ - README.md
64
+ - lib/feedie_the_feed.rb
65
+ - lib/feedie_the_feed/feed_grabber.rb
66
+ - lib/feedie_the_feed/version.rb
67
+ homepage: https://github.com/krabique48/feedie_the_feed
68
+ licenses:
69
+ - WTFPL
70
+ metadata: {}
71
+ post_install_message:
72
+ rdoc_options: []
73
+ require_paths:
74
+ - lib
75
+ required_ruby_version: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: 2.4.2
80
+ required_rubygems_version: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
85
+ requirements: []
86
+ rubyforge_project:
87
+ rubygems_version: 2.6.13
88
+ signing_key:
89
+ specification_version: 4
90
+ summary: A feed posts aggregator for rss and facebook pages
91
+ test_files: []