Ruby On Rails URLを元にSlideShareAPIを使ってスライド資料を表示させるソースを書いてみました。

Ruby On Railsで基本的なブログ機能を実装する手順をベースに書いています。

SlideShareAPIは公式ドキュメントを参考にして下さい。

■処理概要
URLからスライドIDを抽出し、View層で表示させる。
#今回はController層でメソッドを書きましたが、共通UtilやModel層で書く機能だと思います。

SlideShare APIの特徴として、secret_key + timestampをSHA1でハッシュ化する必要があります。
そこに気がつくまでなかなか時間がかかりました。

/app/controllers/notes_controller.rb


  def callSlideshare(memo)
    require 'rexml/document'
    require 'digest/sha1'
    require "net/https"
    require "uri"
    
    #SlideShare API呼び出し
    url_base = "https://www.slideshare.net/api/2/get_slideshow?slideshow_url="
    url_option  = "&exclude_tags=1&detailed=1&get_transcript=1"    
    api_key = "****"
    secret_key = "****"
    timestamp  = Time.now.to_i
    #SlideShre APIはsecret_key + timestampをSHA1でハッシュ化する必要がある
    hash = Digest::SHA1.hexdigest(secret_key+timestamp.to_s)
    #登録されたURLを正規表現に変更
    url_escape = CGI.escape(memo)
    #APIを叩くためのURL生成
    url = url_base + url_escape + "&api_key=" +  api_key + "&hash=" + hash + "&ts=" + timestamp.to_s + url_option
    uri = URI.parse(url)

    #APIリクエスト
    http = Net::HTTP.new(uri.host, uri.port)
    http.use_ssl = true
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE
    request = Net::HTTP::Get.new(uri.request_uri)
    response = http.request(request)
    status = response.code
    
    case status
    when "200"
        #XML形式で取得
        doc = REXML::Document.new(response.body)   
        #必要項目を取得
        @slideId = doc.elements['Slideshow/ID'].text
      else
        @slideId = "NG"        
    end
    
    return @slideId
  end

/app/views/notes/show.html.erb


  <dd>
  	<iframe src="http://www.slideshare.net/slideshow/embed_code/<%= @slideId %>?rel=0" width="427" height="356" 
  	          frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC;
  	          border-width:1px 1px 0;margin-bottom:5px" allowfullscreen webkitallowfullscreen mozallowfullscreen>
  	</iframe>
  </dd>