見出し画像

SlideShare APIを使ってみる

みなさん、こんにちは、こんばんは。S.Kと申します。

自分はこれまでの記事で、スライドをスライドシェアにアップロードし、公開してきました。スライドシェア便利ですよね。

SlideShare API

さて、スライドシェアにはAPIあるのかな、何かできるかな、とふと思いました。公式ドキュメントがあったので少しのぞいてみることにしましょう。

The SlideShare API is available free for non-commercial use by outside developers.

とあるので、
SlideShare APIは、外部の開発者が非営利目的であれば無料で利用できそうです。

・Edit slideshows
・Retrieving slideshow information by user, tag, or group
・Retrieving groups, tags, and contacts by user
・Search slideshows

ふむ、スライドの検索ができるようですので、最初はこれで私のアップロードしたスライド情報が取得できるか試してみましょうか。

前提として、スライドシェアにアカウントを持ってることが必要です。

API利用準備(1)

先ほどの公式ドキュメントから

How do I start?
Apply for an API key. This will be sent to you by e-mail instantly.
・Read the API documentation for complete information about the API calls available.
・See the resources section for useful links and implementation basics.
・Join the Slideshare Developers Group to keep in touch with the SlideShare developer community.

まず、WebAPIですのでAPIKeyを取得する必要があるようです。
左メニューにある[Apply for API key]をクリックします。

画像1

①名前と③APIをどう使うか、を書きます。

画像2

人間であることを証明して、Apply for API Keyをクリックします。

スクリーンショット 2020-11-01 21.19.09

クリック後、APIKeyをメールで送ったとのことなので、メールをチェックします。

画像4

届いてました。API Keyの不正利用には気をつけてください。必要な人にしか教えないことです。当たり前ですが。

画像5

これだけで十分かと思いきや、まだ準備が必要でした。

API利用準備(2)

スクリーンショット 2020-11-01 21.32.02

API Validation using the SlideShare API
All requests made using the SlideShare API must have the following parameters:
・api_key: Set this to the API Key that SlideShare has provided for you.
・ts: Set this to the current time in Unix TimeStamp format, to the nearest second(?).
・hash: 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.

ドキュメントに戻るんですが、どうやらapi_keyの他に、tsやhashといったパラメータが必須のようです。

api_keyは先ほどのメールに記載のあったもので良いです。

tsはUnix TimeStamp形式の現在時間を指定しろ、ということですね。
この値はPythonで取得できます(後述)

hashは、メールに記載のあるShared Secretの値と、上のtsの値を結合した文字列をSHA1 hash関数で変換したものを指定します。
hash関数(SharedSecret+ts)
この処理もPythonでできます(後述)

プライベートなデータを取得する場合は、別にユーザー名とパスワード(認証情報)を指定する必要がありますが、今回は利用しないので省略します。

ここまで準備できればあとは実行するだけです。今回もPythonで呼び出してみましょう。

PythonでAPIを実行

今回はユーザー名を指定して、
そのユーザーの持つスライド情報を取得するAPIを実行してみます。

スクリーンショット 2020-11-01 23.41.01

Get Slideshows By User
Request Type HTTPS GET
Authorization None
URL https://www.slideshare.net/api/2/get_slideshows_by_user

コード
API KeyとSecretはメール記載のものに変更ください。
あとユーザー名のところも情報の欲しいユーザーに変えてください。

先ほど述べたUNIX時間やハッシュ関数での変換も実装しています。
hashlib.sha1なんですが、引数をエンコードしないと使えないみたいなので、
encode('utf-8')を使ってます。

import hashlib
import datetime 
import pytz
import requests

apikey='xxxxxx'
secret='yyyyyy'
userid='ssusere0a682' #S.Kのスライドシェアユーザ名
api_url='https://www.slideshare.net/api/2/get_slideshows_by_user' 

#現在時刻
tz = pytz.utc
now = datetime.datetime.now(tz)
unix = int(now.timestamp()) 

#sharedsecret + timestamp
text=secret+str(unix)

#ハッシュ
hashvalue=hashlib.sha1(text.encode('utf-8')).hexdigest()

#GETメソッドのパラメータ指定
params = {'api_key': apikey, 'ts': str(unix), 'hash': hashvalue, 'username_for':userid}

 #API実行 response = requests.get(api_url, params=params)

#結果確認
print(response.url)
print(response.text)

イメージついたでしょうか?

結果

結果はXML形式で返ってきます。jsonじゃないんですねぇ。

https://www.slideshare.net/api/2/get_slideshows_by_user?api_key=xxxxxx&ts=ttt&hash=ttttt&username_for=ssusere0a682
<?xml version="1.0" encoding="UTF-8"?>
<User>
 <Name>ssusere0a682</Name>
 <Count>39</Count>
<Slideshow>
 <ID>239041995</ID>
 <Title>Re:Re:ゲーム理論入門 第2回 - ナッシュ均衡の定義と関連定理 -</Title>
 <Description>https://www.nicovideo.jp/watch/sm33986092
https://www.youtube.com/watch?v=7B2fI8LBXiE</Description>
 <Status>2</Status>
 <Username>ssusere0a682</Username>

・・・

最初の1行はパラメータつきのAPIの全体です。print(response.url)の出力結果です。(実際にはAPI Keyには値が入ってます)

2行目以降がprint(response.text)の出力結果です。なので、実際にAPI実行した時の戻りのXMLになります。
先日アップロードしたスライドがみて取れます。
特に制限していないので、私がアップロードしたスライド全部の情報が取得されてます。

さて、案外簡単にAPIを利用できたのではないでしょうか。

edit_slideshowを使えば、すでにアップロードずみのスライドの情報を編集できるようです。これはまたの機会に記事にできればと思います。

で、これ何に使えるの?

当然スライドシェアと連携するような何かを作るときに必要になってくる知識です。が、他に何か面白いことに使えないかなぁと、考えているところです。

今回はAPIを使ってみよう、ってことなので、
ひとまず宿題とさせてください。。

この記事が誰かの役に立つことを願っています。笑
需要があればこういう感じの記事も書こうかなぁと思います。

(おまけ)KeyNote日本語表示されない問題


MacのKeyNoteで作成したスライドの、日本語が表示されない仕様です。これには悩まされました。
ただ、世の中素晴らしい方がちゃんと原因と解決策を提示してくれてます。ありがとうございます。

以下のサイトで資料をドラッグアンドドロップするだけ。

参考にしたサイト

基本の文字列連結

SHA1計算について

UNIX時間について

SHA1計算でエラー(Unicode-objects must be encoded before hashing)

Python Requests, GETメソッド


活動費、テキスト購入費に充てたいと思います。宜しくお願い致します。