nayutaya-ironnews-utility 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile ADDED
@@ -0,0 +1,34 @@
1
+
2
+ NAME = "nayutaya-ironnews-utility"
3
+
4
+ task :default => :gemspec
5
+
6
+ desc "generate gemspec file from template"
7
+ task :gemspec do
8
+ require "erb"
9
+ require "lib/ironnews_utility"
10
+
11
+ src = File.open("#{NAME}.gemspec.erb", "rb") { |file| file.read }
12
+ erb = ERB.new(src, nil, "-")
13
+
14
+ version = IronnewsUtility::VERSION
15
+ date = Time.now.strftime("%Y-%m-%d")
16
+
17
+ files = Dir.glob("**/*").select { |s| File.file?(s) }.reject { |s| /\.gem\z/ =~ s }
18
+ test_files = Dir.glob("test/**").select { |s| File.file?(s) }
19
+
20
+ File.open("#{NAME}.gemspec", "wb") { |file|
21
+ file.write(erb.result(binding))
22
+ }
23
+ end
24
+
25
+ desc "build gem"
26
+ task :build do
27
+ sh "gem build #{NAME}.gemspec"
28
+ end
29
+
30
+ task :push do
31
+ require "lib/ironnews_utility"
32
+ target = "#{NAME}-#{IronnewsUtility::VERSION}.gem"
33
+ sh "gem push #{target}"
34
+ end
@@ -0,0 +1,19 @@
1
+
2
+ module IronnewsUtility
3
+ CanonicalTable = [
4
+ [%r'\A(http://[a-z]+\.yomiuri\.co\.jp/.+)\?from=[a-z0-9]+\Z', '\1'].freeze,
5
+ [%r'\A(http://japan\.cnet\.com/.+)\?ref=rss\Z', '\1'].freeze,
6
+ [%r'\A(http://journal\.mycom\.co\.jp/.+)\?rt=na\Z', '\1index.html'].freeze,
7
+ [%r'\A(http://mainichi\.jp/.+)\?inb=[a-z]+\Z', '\1'].freeze,
8
+ [%r'\A(http://mainichi\.jp/.+)\?link_id=[A-Z0-9]+\Z', '\1'].freeze,
9
+ [%r'\A(http://news\.searchina\.ne\.jp/.+)&pt=large\Z', '\1'].freeze,
10
+ [%r'\A(http://techon\.nikkeibp\.co\.jp/.+)\?ref=rss\Z', '\1'].freeze,
11
+ [%r'\A(http://www\.asahi\.com/.+)\?ref=rss\Z', '\1'].freeze,
12
+ [%r'\A(http://www\.chunichi\.co\.jp/.+)\?ref=rank\Z', '\1'].freeze,
13
+ [%r'\A(http://www\.jiji\.com/.+)&j1\Z', '\1'].freeze,
14
+ [%r'\A(http://www\.jiji\.com/.+)&n=1\Z', '\1'].freeze,
15
+ [%r'\A(http://www\.jiji\.com/jc/c\?g=.+?)&rel=j7(&k=\d+)\Z', '\1\2'].freeze,
16
+ [%r'\A(http://www\.tetsudo\.com/.+)\?tag=as\.rss\Z', '\1'].freeze,
17
+ [%r'\Ahttp://slashdot\.jp/articles/(\d+/\d+/\d+/\d+)\.shtml', 'http://slashdot.jp/article.pl?sid=\1'].freeze,
18
+ ].freeze
19
+ end
@@ -0,0 +1,19 @@
1
+
2
+ module IronnewsUtility
3
+ CleanseTitleTable = {
4
+ "mainichi.jp" => [%r'\A(.+) - 毎日jp\(毎日新聞\)\Z', '\1'].freeze,
5
+ "mytown.asahi.com" => [%r'\Aasahi\.com:(.+)-マイタウン(.+)\Z', '\1 - \2'].freeze,
6
+ "sankei.jp.msn.com" => [%r'\A(.+) - MSN産経ニュース\Z', '\1'].freeze,
7
+ "www.47news.jp" => [%r'\A(.+) - 47NEWS(よんななニュース)\Z', '\1'].freeze,
8
+ "www.asahi.com" => [%r'\Aasahi\.com(朝日新聞社):(.+)\Z', '\1'].freeze,
9
+ "www.chunichi.co.jp" => [%r'\A中日新聞:(.+)\(CHUNICHI Web\)\Z', '\1'].freeze,
10
+ "www.yomiuri.co.jp" => [%r'\A(.+) : YOMIURI ONLINE(読売新聞)\Z', '\1'].freeze,
11
+ "www.jiji.com" => [%r'\A時事ドットコム:(.+)\Z', '\1'].freeze,
12
+ "slashdot.jp" => [%r'\A(.+) - スラッシュドット・ジャパン\Z', '\1'].freeze,
13
+ "www.tokyo-np.co.jp" => [%r'\A東京新聞:(.+)\(TOKYO Web\)\Z', '\1'].freeze,
14
+ "www.hokkaido-np.co.jp" => [%r'\A(.+)−北海道新聞\[青森からこんにちは\]\Z', '\1'].freeze,
15
+ "japan.cnet.com" => [%r'\A(.+) - CNET Japan\Z', '\1'].freeze,
16
+ "gigazine.net" => [%r'\A(.+) - GIGAZINE\Z', '\1'].freeze,
17
+ "www.kobe-np.co.jp" => [%r'\A神戸新聞|(.+)\Z', '\1'].freeze,
18
+ }.freeze
19
+ end
@@ -0,0 +1,29 @@
1
+
2
+ require "uri"
3
+ require File.join(File.dirname(__FILE__), "canonical_table")
4
+ require File.join(File.dirname(__FILE__), "filter_table")
5
+ require File.join(File.dirname(__FILE__), "cleanse_title_table")
6
+
7
+ module IronnewsUtility
8
+ def self.get_canonical_url(url)
9
+ url = url.dup
10
+ CanonicalTable.find { |pattern, replace|
11
+ !!url.sub!(pattern, replace)
12
+ }
13
+ return url
14
+ end
15
+
16
+ def self.reject?(url)
17
+ return FilterTable.any? { |pattern| pattern =~ url }
18
+ end
19
+
20
+ def self.cleanse_title(url, title)
21
+ uri = URI.parse(url)
22
+ pattern, replace = CleanseTitleTable[uri.host]
23
+ if pattern
24
+ return title.gsub(pattern, replace)
25
+ else
26
+ return title
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,43 @@
1
+
2
+ module IronnewsUtility
3
+ FilterTable = [
4
+ %r'\Ahttp://cambodiawatch\.net/', # 理由: title要素に記事名が含まれていないため
5
+ %r'\Ahttp://car\.nikkei\.co\.jp/news/', # 理由: title要素に記事名が含まれていないため
6
+ %r'\Ahttp://car\.nikkei\.co\.jp/release/', # 理由: title要素に記事名が含まれていないため
7
+ %r'\Ahttp://cargo-news\.co\.jp/', # 理由: title要素に記事名が含まれていないため
8
+ %r'\Ahttp://contents\.innolife\.net/', # 理由: title要素に記事名が含まれていないため
9
+ %r'\Ahttp://japan\.donga\.com/', # 理由: title要素に記事名が含まれていないため
10
+ %r'\Ahttp://japanese\.donga\.com/', # 理由: title要素に記事名が含まれていないため
11
+ %r'\Ahttp://mainichi\.jp/life/money/kabu/nsj/news/', # 理由: title要素に記事名が含まれていないため
12
+ %r'\Ahttp://markets\.nikkei\.co\.jp/', # 理由: title要素に記事名が含まれていないため
13
+ %r'\Ahttp://news\.ibc\.co\.jp/', # 理由: title要素に記事名が含まれていないため
14
+ %r'\Ahttp://news\.searchina\.ne\.jp/', # 理由: 記事の閲覧が有料であるため
15
+ %r'\Ahttp://release\.nikkei\.co\.jp/', # 理由: title要素に記事名が含まれていないため
16
+ %r'\Ahttp://rkk\.jp/', # 理由: title要素に記事名が含まれていないため
17
+ %r'\Ahttp://www2\.knb\.ne\.jp/', # 理由: title要素に記事名が含まれていないため
18
+ %r'\Ahttp://www\.chemicaldaily\.co\.jp/news/', # 理由: title要素に記事名が含まれていないため
19
+ %r'\Ahttp://www\.chugoku-np\.co\.jp/News/Tn', # 理由: title要素に記事名が含まれていないため
20
+ %r'\Ahttp://www\.hab\.co\.jp/headline/', # 理由: title要素に記事名が含まれていないため
21
+ %r'\Ahttp://www\.iwate-np\.co\.jp/', # 理由: title要素に記事名が含まれていないため
22
+ %r'\Ahttp://www\.japanjournals\.com/', # 理由: title要素に記事名が含まれていないため
23
+ %r'\Ahttp://www\.keidanren\.or\.jp/', # 理由: title要素に記事名が含まれていないため
24
+ %r'\Ahttp://www\.kentsu\.co\.jp/', # 理由: title要素に記事名が含まれていないため
25
+ %r'\Ahttp://www\.mxtv\.co\.jp/mxnews/news/', # 理由: title要素に記事名が含まれていないため
26
+ %r'\Ahttp://www\.nikkei\.co\.jp/kaigai/', # 理由: title要素に記事名が含まれていないため
27
+ %r'\Ahttp://www\.nikkei\.co\.jp/kyushu/news/', # 理由: title要素に記事名が含まれていないため
28
+ %r'\Ahttp://www\.nikkei\.co\.jp/news/', # 理由: title要素に記事名が含まれていないため
29
+ %r'\Ahttp://www\.pjnews\.net/', # 理由: title要素に記事名が含まれていないため
30
+ %r'\Ahttp://www\.portfolio\.nl/', # 理由: title要素に記事名が含まれていないため
31
+ %r'\Ahttp://www\.sanpo-pub\.co\.jp/column/', # 理由: title要素に記事名が含まれていないため
32
+ %r'\Ahttp://www\.shonai-nippo\.co\.jp/', # 理由: title要素に記事名が含まれていないため
33
+ %r'\Ahttp://www\.tohkaishimpo\.com/', # 理由: title要素に記事名が含まれていないため
34
+ %r'\Ahttp://www\.toyama\.hokkoku\.co\.jp/subpage/', # 理由: title要素に記事名が含まれていないため
35
+ %r'\Ahttp://www\.travelvision\.jp/', # 理由: title要素に記事名が含まれていないため
36
+ %r'\Ahttp://www\.usfl\.com/Daily/News/', # 理由: title要素に記事名が含まれていないため
37
+ %r'\Ahttp://www\.wbs\.co\.jp/', # 理由: title要素に記事名が含まれていないため
38
+ %r'\Ahttp://www\.xinhua\.jp/', # 理由: 記事の閲覧が有料であるため
39
+ %r'\Ahttp://www\.tku\.co\.jp/pc/news/', # 理由: title要素に記事名が含まれていないため
40
+ %r'\Ahttp://www\.mbs\.jp/news/', # 理由: 記事の閲覧可能期間が短いため
41
+ %r'\Ahttp://news\.tbs\.co\.jp/newseye/', # 理由: 記事の閲覧可能期間が短いため
42
+ ].freeze
43
+ end
@@ -0,0 +1,4 @@
1
+
2
+ module IronnewsUtility
3
+ VERSION = "0.3.0"
4
+ end
@@ -0,0 +1,3 @@
1
+
2
+ require File.join(File.dirname(__FILE__), "ironnews_utility", "version")
3
+ require File.join(File.dirname(__FILE__), "ironnews_utility", "core")
@@ -0,0 +1,44 @@
1
+
2
+ Gem::Specification.new do |s|
3
+ s.specification_version = 2
4
+ s.required_rubygems_version = Gem::Requirement.new(">= 0")
5
+ s.required_ruby_version = Gem::Requirement.new(">= 1.8.6")
6
+
7
+ s.name = "nayutaya-ironnews-utility"
8
+ s.version = "0.3.0"
9
+ s.date = "2010-01-12"
10
+
11
+ s.authors = ["Yuya Kato"]
12
+ s.email = "yuyakato@gmail.com"
13
+
14
+ s.summary = "ironnews-utility"
15
+ s.description = "ironnews-utility"
16
+ s.homepage = "http://github.com/nayutaya/ironnews-utility/"
17
+
18
+ s.rubyforge_project = nil
19
+ s.has_rdoc = false
20
+ s.require_paths = ["lib"]
21
+
22
+ s.files = [
23
+ "lib/ironnews_utility/canonical_table.rb",
24
+ "lib/ironnews_utility/cleanse_title_table.rb",
25
+ "lib/ironnews_utility/core.rb",
26
+ "lib/ironnews_utility/filter_table.rb",
27
+ "lib/ironnews_utility/version.rb",
28
+ "lib/ironnews_utility.rb",
29
+ "nayutaya-ironnews-utility.gemspec",
30
+ "nayutaya-ironnews-utility.gemspec.erb",
31
+ "Rakefile",
32
+ "test/alltests.rb",
33
+ "test/canonical_test.rb",
34
+ "test/cleanse_title_test.rb",
35
+ "test/filter_test.rb",
36
+ ]
37
+ s.test_files = [
38
+ "test/alltests.rb",
39
+ "test/canonical_test.rb",
40
+ "test/cleanse_title_test.rb",
41
+ "test/filter_test.rb",
42
+ ]
43
+ s.extra_rdoc_files = []
44
+ end
@@ -0,0 +1,33 @@
1
+
2
+ Gem::Specification.new do |s|
3
+ s.specification_version = 2
4
+ s.required_rubygems_version = Gem::Requirement.new(">= 0")
5
+ s.required_ruby_version = Gem::Requirement.new(">= 1.8.6")
6
+
7
+ s.name = <%= NAME.dump %>
8
+ s.version = <%= version.dump %>
9
+ s.date = <%= date.dump %>
10
+
11
+ s.authors = ["Yuya Kato"]
12
+ s.email = "yuyakato@gmail.com"
13
+
14
+ s.summary = "ironnews-utility"
15
+ s.description = "ironnews-utility"
16
+ s.homepage = "http://github.com/nayutaya/ironnews-utility/"
17
+
18
+ s.rubyforge_project = nil
19
+ s.has_rdoc = false
20
+ s.require_paths = ["lib"]
21
+
22
+ s.files = [
23
+ <%- files.each { |path| -%>
24
+ <%= path.dump %>,
25
+ <%- } -%>
26
+ ]
27
+ s.test_files = [
28
+ <%- test_files.each { |path| -%>
29
+ <%= path.dump %>,
30
+ <%- } -%>
31
+ ]
32
+ s.extra_rdoc_files = []
33
+ end
data/test/alltests.rb ADDED
@@ -0,0 +1,4 @@
1
+ #! ruby -Ku
2
+
3
+ require "test/unit"
4
+ Test::Unit::AutoRunner.run(true, File.dirname(__FILE__), ['--pattern=/_test\.rb\Z/'])
@@ -0,0 +1,23 @@
1
+ #! ruby -Ku
2
+
3
+ $:.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
4
+
5
+ require "test/unit"
6
+ require "ironnews_utility"
7
+
8
+ class CanonicalTest < Test::Unit::TestCase
9
+ def setup
10
+ @module = IronnewsUtility
11
+ end
12
+
13
+ def test_get_canonical_url
14
+ cases = File.open(File.join(File.dirname(__FILE__), "..", "..", "canonical_cases.txt"), "rb") { |file|
15
+ file.map { |line|
16
+ line.chomp.split(/\t/)
17
+ }
18
+ }
19
+ cases.each { |value, expected|
20
+ assert_equal(expected, @module.get_canonical_url(value), value)
21
+ }
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ #! ruby -Ku
2
+
3
+ $:.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
4
+
5
+ require "test/unit"
6
+ require "ironnews_utility"
7
+
8
+ class CleanseTitleTest < Test::Unit::TestCase
9
+ def setup
10
+ @module = IronnewsUtility
11
+ end
12
+
13
+ def test_cleanse_title
14
+ cases = File.open(File.join(File.dirname(__FILE__), "..", "..", "cleanse_title_cases.txt"), "rb") { |file|
15
+ file.map { |line|
16
+ line.chomp.split(/\t/)
17
+ }
18
+ }
19
+ cases.each { |url, title, expected|
20
+ assert_equal(expected, @module.cleanse_title(url, title), title)
21
+ }
22
+ end
23
+ end
@@ -0,0 +1,26 @@
1
+ #! ruby -Ku
2
+
3
+ $:.unshift(File.join(File.dirname(__FILE__), "..", "lib"))
4
+
5
+ require "test/unit"
6
+ require "ironnews_utility"
7
+
8
+ class FilterTest < Test::Unit::TestCase
9
+ def setup
10
+ @module = IronnewsUtility
11
+ end
12
+
13
+ def test_reject__ok
14
+ File.foreach(File.join(File.dirname(__FILE__), "..", "..", "filter_cases_ok.txt")) { |line|
15
+ url = line.chomp
16
+ assert_equal(false, @module.reject?(url), url)
17
+ }
18
+ end
19
+
20
+ def test_reject__ng
21
+ File.foreach(File.join(File.dirname(__FILE__), "..", "..", "filter_cases_ng.txt")) { |line|
22
+ url = line.chomp
23
+ assert_equal(true, @module.reject?(url), url)
24
+ }
25
+ end
26
+ end
metadata ADDED
@@ -0,0 +1,70 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: nayutaya-ironnews-utility
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.3.0
5
+ platform: ruby
6
+ authors:
7
+ - Yuya Kato
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+
12
+ date: 2010-01-12 00:00:00 +09:00
13
+ default_executable:
14
+ dependencies: []
15
+
16
+ description: ironnews-utility
17
+ email: yuyakato@gmail.com
18
+ executables: []
19
+
20
+ extensions: []
21
+
22
+ extra_rdoc_files: []
23
+
24
+ files:
25
+ - lib/ironnews_utility/canonical_table.rb
26
+ - lib/ironnews_utility/cleanse_title_table.rb
27
+ - lib/ironnews_utility/core.rb
28
+ - lib/ironnews_utility/filter_table.rb
29
+ - lib/ironnews_utility/version.rb
30
+ - lib/ironnews_utility.rb
31
+ - nayutaya-ironnews-utility.gemspec
32
+ - nayutaya-ironnews-utility.gemspec.erb
33
+ - Rakefile
34
+ - test/alltests.rb
35
+ - test/canonical_test.rb
36
+ - test/cleanse_title_test.rb
37
+ - test/filter_test.rb
38
+ has_rdoc: true
39
+ homepage: http://github.com/nayutaya/ironnews-utility/
40
+ licenses: []
41
+
42
+ post_install_message:
43
+ rdoc_options: []
44
+
45
+ require_paths:
46
+ - lib
47
+ required_ruby_version: !ruby/object:Gem::Requirement
48
+ requirements:
49
+ - - ">="
50
+ - !ruby/object:Gem::Version
51
+ version: 1.8.6
52
+ version:
53
+ required_rubygems_version: !ruby/object:Gem::Requirement
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: "0"
58
+ version:
59
+ requirements: []
60
+
61
+ rubyforge_project:
62
+ rubygems_version: 1.3.5
63
+ signing_key:
64
+ specification_version: 2
65
+ summary: ironnews-utility
66
+ test_files:
67
+ - test/alltests.rb
68
+ - test/canonical_test.rb
69
+ - test/cleanse_title_test.rb
70
+ - test/filter_test.rb