[SlideShare][Heroku][Ruby][API]SlideShareのAPIを叩いてスライドをDLするRubyスクリプトをHerokuにデプロイした
あらすじ
slideshareを社内から閲覧する事を禁じられているので、ワンクッションおいてスライドのpptを落とせるようにしたい
参考サイト
とりあえず公式サイトを抑えておけばいけそう。
流れ
API申請
- slideshare -> Developer & APIのページからApply for API keyに移動
- ログイン or 新規アカウント作成
- Name、E-Mail、How do you want to use the API?を入力し送信。頑張って英文書く。
I want to get slideshare's slide from API.
- 送信されたメールに貼られているAPI KeyとShared Secretを控える
パラメータ
- slideshare -> Documentationを見ながら必要なパラメータを調べる
|*api_key|さっきのAPI Key|
|*ts|タイムスタンプ[1]|
|*hash|さっきのShared Secretとこれから取得するtsでハッシュを作る[2]|
|*(username)|登録ID|
|*(password)|パスワード|
全然関係ないけど、Documentationのページ内にあるi.e.って単語を初めて見たのでググってみた。http://www.masahiko.info/life/archives/000799.html:title that is … すなわちとかそういう意味らしい。e.g.で例えば、for example的な。
ソース
ソースはこんな感じ。
require 'openssl'
require 'uri'
require 'net/http'
url = 'http://www.slideshare.net/api/2/get_slideshow'
param = Hash.new
param["slideshow_url"] = 'http://www.slideshare.net/gishi/wicket-presentation'
param["api_key"] = 'XXXXXXXX'
param["sharedsecret"] = 'XXXXXXXX'
# ts
param["ts"] = Time.now.to_i.to_s
# hash
param["hash"] = Digest::SHA1.hexdigest(param["sharedsecret"]+param["ts"])
uri = URI.parse(url)
Net::HTTP.new(uri.host).start do |http|
#Net::HTTP.new(uri.host, 80, ENV["PROXY"], 8080).start do |http|
uri_param = param.sort.map {|i|i.join('=')}.join('&')
res = http.get(uri.path + '?' + uri_param)
puts res.body
end
成功するとこんな感じの内容が返ってくる。
<?xml version="1.0" encoding="UTF-8"?>
<Slideshow>
<ID>579496</ID>
<Title>Wicket体験談</Title>
<Description>第1回Wicket勉強会のライトニングトーク発表資料</Description>
<Status>2</Status>
<Username>gishi</Username>
<URL>http://www.slideshare.net/gishi/wicket-presentation</URL>
<ThumbnailURL>http://cdn.slidesharecdn.com/wicket-1220375587470160-8-thumbnail</ThumbnailURL>
<ThumbnailSmallURL>http://cdn.slidesharecdn.com/wicket-1220375587470160-8-thumbnail-2</ThumbnailSmallURL>
<Embed><div style="width:425px" id="__ss_579496"><strong style="display:block;margin:12px 0 4px"><a href="http://www.slideshare.net/gishi/wicket-presentation" title="Wicket体験談">Wicket体験談</a></strong><object id="__sse579496" width="425" height="355"><param name="movie" value="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=wicket-1220375587470160-8&stripped_title=wicket-presentation&userName=gishi" /><param name="allowFullScreen" value="true"/><param name="allowScriptAccess" value="always"/><param name="wmode" value="transparent"/><embed name="__sse579496" src="http://static.slidesharecdn.com/swf/ssplayer2.swf?doc=wicket-1220375587470160-8&stripped_title=wicket-presentation&userName=gishi" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" wmode="transparent" width="425" height="355"></embed></object><div style="padding:5px 0 12px">View more <a href="http://www.slideshare.net/">presentations</a> from <a href="http://www.slideshare.net/gishi">Hiroto Yamakawa</a>.</div></div></Embed>
<Created>Tue Sep 02 10:14:12 -0500 2008</Created>
<Updated>Tue Sep 02 10:16:15 -0500 2008</Updated>
<Language>ja</Language>
<Format>ppt</Format>
<Download>1</Download>
<DownloadUrl>http://s3.amazonaws.com/ppt-download/wicket-1220375587470160-8.ppt?response-content-disposition=attachment&Signature=ABs151smgWZ9213%2FyFq81fnMc6A%3D&Expires=1328606581&AWSAccessKeyId=AKIAJLJT267DEGKZDHEQ</DownloadUrl>
<SlideshowType>0</SlideshowType>
<InContest>0</InContest>
</Slideshow>
おー取れた。んで、xmlの中のDownloadUrlからpptをゲットできた! これをSinatraでWebアプリケーションにしてHerokuにデプロイすれば職場から行けるかな!?
→いけた! 自分の中ではお役立ち。http://tycoon-slidedown.heroku.com/:title
[1] Set this to the current time in Unix TimeStamp format, to the nearest second(?).
[2] Set this to the SHA1 hash of the concatenation of the shared secret and the timestamp (ts). i.e. SHA1 (sharedsecret + timestamp). The order of the terms in the concatenation is important.