Module: IronnewsUtility

Defined in:
lib/ironnews_utility/core.rb,
lib/ironnews_utility/version.rb,
lib/ironnews_utility/filter_table.rb,
lib/ironnews_utility/canonical_table.rb,
lib/ironnews_utility/cleanse_title_table.rb

Constant Summary collapse

VERSION =
"0.3.6"
FilterTable =
[
  %r'\Ahttp://cambodiawatch\.net/', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://car\.nikkei\.co\.jp/news/', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://car\.nikkei\.co\.jp/release/', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://cargo-news\.co\.jp/', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://contents\.innolife\.net/', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://gendai\.net/', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://ja\.espnf1\.com/', # 理由: 記事名が文字化け、かつ鉄道関連のニュースが含まれないため
  %r'\Ahttp://japan\.donga\.com/', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://japanese\.donga\.com/', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://jp\.reuters\.com/', # 理由: 記事名の取得に失敗することが多く、かつ鉄道関連の記事が少ないため
  %r'\Ahttp://mainichi\.jp/enta/sports/baseball/news/', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://mainichi\.jp/life/money/kabu/nsj/news/', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://mainichi\.jp/select/.+?/news/m', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://mainichi\.pheedo\.jp/', # 理由: リダイレクト用URLであるため
  %r'\Ahttp://markets\.nikkei\.co\.jp/', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://news\.ibc\.co\.jp/', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://news\.searchina\.ne\.jp/', # 理由: 記事の閲覧が有料であるため
  %r'\Ahttp://news\.tbs\.co\.jp/newseye/', # 理由: 記事の閲覧可能期間が短いため
  %r'\Ahttp://release\.nikkei\.co\.jp/', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://rkk\.jp/', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://rss\.asahi\.com/', # 理由: リダイレクト用URLであるため
  %r'\Ahttp://rss\.rssad\.jp/', # 理由: リダイレクト用URLであるため
  %r'\Ahttp://www.pheedo.jp/', # 理由: リダイレクト用URLであるため
  %r'\Ahttp://www2\.knb\.ne\.jp/', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://www\.asahi\.com/english/weekly/', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://www\.chemicaldaily\.co\.jp/news/', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://www\.chosunonline\.com/', # 理由: 記事の閲覧が有料であるため
  %r'\Ahttp://www\.chugoku-np\.co\.jp/News/Tn', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://www\.hab\.co\.jp/headline/', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://www\.iwate-np\.co\.jp/', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://www\.japanjournals\.com/', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://www\.keidanren\.or\.jp/', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://www\.kentsu\.co\.jp/', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://www\.mbs\.jp/news/', # 理由: 記事の閲覧可能期間が短いため
  %r'\Ahttp://www\.muromin\.mnw\.jp/', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://www\.mxtv\.co\.jp/mxnews/news/', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://www\.nikkei\.co\.jp/kaigai/', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://www\.nikkei\.co\.jp/kyushu/news/', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://www\.nikkei\.co\.jp/news/', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://www\.pjnews\.net/', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://www\.portfolio\.nl/', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://www\.rkk\.co\.jp/', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://www\.sanpo-pub\.co\.jp/column/', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://www\.shonai-nippo\.co\.jp/', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://www\.tku\.co\.jp/pc/news/', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://www\.tohkaishimpo\.com/', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://www\.toyama\.hokkoku\.co\.jp/subpage/', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://www\.travelvision\.jp/', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://www\.usfl\.com/Daily/News/', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://www\.wbs\.co\.jp/', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://www\.worldtimes\.co\.jp/today/', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://www\.xinhua\.jp/', # 理由: 記事の閲覧が有料であるため
  %r'\Ahttp://sports\.nikkei\.co\.jp/', # 理由: title要素に記事名が含まれていないため
  %r'\Ahttp://news\.rkb\.ne\.jp/', # 理由: title要素に記事名が含まれていないため
].freeze
CanonicalTable =
[
  [%r'\A(http://[a-z]+\.yomiuri\.co\.jp/.+)\?from=[a-z0-9]+&ref=[a-z0-9]+\Z', '\1'].freeze,
  [%r'\A(http://[a-z]+\.yomiuri\.co\.jp/.+)\?from=[a-z0-9]+\Z', '\1'].freeze,
  [%r'\A(http://japan\.cnet\.com/.+)\?ref=rss\Z', '\1'].freeze,
  [%r'\A(http://journal\.mycom\.co\.jp/.+)\?rt=na\Z', '\1index.html'].freeze,
  [%r'\A(http://mainichi\.jp/.+)\?inb=[a-z]+\Z', '\1'].freeze,
  [%r'\A(http://mainichi\.jp/.+)\?link_id=[A-Z0-9]+\Z', '\1'].freeze,
  [%r'\A(http://news\.searchina\.ne\.jp/.+)&pt=large\Z', '\1'].freeze,
  [%r'\A(http://techon\.nikkeibp\.co\.jp/.+)\?ref=rss\Z', '\1'].freeze,
  [%r'\A(http://www\.asahi\.com/.+)\?ref=rss\Z', '\1'].freeze,
  [%r'\A(http://www\.chunichi\.co\.jp/.+)\?ref=rank\Z', '\1'].freeze,
  [%r'\A(http://www\.jiji\.com/.+)&j1\Z', '\1'].freeze,
  [%r'\A(http://www\.jiji\.com/.+)&n=1\Z', '\1'].freeze,
  [%r'\A(http://www\.jiji\.com/jc/c\?g=.+?)&rel=j7(&k=\d+)\Z', '\1\2'].freeze,
  [%r'\A(http://www\.tetsudo\.com/.+)\?tag=as\.rss\Z', '\1'].freeze,
  [%r'\A(http://www\.tokyo-np\.co\.jp/.+)\?ref=rank', '\1'].freeze,
  [%r'\Ahttp://slashdot\.jp/articles/(\d+/\d+/\d+/\d+)\.shtml', 'http://slashdot.jp/article.pl?sid=\1'].freeze,
].freeze
CleanseTitleTable =
{
  "gigazine.net" => [
    [%r'\A(.+) - GIGAZINE\Z', '\1'].freeze,
  ].freeze,
  "headlines.yahoo.co.jp" => [
    [%r'\A(.+) - Yahoo!ニュース\Z', '\1'].freeze,
    [%r'\A(.+)(.+)\Z', '\1'].freeze,
  ].freeze,
  "japan.cnet.com" => [
    [%r'\A(.+) - CNET Japan\Z', '\1'].freeze,
  ].freeze,
  "journal.mycom.co.jp" => [
    [%r'\A(.+) \| マイコミジャーナル\Z', '\1'].freeze,
  ].freeze,
  "kyushu.yomiuri.co.jp" => [
    [%r'\A(.+) : 九州発 : YOMIURI ONLINE(読売新聞)\Z', '\1'].freeze,
  ].freeze,
  "mainichi.jp" => [
    [%r'\A(.+) - 毎日jp\(毎日新聞\)\Z', '\1'].freeze,
    [%r'\A(.+) - 毎日jp\(毎日新聞\)\Z', '\1'].freeze,
  ].freeze,
  "mytown.asahi.com" => [
    [%r'\Aasahi\.com:(.+)-マイタウン(.+)\Z', '\1 - \2'].freeze,
  ].freeze,
  "news.kanaloco.jp" => [
    [%r'\A(.+):ローカルニュース : ニュース : カナロコ -- 神奈川新聞社\Z', '\1'].freeze,
  ].freeze,
  "news24.jp" => [
    [%r'\A(.+) \| 日テレNEWS24\Z', '\1'].freeze,
  ].freeze,
  "osaka.yomiuri.co.jp" => [
    [%r'\A(.+) : 関西発 : YOMIURI ONLINE(読売新聞)\Z', '\1'].freeze,
    [%r'\A(.+) : (経済 科学)\Z', '\1'].freeze,
    [%r'\A(.+) : (経済 ピックアップ|特集|ニュース|人 遊 食)\Z', '\1'].freeze,
    [%r'\A(.+) : 地域経済ニュース\Z', '\1'].freeze,
  ].freeze,
  "response.jp" => [
    [%r'\A(.+) \| レスポンス自動車ニュース(Response.jp)\Z', '\1'].freeze,
  ].freeze,
  "sankei.jp.msn.com" => [
    [%r'\A(.+) - MSN産経ニュース\Z', '\1'].freeze,
    [%r'\A(.+) \(\d+/\d+ページ\)\Z', '\1'].freeze,
  ].freeze,
  "slashdot.jp" => [
    [%r'\A(.+) - スラッシュドット・ジャパン\Z', '\1'].freeze,
  ].freeze,
  "svr.sanyo.oni.co.jp" => [
    [%r'\A(.+) - 山陽新聞地域ニュース\Z', '\1'].freeze,
  ].freeze,
  "techon.nikkeibp.co.jp" => [
    [%r'\A(.+) - Tech-On!\Z', '\1'].freeze,
  ].freeze,
  "www.47news.jp" => [
    [%r'\A(.+) - 47NEWS(よんななニュース)\Z', '\1'].freeze,
    [%r'\A(.+) - 47NEWS \(よんななニュース\)\Z', '\1'].freeze,
  ].freeze,
  "www.afpbb.com" => [
    [%r'\A(.+) 国際ニュース : AFPBB News\Z', '\1'].freeze,
  ].freeze,
  "www.asahi.com" => [
    [%r'\Aasahi\.com(朝日新聞社):(.+)\Z', '\1'].freeze,
    [%r'\Aasahi\.com (朝日新聞社):(.+)\Z', '\1'].freeze,
    [%r'\Aasahi\.com:(.+)\Z', '\1'].freeze,
    [%r'\A(.+) - ことばなるほどね! - 学ぼう\Z', '\1'].freeze,
    [%r'\A(.+) - 最新ニュース - 読もう\Z', '\1'].freeze,
    [%r'\A(.+) - (社会|国際|トラベル|ビジネス・経済|政治|サイエンス)\Z', '\1'].freeze,
    [%r'\A(.+) - (関西|関西交通・旅ニュース)\Z', '\1'].freeze,
  ].freeze,
  "www.business-i.jp" => [
    [%r'\A(.+) - FujiSankei Business i\./Bloomberg GLOBAL FINANCE\Z', '\1'].freeze,
  ].freeze,
  "www.chugoku-np.co.jp" => [
    [%r'\A(.+) - 中国新聞\Z', '\1'].freeze,
  ].freeze,
  "www.chunichi.co.jp" => [
    [%r'\A中日新聞:(.+)\(CHUNICHI Web\)\Z', '\1'].freeze,
  ].freeze,
  "www.cnn.co.jp" => [
    [%r'\ACNN\.co\.jp:(.+)\Z', '\1'].freeze,
  ].freeze,
  "www.fnn-news.com" => [
    [%r'\AFNNニュース: (.+)\Z', '\1'].freeze,
  ].freeze,
  "www.hokkaido-np.co.jp" => [
    [%r'\A(.+)−北海道新聞\[.+\]\Z', '\1'].freeze,
  ].freeze,
  "www.jiji.com" => [
    [%r'\A時事ドットコム:(.+)\Z', '\1'].freeze,
  ].freeze,
  "www.kahoku.co.jp" => [
    [%r'\A河北新報 東北のニュース/(.+)\Z', '\1'].freeze,
    [%r'\A河北新報 (.+)\Z', '\1'].freeze,
  ].freeze,
  "www.kobe-np.co.jp" => [
    [%r'\A神戸新聞|(.+)\Z', '\1'].freeze,
    [%r'\A全国海外ニュース|(.+)\Z', '\1'].freeze,
    [%r'\A事件・事故|(.+)\Z', '\1'].freeze,
  ].freeze,
  "www.kyoto-np.co.jp" => [
    [%r'\A(.+):京都新聞\Z', '\1'].freeze,
  ].freeze,
  "www.mutusinpou.co.jp" => [
    [%r'\A(.+) by 陸奥新報\Z', '\1'].freeze,
  ].freeze,
  "www.nagasaki-np.co.jp" => [
    [%r'\A龍〜なが 長崎新聞ホームページ:(.+)\Z', '\1'].freeze,
  ].freeze,
  "www.nhk.or.jp" => [
    [%r'\ANHKニュース (.+)\Z', '\1'].freeze,
  ].freeze,
  "www.nishinippon.co.jp" => [
    [%r'\A(.+) / 西日本新聞\Z', '\1'].freeze,
  ].freeze,
  "www.tetsudo.com" => [
    [%r'\A(.+) - 鉄道コム\Z', '\1'].freeze,
  ].freeze,
  "www.tokyo-np.co.jp" => [
    [%r'\A東京新聞:(.+)\(TOKYO Web\)\Z', '\1'].freeze,
  ].freeze,
  "www.yomiuri.co.jp" => [
    [%r'\A(.+) : YOMIURI ONLINE(読売新聞)\Z', '\1'].freeze,
    [%r'\A(.+) : (社会|マネー・経済|国際|地域|旅ゅ〜ん!)\Z', '\1'].freeze,
    [%r'\A(.+) : 経済ニュース\Z', '\1'].freeze,
  ].freeze,
}.freeze

Class Method Summary collapse

Class Method Details

.cleanse_title(url, title) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
# File 'lib/ironnews_utility/core.rb', line 20

def self.cleanse_title(url, title)
  uri   = URI.parse(url)
  title = title.dup

  patterns = CleanseTitleTable[uri.host] || []
  patterns.each { |pattern, replace|
    title.gsub!(pattern, replace)
  }

  return title
end

.get_canonical_url(url) ⇒ Object



8
9
10
11
12
13
14
# File 'lib/ironnews_utility/core.rb', line 8

def self.get_canonical_url(url)
  url = url.dup
  CanonicalTable.find { |pattern, replace|
    !!url.sub!(pattern, replace)
  }
  return url
end

.reject?(url) ⇒ Boolean

Returns:

  • (Boolean)


16
17
18
# File 'lib/ironnews_utility/core.rb', line 16

def self.reject?(url)
  return FilterTable.any? { |pattern| pattern =~ url }
end