typo_textfilter_flickr.rb
上传用户:netsea168
上传日期:2022-07-22
资源大小:4652k
文件大小:3k
源码类别:

Ajax

开发平台:

Others

  1. require 'net/http'
  2. require 'flickr'
  3. class Typo
  4.   class Textfilter
  5.     class Flickr < TextFilterPlugin::MacroPost
  6.       plugin_display_name "Flickr"
  7.       plugin_description "Automatically generate image tags for Flickr images"
  8.       def self.help_text
  9.         %{
  10. You can use `<typo:flickr>` to display images from [Flickr](http://flickr.com).  Example:
  11.     <typo:flickr img="31367273" size="small"/>
  12. will produce an `<img>` tag showing image number 31367273 from Flickr.  This image will be linked to
  13. the Flickr page for this image, so you can zoom in and see larger versions.  It will also have a
  14. comment block attached if a description has been attached to the picture in Flickr.
  15. This macro takes a number of parameters:
  16. * **img** The Flickr image ID of the picture that you wish to use.  This shows up in the URL whenever
  17.   you're viewing a picture in Flickr; for example, the image ID for <http://flickr.com/photos/scottlaird/31367273>
  18.   is 31367273.
  19. * **size** The image size that you'd like to display.  Options are:
  20.   * square (75x75)
  21.   * thumbnail (maximum size 100 pixels)
  22.   * small (maximum size 240 pixels)
  23.   * medium (maximum size 500 pixels)
  24.   * large (maximum size 1024 pixels)
  25.   * original
  26. * **style** This is passed through to the enclosing `<div>` that this macro generates.  To float the flickr
  27.   image on the right, use `style="float:right"`.
  28. * **caption** The caption displayed below the image.  By default, this is Flickr's description of the image.
  29.   to disable, use `caption=""`.
  30. * **title** The tooltip title associated with the image.  Defaults to Flickr's image title.
  31. * **alt** The alt text associated with the image.  By default, this is the same as the title.
  32. }
  33.       end
  34.       def self.macrofilter(blog,content,attrib,params,text="")
  35.         img     = attrib['img']
  36.         size    = attrib['size'] || "square"
  37.         style   = attrib['style']
  38.         caption = attrib['caption']
  39.         title   = attrib['title']
  40.         alt     = attrib['alt']
  41.         begin
  42.           flickr      = ::Flickr.new(FLICKR_KEY)
  43.           flickrimage = ::Flickr::Photo.new(img)
  44.           sizes       = flickrimage.sizes
  45.           details     = sizes.find {|s| s['label'].downcase == size.downcase } || sizes.first
  46.           width       = details['width']
  47.           height      = details['height']
  48.           imageurl    = details['source']
  49.           imagelink   = flickrimage.url
  50.           caption   ||= sanitize(CGI.unescapeHTML(flickrimage.description)) unless flickrimage.description.blank?
  51.           title     ||= flickrimage.title
  52.           alt       ||= title
  53.           if(caption.blank?)
  54.             captioncode=""
  55.           else
  56.             captioncode = "<p class="caption" style="width:#{width}px">#{caption}</p>"
  57.           end
  58.           "<div style="#{style}" class="flickrplugin"><a href="#{imagelink}"><img src="#{imageurl}" width="#{width}" height="#{height}" alt="#{alt}" title="#{title}"/></a>#{captioncode}</div>"
  59.         rescue Exception => e
  60.           logger.info e
  61.           %{<div class='broken_flickr_link'>`#{img}' could not be displayed because: <br />#{e}</div>}
  62.         end
  63.       end
  64.     end
  65.   end
  66. end