Changeset 37413 for platform/tdiary

Show
Ignore:
Timestamp:
05/07/10 01:44:49 (5 years ago)
Author:
drry
Message:

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • platform/tdiary/plugin/blackbird-pie.rb

    r37408 r37413  
    33# blackbird-pie.rb - BlackBird plugin for tDiary 
    44# 
    5 # Copyright (C) 2009, hb <smallstyle@gmail.com> 
     5# Copyright (C) 2010, hb <smallstyle@gmail.com> 
    66# 
    77# usage: 
     
    1616require 'rexml/document' 
    1717require 'time' 
     18require 'uri' 
    1819 
    1920def twitter_statuses_show_api( tweet_id ) 
     
    3435 
    3536def blackbird_pie( src ) 
    36         if %r|http://twitter.com/(.{1,15})/status(es)?/([0-9]{3,15})|i =~ src.to_s 
    37                 src = $3 
     37        if %r|http://twitter.com/[^/]{1,15}/status(?:es)?/([0-9]+)| =~ src.to_s.downcase 
     38                src = $1 
    3839        end 
    39                  
    40         return unless /([0-9]{3,15})/i =~ src.to_s 
     40 
     41        return unless /\A[0-9]+\z/ =~ src.to_s 
    4142 
    4243        cache = "#{@cache_path}/blackbird.pstore" 
     
    4546        db = PStore.new( cache ) 
    4647        db.transaction do 
    47                 key = src  
     48                key = src 
    4849                db[key] ||= {} 
    4950                if db[key][:xml] 
     
    6061 
    6162        doc = REXML::Document::new( REXML::Source.new( xml ) ).root 
    62          
     63 
    6364        tweet_id = doc.elements['//id'].text 
    6465        screen_name = doc.elements['//user/screen_name'].text 
     
    7071        timestamp = Time.parse( doc.elements['//created_at'].text ).to_s 
    7172        content = doc.elements['//text'].text 
    72         content.gsub!( %r|(http://\S+)| ){ %Q|<a href="#{$1}">#{$1}</a>| } 
    73         content.gsub!( /@([a-z0-9_-]{1,15})/ ){ %Q|<a href="http://twitter.com/#{$1}">@#{$1}</a>| } 
    74         content.gsub!( /\s*\#([a-zA-Z0-9]*)[\s\r]*/ ){ %Q|<a href="http://twitter.com/search?q=%23#{$1}">##{$1}</a>| } 
    75          
     73        content.gsub!( URI.regexp( %w|http https| ) ){ %Q|<a href="#{$&}">#{$&}</a>| } 
     74        content = content.split( /(<[^>]*>)/ ).map do |s| 
     75                next s if s[/\A</] 
     76                s.gsub!( /@(?>([a-zA-Z0-9_]{1,15}))(?![a-zA-Z0-9_])/ ){ %Q|<a href="http://twitter.com/#{$1}">#{$&}</a>| } 
     77                s.gsub( /#([a-zA-Z0-9]{1,16})/ ){ %Q|<a href="http://twitter.com/search?q=%23#{$1}">#{$&}</a>| } 
     78        end.join 
     79 
    7680        r = <<-HTML 
    7781        <!-- http://twitter.com/#{screen_name}/status/#{tweet_id} --> 
    7882        <div class="bbpBox" style= 
    7983        "background:url(#{background_url}) #{profile_background_color};padding:20px;"> 
    80         <p class='bbpTweet' style= 
     84        <p class="bbpTweet" style= 
    8185                "background:#fff;padding:10px 12px 10px 12px;margin:0;min-height:48px;color:#000;font-size:16px !important;line-height:22px;-moz-border-radius:5px;-webkit-border-radius:5px;"> 
    8286                #{content} <span class="bbpTimestamp" style= 
     
    8892                "http://twitter.com/#{screen_name}"><img alt="#{name}" src= 
    8993                "#{avatar}" style= 
    90                 "float:left;margin:0 7px 0 0px;width:38px;height:38px;"></a> 
     94                "float:left;margin:0 7px 0 0;width:38px;height:38px;"></a> 
    9195                <strong><a href= 
    9296                "http://twitter.com/#{screen_name}">#{screen_name}</a></strong><br>