cinch-news 1.0.2 → 2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/cinch/plugins/helpers/category_helper.rb +168 -0
- data/lib/cinch/plugins/news.rb +97 -89
- metadata +6 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1f5edc6bdacb752d09cda39b6d59713d3d798017
|
4
|
+
data.tar.gz: 832629ce346ead1d0dfbefd13737b28b574c5e91
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cc5234a147ec0e7aec07476d2adc32d121530ed2f6ae156453f3ffcaa481125034030bd17f5656a6b1c3084b8d5024d51b270a1e1ad4921ee4e9a3adbe595df5
|
7
|
+
data.tar.gz: f72368f9a9436301f398879d898af805e43f5b68b2f7d7a23b272fd95abc157c9147316401a5ddb93ac4730a84d5423abecaee879287624072cc580ddf75f553
|
@@ -0,0 +1,168 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'open-uri'
|
3
|
+
require 'ostruct'
|
4
|
+
require 'cinch/toolbox'
|
5
|
+
|
6
|
+
module Cinch
|
7
|
+
module Helpers
|
8
|
+
|
9
|
+
def categories
|
10
|
+
c_data = JSON.parse(open("http://api.feedzilla.com/v1/categories.json").read)
|
11
|
+
c_list = []
|
12
|
+
|
13
|
+
for i in c_data
|
14
|
+
c_title = i['english_category_name']
|
15
|
+
c_id = i['category_id']
|
16
|
+
|
17
|
+
c_list.push("%s [ %s ]" % [c_title, c_id])
|
18
|
+
end
|
19
|
+
return c_list
|
20
|
+
end
|
21
|
+
|
22
|
+
def sub_categories(id)
|
23
|
+
sc_data = JSON.parse(open("http://api.feedzilla.com/v1/categories/#{id}/subcategories.json").read)
|
24
|
+
sc_list = []
|
25
|
+
|
26
|
+
for i in sc_data
|
27
|
+
sc_title = i['display_subcategory_name']
|
28
|
+
sc_id = i['subcategory_id']
|
29
|
+
|
30
|
+
sc_list.push("%s [ %s ]" % [sc_title, sc_id])
|
31
|
+
end
|
32
|
+
return sc_list
|
33
|
+
end
|
34
|
+
|
35
|
+
def execute_c_search(id, terms)
|
36
|
+
search_c_data = JSON.parse(open("http://api.feedzilla.com/v1/categories/#{id}/articles/search.json?q=#{terms}&count=4").read)
|
37
|
+
s_c_data = search_c_data['articles']
|
38
|
+
search_c_list = []
|
39
|
+
|
40
|
+
for i in s_c_data
|
41
|
+
article_source = i['source']
|
42
|
+
article_title = i['title']
|
43
|
+
article_summary = i['summary']
|
44
|
+
article_url = i['url']
|
45
|
+
|
46
|
+
url = article_url
|
47
|
+
url = Cinch::Toolbox.shorten(url)
|
48
|
+
|
49
|
+
url = /"shorturl": "(.+)"/.match(url)[1]
|
50
|
+
|
51
|
+
summary = article_summary[0..200]
|
52
|
+
|
53
|
+
summary_s = summary.gsub! /\n/, ' '
|
54
|
+
|
55
|
+
search_c_list.push("%s | Title \"%s\" | Summary: %s [ %s ]" % [article_source, article_title, summary, url])
|
56
|
+
end
|
57
|
+
return search_c_list
|
58
|
+
end
|
59
|
+
|
60
|
+
def execute_sc_search(id, sc_id, terms)
|
61
|
+
search_sc_data = JSON.parse(open("http://api.feedzilla.com/v1/categories/#{id}/subcategories/#{sc_id}/articles/search.json?q=#{terms}&count=4").read)
|
62
|
+
s_sc_data = search_sc_data['articles']
|
63
|
+
search_sc_list = []
|
64
|
+
|
65
|
+
for i in s_sc_data
|
66
|
+
article_source = i['source']
|
67
|
+
article_title = i['title']
|
68
|
+
article_summary = i['summary']
|
69
|
+
article_url = i['url']
|
70
|
+
|
71
|
+
url = article_url
|
72
|
+
url = Cinch::Toolbox.shorten(url)
|
73
|
+
|
74
|
+
url = /"shorturl": "(.+)"/.match(url)[1]
|
75
|
+
|
76
|
+
summary = article_summary[0..200]
|
77
|
+
|
78
|
+
summary_s = summary.gsub! /\n/, ' '
|
79
|
+
|
80
|
+
search_sc_list.push("%s | Title \"%s\" | Summary: %s [ %s ]" % [article_source, article_title, summary_s, url])
|
81
|
+
end
|
82
|
+
return search_sc_list
|
83
|
+
end
|
84
|
+
|
85
|
+
def fetch_news
|
86
|
+
news_data = JSON.parse(open("http://api.feedzilla.com/v1/categories/26/articles.json?&count=4").read)
|
87
|
+
news_articles = news_data['articles']
|
88
|
+
news_list = []
|
89
|
+
|
90
|
+
for i in news_articles
|
91
|
+
article_source = i['source']
|
92
|
+
article_title = i['title']
|
93
|
+
article_summary = i['summary']
|
94
|
+
article_url = i['url']
|
95
|
+
|
96
|
+
puts article_url
|
97
|
+
|
98
|
+
url = article_url
|
99
|
+
url = Cinch::Toolbox.shorten(url)
|
100
|
+
|
101
|
+
url = /"shorturl": "(.+)"/.match(url)[1]
|
102
|
+
|
103
|
+
puts url.class
|
104
|
+
|
105
|
+
summary = article_summary[0..200]
|
106
|
+
|
107
|
+
summary_s = summary.gsub! /\n/, ' '
|
108
|
+
|
109
|
+
news_list.push("%s | Title \"%s\" | Summary: %s [ #{url} ]" % [article_source, article_title, summary_s])
|
110
|
+
end
|
111
|
+
return news_list
|
112
|
+
end
|
113
|
+
|
114
|
+
def c_top_news(id)
|
115
|
+
c_news_data = JSON.parse(open("http://api.feedzilla.com/v1/categories/#{id}/articles.json?&count=4").read)
|
116
|
+
c_news_articles = c_news_data['articles']
|
117
|
+
c_news_list = []
|
118
|
+
|
119
|
+
for i in c_news_articles
|
120
|
+
article_source = i['source']
|
121
|
+
article_title = i['title']
|
122
|
+
article_summary = i['summary']
|
123
|
+
article_url = i['url']
|
124
|
+
|
125
|
+
|
126
|
+
url = article_url
|
127
|
+
url = Cinch::Toolbox.shorten(url)
|
128
|
+
|
129
|
+
url = /"shorturl": "(.+)"/.match(url)[1]
|
130
|
+
|
131
|
+
summary = article_summary[0..200]
|
132
|
+
|
133
|
+
summary_s = summary.gsub! /\n/, ' '
|
134
|
+
|
135
|
+
c_news_list.push("%s | Title \"%s\" | Summary: %s [ #{url} ]" % [article_source, article_title, summary_s])
|
136
|
+
end
|
137
|
+
return c_news_list
|
138
|
+
end
|
139
|
+
|
140
|
+
def sc_top_news(id, sc_id)
|
141
|
+
sc_news_data = JSON.parse(open("http://api.feedzilla.com/v1/categories/#{id}/subcategories/#{sc_id}/articles.json?&count=4").read)
|
142
|
+
sc_news_articles = sc_news_data['articles']
|
143
|
+
sc_news_list = []
|
144
|
+
|
145
|
+
for i in sc_news_articles
|
146
|
+
article_source = i['source']
|
147
|
+
article_title = i['title']
|
148
|
+
article_summary = i['summary']
|
149
|
+
article_url = i['url']
|
150
|
+
|
151
|
+
|
152
|
+
url = article_url
|
153
|
+
url = Cinch::Toolbox.shorten(url)
|
154
|
+
|
155
|
+
url = /"shorturl": "(.+)"/.match(url)[1]
|
156
|
+
|
157
|
+
summary = article_summary[0..200]
|
158
|
+
|
159
|
+
summary_s = summary.gsub! /\n/, ' '
|
160
|
+
|
161
|
+
sc_news_list.push("%s | Title \"%s\" | Summary: %s [ #{url} ]" % [article_source, article_title, summary_s])
|
162
|
+
end
|
163
|
+
return sc_news_list
|
164
|
+
end
|
165
|
+
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
data/lib/cinch/plugins/news.rb
CHANGED
@@ -1,89 +1,97 @@
|
|
1
|
-
# @author Richard Banks <namaste@rawrnet.net>
|
2
|
-
|
3
|
-
# Feel free to join us in #Lobby on irc://rawr.sinsira.net where you can test this gem and get help!
|
4
|
-
|
5
|
-
require 'cinch'
|
6
|
-
require 'ostruct'
|
7
|
-
require 'open-uri'
|
8
|
-
require 'json'
|
9
|
-
require 'cgi'
|
10
|
-
require 'cinch/toolbox'
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
1
|
+
# @author Richard Banks <namaste@rawrnet.net>
|
2
|
+
|
3
|
+
# Feel free to join us in #Lobby on irc://rawr.sinsira.net where you can test this gem and get help!
|
4
|
+
|
5
|
+
require 'cinch'
|
6
|
+
require 'ostruct'
|
7
|
+
require 'open-uri'
|
8
|
+
require 'json'
|
9
|
+
require 'cgi'
|
10
|
+
require 'cinch/toolbox'
|
11
|
+
require_relative "helpers/category_helper.rb"
|
12
|
+
|
13
|
+
module Cinch
|
14
|
+
module Plugins
|
15
|
+
class News
|
16
|
+
include Cinch::Plugin
|
17
|
+
|
18
|
+
set :plugin_name, 'news'
|
19
|
+
set :help, <<-USAGE.gsub(/^ {6}/, '')
|
20
|
+
This plugin is a comprehensive news aggregator and contacts several sources for articles.
|
21
|
+
Enable/Disable Usage:
|
22
|
+
* !n-categories: This command returns all the categories that you can choose from in a PM.
|
23
|
+
* !n-subcategories <category ID>: This command returns all the subcategories of the specified category and their useable ID.
|
24
|
+
* !news: This command retrieves the top three articles from the Top Stories subcategory of the Top News category.
|
25
|
+
* !news <category ID>: This command retrieves the top three articles from the specified category.
|
26
|
+
* !news <category ID> <subcategory ID>: This command retrieves the top three articles from the specified subcategory of the specified category.
|
27
|
+
* !s-category <category id> <query>: This command searches the specified category for your query.
|
28
|
+
USAGE
|
29
|
+
|
30
|
+
match /n-categories/, method: :list_categories
|
31
|
+
|
32
|
+
match /n-subcategories (.+)/, method: :list_subs
|
33
|
+
|
34
|
+
match /news$/, method: :top_news
|
35
|
+
|
36
|
+
match /news (.+)$/, method: :c_topnews
|
37
|
+
|
38
|
+
match /news (.+?) (.+)/, method: :sc_topnews
|
39
|
+
|
40
|
+
match /s-category (.+?) (.+)/, method: :search_category
|
41
|
+
|
42
|
+
match /s-subcategory (.+?) (.+?) (.+)/, method: :search_subcategory
|
43
|
+
|
44
|
+
def list_categories(m)
|
45
|
+
cat_list = categories
|
46
|
+
ca_list = cat_list.join(", ")
|
47
|
+
m.user.notice "#{ca_list}"
|
48
|
+
end
|
49
|
+
|
50
|
+
def list_subs(m, c_id)
|
51
|
+
sc_list = sub_categories(c_id)
|
52
|
+
s_list = sc_list.join(", ")
|
53
|
+
m.user.notice "#{s_list}"
|
54
|
+
end
|
55
|
+
|
56
|
+
|
57
|
+
def search_category(m, id, terms)
|
58
|
+
terms.gsub! /\s/, '+'
|
59
|
+
search_list = execute_c_search(id, terms)
|
60
|
+
search_list[0..2].each{|i| m.reply i}
|
61
|
+
rescue OpenURI::HTTPError
|
62
|
+
m.reply "Error: #{$!}"
|
63
|
+
end
|
64
|
+
|
65
|
+
def search_subcategory(m, id, sc_id, terms)
|
66
|
+
terms.gsub! /\s/, '+'
|
67
|
+
sc_search_list = execute_sc_search(id, sc_id, terms)
|
68
|
+
sc_search_list[0..2].each{|i| m.reply i}
|
69
|
+
rescue OpenURI::HTTPError
|
70
|
+
m.reply "Error #{$!}"
|
71
|
+
end
|
72
|
+
|
73
|
+
def top_news(m)
|
74
|
+
news = fetch_news
|
75
|
+
news[0..2].each{|i| m.reply i}
|
76
|
+
rescue OpenURI::HTTPError
|
77
|
+
m.reply "Error #{$!}"
|
78
|
+
end
|
79
|
+
|
80
|
+
def c_topnews(m, id)
|
81
|
+
c_news = c_top_news(id)
|
82
|
+
c_news[0..2].each{|i| m.reply i}
|
83
|
+
rescue OpenURI::HTTPError
|
84
|
+
m.reply "Error #{$!}"
|
85
|
+
end
|
86
|
+
|
87
|
+
def sc_topnews(m, id, sc_id)
|
88
|
+
sc_news = sc_top_news(id, sc_id)
|
89
|
+
sc_news[0..2].each{|i| m.reply i}
|
90
|
+
rescue OpenURI::HTTPError
|
91
|
+
m.reply "Error #{$!}"
|
92
|
+
end
|
93
|
+
|
94
|
+
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cinch-news
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: '2.0'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Richard Banks
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-03-
|
11
|
+
date: 2014-03-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: cinch
|
@@ -38,15 +38,16 @@ dependencies:
|
|
38
38
|
- - ~>
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 1.1.2
|
41
|
-
description: ! 'A news gem/plugin for the Cinch IRC bot framework that uses a
|
42
|
-
|
43
|
-
|
41
|
+
description: ! 'A news gem/plugin for the Cinch IRC bot framework that uses a FeedZilla
|
42
|
+
API. You can visit irc://rawr.sinsira.net #Lobby to get help, report issues , test
|
43
|
+
the gem, or just chat.'
|
44
44
|
email:
|
45
45
|
- namaste@rawrnet.net
|
46
46
|
executables: []
|
47
47
|
extensions: []
|
48
48
|
extra_rdoc_files: []
|
49
49
|
files:
|
50
|
+
- lib/cinch/plugins/helpers/category_helper.rb
|
50
51
|
- lib/cinch/plugins/news.rb
|
51
52
|
homepage: https://github.com/RawrNet/cinch-news
|
52
53
|
licenses:
|