wordprss 0.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 +7 -0
- data/lib/wordprss/channel.rb +25 -0
- data/lib/wordprss/feed.rb +41 -0
- data/lib/wordprss/invalid_url_error.rb +4 -0
- data/lib/wordprss/item.rb +55 -0
- data/lib/wordprss/policy.rb +12 -0
- data/lib/wordprss/request.rb +23 -0
- data/lib/wordprss/url.rb +14 -0
- data/lib/wordprss/version.rb +12 -0
- data/lib/wordprss.rb +7 -0
- metadata +94 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 26a00cc252da9c6a4b536e77e959cf01417f43a9b98735cc390825b657e3e268
|
4
|
+
data.tar.gz: 4240293a107b07f3caf3d070195d48a0a49c0b07c612e3355baafc49bc364f87
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 69c087d265c9b08f227296970d36bc7c49b99f4740903cfb701bdf40d028b2f621d61f0e89fcd030e3d1329c006fa83c3789a7c861df3f9916d5d2c76dcb0bed
|
7
|
+
data.tar.gz: bf66ffce93792f8bdfbd3f6d837aae2cd0c4c5f3b81987fa4e77debed355b2a962a826bb9f0b6b347c159fa5d07af20a7907452287425851165df2540d5217da
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module WordpRSS
|
2
|
+
class Channel
|
3
|
+
# Pull Wordpress RSS feed for given URL
|
4
|
+
#
|
5
|
+
# @return [WordpRSS::Feed]
|
6
|
+
def self.subscribe(url)
|
7
|
+
wordpress_url = WordpRSS::Url.parse(url)
|
8
|
+
response = WordpRSS::Request.new(wordpress_url).call
|
9
|
+
|
10
|
+
WordpRSS::Feed.new(response.body)
|
11
|
+
end
|
12
|
+
|
13
|
+
# Checks if the given URL points to the valid Wordpress RSS feed
|
14
|
+
#
|
15
|
+
# @return [Boolean]
|
16
|
+
def self.wordpress_rss_feed?(url)
|
17
|
+
wordpress_url = WordpRSS::Url.parse(url)
|
18
|
+
response = WordpRSS::Request.new(wordpress_url).call
|
19
|
+
|
20
|
+
WordpRSS::Policy.new.valid_rss_feed?(response)
|
21
|
+
rescue RestClient::NotFound
|
22
|
+
false
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'nokogiri'
|
2
|
+
|
3
|
+
module WordpRSS
|
4
|
+
class Feed
|
5
|
+
|
6
|
+
def initialize(body)
|
7
|
+
@body = body
|
8
|
+
end
|
9
|
+
|
10
|
+
# Returns the RSS feed title
|
11
|
+
#
|
12
|
+
# @return [String]
|
13
|
+
def title
|
14
|
+
xml.xpath("//channel").at("title").text
|
15
|
+
end
|
16
|
+
|
17
|
+
# Returns the RSS feed description
|
18
|
+
#
|
19
|
+
# @return [String]
|
20
|
+
def description
|
21
|
+
xml.xpath("//channel").at("description").text
|
22
|
+
end
|
23
|
+
|
24
|
+
# Returns a collection of the RSS feed items
|
25
|
+
#
|
26
|
+
# @return [Array<WordpRSS::Item>]
|
27
|
+
def items
|
28
|
+
xml.css("item").map do |node|
|
29
|
+
::WordpRSS::Item.new(node)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
attr_reader :body
|
36
|
+
|
37
|
+
def xml
|
38
|
+
@xml ||= ::Nokogiri::XML(body)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
require 'pry'
|
2
|
+
|
3
|
+
module WordpRSS
|
4
|
+
class Item
|
5
|
+
def initialize(node)
|
6
|
+
@node = node
|
7
|
+
end
|
8
|
+
|
9
|
+
# Returns the item title
|
10
|
+
#
|
11
|
+
# @return [String]
|
12
|
+
def title
|
13
|
+
node.at("title").text
|
14
|
+
end
|
15
|
+
|
16
|
+
# Returns the item link
|
17
|
+
#
|
18
|
+
# @return [String]
|
19
|
+
def link
|
20
|
+
node.at("link").text
|
21
|
+
end
|
22
|
+
|
23
|
+
# Returns the item publication date
|
24
|
+
#
|
25
|
+
# @return [String]
|
26
|
+
def published_at
|
27
|
+
node.at("pubDate").text
|
28
|
+
end
|
29
|
+
|
30
|
+
# Returns the item description
|
31
|
+
#
|
32
|
+
# @return [String]
|
33
|
+
def description
|
34
|
+
node.at("description").text
|
35
|
+
end
|
36
|
+
|
37
|
+
# Returns an array of the item categories
|
38
|
+
#
|
39
|
+
# @return [Array<String>]
|
40
|
+
def tags
|
41
|
+
node.css("category").map(&:text)
|
42
|
+
end
|
43
|
+
|
44
|
+
# Returns item author
|
45
|
+
#
|
46
|
+
# @return [String]
|
47
|
+
def creator
|
48
|
+
node.elements.last.children.find { |c| c.name == "dc:creator" }.text
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
|
53
|
+
attr_accessor :node
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module WordpRSS
|
2
|
+
class Policy
|
3
|
+
# Returns the result of the RSS feed validation. The RSS generator must be wordpress
|
4
|
+
#
|
5
|
+
# @return [Boolean]
|
6
|
+
def valid_rss_feed?(response)
|
7
|
+
xml = Nokogiri::XML(response.body)
|
8
|
+
|
9
|
+
!!(!xml.at("rss").nil? && xml.at("generator").text.to_s.match(/wordpress/i))
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
require 'uri'
|
2
|
+
require 'rest-client'
|
3
|
+
|
4
|
+
module WordpRSS
|
5
|
+
class Request
|
6
|
+
def initialize(url)
|
7
|
+
@url = url
|
8
|
+
end
|
9
|
+
|
10
|
+
# Performs the request to the given URL in order to get the RSS feed contents
|
11
|
+
#
|
12
|
+
# @return [RestClient::Response]
|
13
|
+
def call
|
14
|
+
fail(WordpRSS::InvalidURLError.new("#{url} is not a valid URL")) unless url =~ URI::regexp
|
15
|
+
|
16
|
+
RestClient.get(url)
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
attr_reader :url
|
22
|
+
end
|
23
|
+
end
|
data/lib/wordprss/url.rb
ADDED
data/lib/wordprss.rb
ADDED
metadata
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: wordprss
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Paweł Dąbrowski
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-04-13 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: rest-client
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 2.0.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.0.2
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: nokogiri
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 1.8.2
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 1.8.2
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
description: Access the RSS channel of any Wordpress blog
|
56
|
+
email: dziamber@gmail.com
|
57
|
+
executables: []
|
58
|
+
extensions: []
|
59
|
+
extra_rdoc_files: []
|
60
|
+
files:
|
61
|
+
- lib/wordprss.rb
|
62
|
+
- lib/wordprss/channel.rb
|
63
|
+
- lib/wordprss/feed.rb
|
64
|
+
- lib/wordprss/invalid_url_error.rb
|
65
|
+
- lib/wordprss/item.rb
|
66
|
+
- lib/wordprss/policy.rb
|
67
|
+
- lib/wordprss/request.rb
|
68
|
+
- lib/wordprss/url.rb
|
69
|
+
- lib/wordprss/version.rb
|
70
|
+
homepage: http://github.com/rubyhero/wordprss
|
71
|
+
licenses:
|
72
|
+
- MIT
|
73
|
+
metadata: {}
|
74
|
+
post_install_message:
|
75
|
+
rdoc_options: []
|
76
|
+
require_paths:
|
77
|
+
- lib
|
78
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0'
|
83
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
84
|
+
requirements:
|
85
|
+
- - ">="
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
88
|
+
requirements: []
|
89
|
+
rubyforge_project:
|
90
|
+
rubygems_version: 2.7.3
|
91
|
+
signing_key:
|
92
|
+
specification_version: 4
|
93
|
+
summary: Access the RSS channel of any Wordpress blog
|
94
|
+
test_files: []
|