Perl日記

日々の知ったことのメモなどです。Perlは最近やってないです。

Slideshare API


今日は今まで一枚岩で割とごちゃごちゃしていたスクリプトをリファクタリングした。
久しぶりにすごく楽しく書けた気がする。
今まで学んできたこと、経験してきたことがうまく生かせられた、と主観評価。
これでもう少し楽しく書いていけそうだ。


で最近ちょくちょくページに貼付けられているスライドの資料、あれをもってきたいなーと思って調査。
SlideShare
いつもながら乗り遅れております。
更に「API」で検索したら簡単に出てきた。
最近はほんとどこでも用意してくれてるので助かります。
SlideShare » Developer & API
忘れないように以下メモ。


最初はとりあえず検索APIを試してみる。
が、その前に API用の key が必要らしい。
が、その前にアカウントが必要らしい。


というわけでアカウントを取得して、API用key取得フォームに入力。
Join SlideShare
「Account Type」は、……まあ「Default」でいいのかな。
あとは国とか市とか入れて、簡単に使う理由入れて、post 。
メールでAPI用のkeyと、その他にもSecret keyみたいのも一緒に送られてきた。
改めてAPIドキュメントを読んでみる。
SlideShare » Developer Documentation
なるほど、時間とあわせて、ハッシュにしたものも一緒にクエリとして送らないといけないみたい。


すなわち、検索だけするための最低限のGETクエリは以下。

  • api_key
    • SlideAhare API に登録して、もらったやつ
  • ts
  • hash
    • 「メールできた「Shared Secret」の8桁」と「上記ts」を文字列結合してSHA1のhexでハッシュ化した文字列
  • q
    • 検索文字列

テスト。

#!/usr/bin/env perl
use strict;
use warnings;
use URI;
use LWP::Simple qw/ get /;
use Digest::SHA qw/ sha1_hex /;

my $uri = URI->new('http://www.slideshare.net/api/2/search_slideshows');

my $api_key = "xxxxxxxx";
my $secret_key = "yyyyyyyy";
my $time = time;
print "Time is $time.\n";
my $hash = sha1_hex($secret_key.$time);

$uri->query_form(
    api_key => $api_key,
    hash => $hash,
    ts => $time,
    q => 'Perl'
);

my $content = get($uri);
print $content;

open my $fh, '>', "slideshare$time.xml" or die "Can't open. $!";
print $fh $content;
close $fh;
$ ./slideshare_test1.pl
Time is 1283605277.
<?xml version="1.0" encoding="UTF-8"?>
<Slideshows>
  <Meta>
    <Query>Perl</Query>
    <ResultOffset>1</ResultOffset>
    <NumResults>12</NumResults>
    <TotalResults>6170</TotalResults>
  </Meta>
  <Slideshow>
    <ID>134447</ID>
    <Title>Perl 5.10 for People Who Aren&amp;rsquo;t Totally Insane</Title>
…

できました。
がんばってつくっていこうー。


というか、Digest::SHA って 5.12.1 では標準なのかな? 入ってたけど。