• マイページ
  • アップロード
  • クリップ
  • プレイリスト
  • サークル
  • 地図
  • タグ
  • カテゴリ
  • ウィジェット

開発者向け情報 > FlipClipウェブサービス > フィード

フィードとは

FlipClipは、各種リソースに関して、RSS2.0、Atom、JSON形式のフィードを提供しています。
フィードを利用すると一般公開されたクリップの一覧を取得したり、指定のユーザーの一般公開クリップ一覧を取得することができます。
パラメータの指定により、様々な条件でフィードを絞り込むこともできます。
また、ユーザー認証機能と組み合わせれば、プライバシーの設定に関係なく、認証されたユーザーのクリップ一覧を取得することも可能です。

公開フィード一覧

クリップ検索用フィード
クリップのフィードは、FlipClipに投稿されたクリップのリストです。以下のクリップの一覧を取得、検索することができます。
  • 一般公開クリップ
  • 特定ユーザーのクリップ
  • 特定ユーザーの友だちのクリップ
  • 特定ユーザーのお気に入りクリップ
パラメータの指定により、タグやカテゴリ、撮影日時など様々な条件でフィードを絞り込むこともできます。
WSSEによるフィードの認証機能を使えば、プライバシーが設定されたクリップを含むクリップの一覧を取得することも可能です。

フィードのフォーマット

FlipClipでは現在RSS2.0、Atomフィード、JSONフィードの3種類のフィードを提供しています。
フォーマットの指定は以下のどちらかの方法で行います。

クエリパラメータにより指定
フィードのURLにフォーマットを指定するクエリパラメータ、_acceptを指定することでフォーマットを指定することができます。クリップのフィードをAtomフィード形式で取得する場合は以下のようにパラメータを指定します。
http://www.flipclip.net/clips/?_accept=atomfeed
HTTPのAcceptヘッダにより指定
HTTPリクエストのヘッダにAcceptヘッダを指定することによりフォーマットを指定することができます。クリップのフィードをAtomフィード形式で取得する場合は以下のようなリクエストを送ります。
GET /clips/
Accept: application/x.atom+xml

フォーマットとそれを指定する際のパラメータ値の対応表です。

フォーマット クエリパラメータ(_accept) Acceptヘッダ
Atomフィード atomfeed application/x.atom+xml
JSONフィード json application/json
RSS2.0(Podcast) rss もしくは podcast application/rss+xml

※クエリパラメータとAcceptヘッダが両方指定された場合は、Acceptヘッダが優先されます。
Acceptヘッダに複数のContent-typeを指定した場合、Atomフィード、JSONフィード、RSS2.0の順に優先されます。
また、AcceptヘッダにContent-type, text/htmlが含まれている場合、最優先され、HTMLで結果を返却します。

フィードの認証

フィードのURLにリクエストを送信する際に、WSSE認証を用いたユーザー認証を行うことができます。
ユーザーのクリップフィードを取得する際、ユーザー認証を通過したユーザーとフィードのユーザーが一致した場合、 そのリクエストを本人のリクエストと判断し、一般公開クリップ以外のプライベートなクリップも返却します。

WSSE認証とは、認証用文字列をHTTPのX-WSSEヘッダを用いて送信する認証方式です。WSSE認証用文字列にはユーザー名とパスワードが含まれ、 パスワードはSHA1アルゴリズムによって暗号化されたダイジェストとして送信されます。 そのため、Basic認証などと比較して、よりセキュアな認証が可能となります。 送信するX-WSSEヘッダのサンプルは以下のようになります。(実際には一行です)

X-WSSE: UsernameToken Username="flipclip", PasswordDigest="ZCNaK2jrXr4+zsCaYK/YLUxImZU=", 
Nonce="Uh95NQlviNpJQR1MmML+zq6pFxE=", Created="2006-04-11T03:20:15Z"

Username
FlipClipユーザーID
Nonce
HTTPリクエスト毎に生成したセキュリティ・トークンをBase64エンコードした文字列
Created
Nonceが作成された日時をISO-8601表記で記述したもの
PasswordDigest
Base64エンコード前のNonce, Created, SHA1アルゴリズムでダイジェスト化したパスワードを16進表記した文字列を文字列連結し、SHA1アルゴリズムでダイジェスト化して生成された文字列を、Base64エンコードした文字列

WSSE認証ヘッダを生成するサンプルスクリプト ( Perl )

#!/usr/bin/env perl
use strict;
use Digest::SHA1 ();
use MIME::Base64 ();

my ($user, $pass, $proxy) = @ARGV;
die "username and password is required\n" unless $user and $pass;

# パスワードは生のまま使わず、一度SHA1でダイジェスト化したものを16進表記したものを使います。
my $pass_digest = sha1_hex($pass);

my $auth_header = create_auth_header($user, $pass_digest, $proxy);
print "$auth_header\n";

# このサブルーチンはPerlモジュールLWP::Authen::Wsseから拝借しています。
sub create_auth_header {
    my ($user, $pass, $proxy) = @_;

    my $now         = now_w3cdtf();
    my $nonce       = make_nonce();
    my $nonce_enc   = MIME::Base64::encode_base64($nonce, '');
    my $digest      = MIME::Base64::encode_base64(
        Digest::SHA1::sha1($nonce . $now . $pass), ''
    );

    my $auth_header = ($proxy ? 'Proxy-Authorization' : 'Authorization');
    my $wsse_value  = 'UsernameToken ' . join(
        ', ',
        qq(Username="$user"),
        qq(PasswordDigest="$digest"),
        qq(Nonce="$nonce_enc"),
        qq(Created="$now"),
    );
    return $wsse_value;
}

sub make_nonce {
    return Digest::SHA1::sha1(Digest::SHA1::sha1(time() . {} . rand() . $$));
}

sub now_w3cdtf {
    my ($sec, $min, $hour, $mday, $mon, $year) = gmtime();
    $mon++; $year += 1900;

    return sprintf(
        "%04s-%02s-%02sT%02s:%02s:%02sZ",
        $year, $mon, $mday, $hour, $min, $sec,
    );
}