root/lang/ruby/twitter_bot/47news/headline.rb @ 30649

Revision 9408, 2.6 kB (checked in by yimajo, 6 years ago)

lang/ruby/twitter_bot/47news:[fix]open_uriがエラーのとき何もせず終了するようにした

Line 
1#!/usr/bin/ruby
2
3# 47news.jpの地方記事一覧からスクレイピングしていってrssにして保存
4# それと新たにスクレイピングしたものを比較していって新しければ
5# twitterにupdate
6
7require 'rexml/document'
8require 'rubygems'
9require 'scrapi'
10require 'open-uri'
11require 'nkf'
12require 'pp'
13require 'kconv'
14require 'date'
15require 'rss'
16require 'rubygems'
17gem 'twitter'
18require 'twitter'
19
20
21$KCODE = 'u'
22DIR_ROOT = '/var/www/html/lab/twitter/47news/'
23
24location = ARGV[0]
25rss_path = ARGV[1]
26mail     = ARGV[2]
27user     = ARGV[3]
28
29scraper = Scraper.define {
30    process 'div.frameline > div.topContent > ul > li > a', "a[href]", "urls[]"=>"@href","titles[]"=>:text
31    result :urls,:titles
32}
33begin
34res = open('http://www.47news.jp/localnews/'+location+'/archives.php').read
35rescue OpenURI::HTTPError
36  exit!
37end
38
39html = NKF::nkf('-w -m0', res)
40
41news =  scraper.scrape(html, :parser => :html_parser)
42
43#comp
44
45if news.titles && news.urls
46    #RSS read
47    local_rss = rss_path + location + '.xml' #RSS
48   
49    local_rss = open(local_rss){ |file| RSS::Parser.parse(file.read) }
50   
51    if news.titles.size > 0
52        for i in 0 .. news.titles.size - 1
53            if news.titles[i] != ''
54                title = ''
55                sflg = false
56                if local_rss
57                    local_rss.items.each { |item|
58                        title = news.titles[i].gsub(/[ ]$/,"");
59                        if title == item.title
60                            #同じのがある
61                            sflg = true;
62                        end
63                    }
64                end
65                #同じのがなければそれを送信
66                unless sflg
67                    twit = Twitter::Base.new(mail,user)
68                    p title.to_s
69                    twit.update(Kconv.kconv(title.to_s + news.urls[i], Kconv::UTF8))
70                    sleep 5
71                end
72            end
73        end
74    end
75else
76    p 'Not Found'
77end
78
79
80#RSS write
81rss = RSS::Maker.make("1.0") do |maker|
82    maker.channel.about = "http://www.47news.jp/rss"
83    maker.channel.title = ""
84    maker.channel.description = ""
85    maker.channel.link = "http://www.47news.jp/"
86
87    if news.titles && news.urls
88        for i in 0 .. news.titles.size - 1
89            if news.titles[i] != ''
90                item = maker.items.new_item
91                item.link = news.urls[i]
92                item.title = news.titles[i].gsub(/[ ]$/,"")
93            end
94        end
95    end
96end
97
98fname = DIR_ROOT + "rss/" + location + ".xml"
99
100File.open(fname, "w") {|file|
101    file.puts(rss.to_s.toutf8)
102}
Note: See TracBrowser for help on using the browser.