root/lang/ruby/chokan/trunk/plugins/twitter_id.rb @ 2974

Revision 2974, 2.2 kB (checked in by yoko, 7 years ago)

lang/ruby/chokan/trunk/plugins/twitter_id.rb: 変数名変更
lang/ruby/chokan/trunk/plugins/kayac_wc.rb: private忘れ
lang/ruby/chokan/trunk/plugins/lastfm.rb: 聞いてない場合にもURL出すように + 台詞変更

Line 
1
2require 'chokan/plugin_base'
3require 'net/http'
4require 'hpricot'
5require 'htmlentities'
6
7class TwitterId < Chokan::PluginBase
8        def initialize(config, chokan)
9                super
10                @prefix = @config['prefix'] || 't '
11        end
12
13        def on_privmsg(prefix, channel, message)
14                case message
15                when /^#{@prefix}(.+)$/i
16                        notice(channel, twitterer(Regexp.last_match[1]))
17                end
18        end
19
20        private
21        def twitterer(user)
22                return "http://twitter.com/#{user}" if user == 'home'
23
24                Net::HTTP.start('twitter.com', 80) do |http|
25                        begin
26                                r = Net::HTTP::Get.new("/users/show/#{user}.xml")
27                                r.basic_auth @config['screen_name'], @config['password']
28                                response = http.request(r)
29                                log response.code.inspect
30
31                                case response.code.to_i
32                                when 400
33                                        return "くぁwせdrftgyふじこlp; http://twitter.com/#{user}"
34                                when 401
35                                        return "見せなさいよ! いるのは分かってるんだからねっ! http://twitter.com/#{user}"
36                                when 404
37                                        return 'いないわよ?'
38                                end
39
40                                xml = Hpricot(response.body)
41                                html = HTMLEntities.new
42                                name      = html.decode((xml/'name').inner_html)
43                                location  = html.decode((xml/'location').inner_html)
44                                uri       = (xml/'url').inner_html
45                                following = (xml/'friends_count').inner_html
46                                followers = (xml/'followers_count').inner_html
47                                favorites = (xml/'favourites_count').inner_html
48                                favotter  = favotter(user)
49                                updates   = (xml/'statuses_count').inner_html
50                                follow_ratio   = '%.2f' % (followers.to_f / following.to_f) || '-'
51                                favotter_ratio = '%.2f' % (favotter.to_f / updates.to_f * 100)  || '-'
52
53                                "#{name}@#{location} [#{format(following)}/#{format(followers)}(#{follow_ratio}), #{format(favorites)}favs, #{format(updates)}updates/#{format(favotter)}favotter(#{favotter_ratio}%)] #{uri} http://twitter.com/#{user} http://favotter.matope.com/user.php?user=#{user}"
54                        rescue Exception => e
55                                log e
56                                "http://twitter.com/#{user}"
57                        end
58                end
59        end
60
61        def favotter(user)
62                Net::HTTP.start('favotter.matope.com', 80) do |http|
63                        response = http.get("/user.php?user=#{user}")
64                        doc = Hpricot(response.body)
65
66                        /\((\d+)\)/.match(doc.at('title').inner_html).to_a[1]
67                end
68        end
69
70        def format(i)
71                i.to_s.gsub(/(\d)(?=(\d{3})+(?!\d))/, '\1,').sub(/\.0+$/, '')
72        end
73end
Note: See TracBrowser for help on using the browser.