File: tco.rb

package info (click to toggle)
mikutter 5.0.4%2Bdfsg1-2
  • links: PTS, VCS
  • area: main
  • in suites: bookworm
  • size: 9,700 kB
  • sloc: ruby: 21,307; sh: 181; makefile: 19
file content (43 lines) | stat: -rw-r--r-- 1,291 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
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
# -*- coding: utf-8 -*-
# エンティティで展開しきれなかった t.co で短縮されたURLを展開する。
# http://www.gistlog.org/gist/1008272

require 'uri'
require 'net/http'

module Plugin::TCo
  SHRINKED_MATCHER = /\Ahttps?:\/\/t\.co\//.freeze

  extend self

  def expand_url(url)
    no_mainthread
    begin
      res = Timeout.timeout(5){ Net::HTTP.get_response(URI.parse(url)) }
      if res.is_a?(Net::HTTPRedirection)
        res["location"]
      else
        url end
    rescue Exception => e
      warn e
      url end end
end

Plugin.create :tco do
  on_gui_timeline_add_messages do |i_timeline, messages|
    messages.map(&:entity).each do |entity|
      entity.select{|_|
        :urls == _[:slug] and Plugin::TCo::SHRINKED_MATCHER =~ _[:url]
      }.each do |link|
        SerialThread.new do
          notice "detect tco shrinked url: #{link[:url]} by #{entity.message}"
          expanded = Plugin::TCo.expand_url(link[:url])
          entity.add link.merge(url: expanded, face: expanded) end
      end end end

  filter_expand_url do |urlset|
    divided = urlset.group_by{|url| !!(Plugin::TCo::SHRINKED_MATCHER =~ url) }
    divided[false] ||= []
    divided[true] ||= []
    [divided[false] + divided[true].map(&Plugin::TCo.method(:expand_url))] end
end