The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

WebService::Shutterstock::Customer - Class allowing API operations in the context of a specific customer

VERSION

version 0.006

SYNOPSIS

        my $customer = $shutterstock->auth("my-user" => "my-password");

        # retrieve list of lightboxes
        my $lightboxes = $customer->ligthboxes;

        # retrieve a specific lightbox for this user
        my $lightbox = $customer->lightbox(123);

        my $subscriptions = $customer->subscriptions;
        my $enhanced_subscription = $customer->subscription(license => 'enhanced');

        my $download_history = $customer->downloads;

        # license an image (if you only have a single active subscription)
        my $licensed_image = $customer->license_image(
                image_id => 59915404,
                size     => 'huge'
        );

        # license an image (if you have more than one active subscription)
        my $licensed_image = $customer->license_image(
                image_id     => 59915404,
                size         => 'huge',
                subscription => { license => 'standard' }
        );

DESCRIPTION

This class provides access to API operations (download history, lightbox interaction, subscriptions, etc) that require an authenticated customer (via "auth" in WebService::Shutterstock).

METHODS

account_id

Retrieves the account ID for this account.

metadata_field_definitions

Retrieves the set of metadata fields for your account (if so configured by Shutterstock). Returns an ArrayRef of HashRefs (or undef if this feature doesn't apply to your account). When licensing an image you should provide the required metadata values using the name_api values specified for each metadata field returned by this method.

subscriptions

Returns an ArrayRef of WebService::Shutterstock::Subscription objects for this customer account.

subscription

Convenience wrapper around the find_subscriptions method that always returns the first match (useful when you're matching on a field that is unique like id or license).

        # find the (single) subscription providing an enhanced license
        my $media_digital_subscription = $customer->subscription(license => 'enhanced');

find_subscriptions

Retrieve a list of WebService::Shutterstock::Subscription objects, based on the criteria passed in to the method. Filter criteria should have WebService::Shutterstock::Subscription attribute names as keys with the value to be matched as the value. Subscriptions that match ALL the provided criteria are returned as a list. Some examples:

        # simple equality filters
        my @active_subscriptions = $customer->find_subscriptions( is_active => 1 );
        my @active_subscriptions = $customer->find_subscriptions( is_active => 1 );

        # regular expressions work too
        my @all_media_subscriptions = $customer->find_subscriptions( license => qr{^media} );

        # use an anonymous sub for more detailed filters (i.e. subscriptions expiring in the 
        my @soon_to_expire = $customer->find_subscriptions(
                is_active            => 1,
                unix_expiration_time => sub { shift < time + ( 60 * 60 * 24 * 30 ) }
        );

lightboxes($get_extended_info)

Returns an ArrayRef of WebService::Shutterstock::Lightbox objects for this customer acount. By default, it gets only the lightbox information and the list of image IDs in the lightbox. If you would like to retrieve more details about those images (specifically sizes and thumbnail URLs) in a single HTTP request, just pass a true value as the only argument to this method.

lightbox($id)

Returns a specific lightbox (as a WebService::Shutterstock::Lightbox object) for the given $id (it must belong to this user). If that lightbox doesn't exist, undef will be returned. Unfortunately, Shutterstock's API currently returns an HTTP status of 500 on an unknown lightbox ID (which could mask other error situations).

downloads

Retrieve the download history for this customer account. You can specify a page_number argument if you prefer to retrieve a single page of results (starting with page 0).

The data returned will be a HashRef keyed by the subscription ID used to download the images and will look something like this:

        { "123456" =>            # subscription ID
                [
                        {
                                image_id => 1,
                                license  => 'standard',
                                time     => '2012-11-01 14:16:08',
                        },
                        {
                                image_id => 2,
                                license  => 'premier',
                                metadata => { purchase_order => 'XYZ', client => 'My Client' },
                                time     => '2012-11-01 14:18:39',
                        },
                        # etc...
                ]
        }

You can fetch the redownloadable_state of a particular image (image_id must also be specified):

        my $redownloadable_state = $customer->downloads(
                image_id => 11024440,
                field    => "redownloadable_state"
        );

In this call, you should see an extra field inside the image block indicating whether the image qualifies as a redownload under that subscription:

        { "123456" =>            # subscription ID
                [
                        {
                                image_id => 1,
                                license  => 'standard',
                                time     => '2012-11-01 14:16:08',
                                redownloadable_state => 1          # boolean
                        }
                ]
        }

license_image(image_id => $image_id, size => $size)

Licenses a specific image in the requested size. Returns a WebService::Shutterstock::LicensedImage object.

If you have more than one active subscription, you will need to specify which subscription you would like to use for licensing with a subscription argument. You can pass in a WebService::Shutterstock::Subscription object or any criteria that can be passed to "find_subscriptions" that will identify a single subscription. For instance:

        # by "license"
        my $licensed_image = $customer->license_image(
                image_id     => $image_id,
                size         => $size,
                subscription => { license => 'standard' }
        );

        # by "id"
        my $licensed_image = $customer->license_image(
                image_id     => $image_id,
                size         => $size,
                subscription => { id => 63746273 }
        );

        # or explicitly, with a subscription object
        my $enhanced = $customer->subscription( license => 'enhanced' );
        my $licensed_image = $customer->license_image(
                image_id     => $image_id,
                size         => $size,
                subscription => $enhanced
        );

If your account is configured by Shutterstock to require custom metadata values to be provided when licensing images (see "metadata_field_definitions"), you can provide those values using the metadata parameter. For instance:

        my $licensed_image = $customer->license_image(
                image_id     => $image_id,
                size         => $size,
                subscription => $subscription,
                metadata     => { purchase_order => '<value here>', }
        );

If the image requires an acknowledgment that it will only be used in an editorial context, you must pass the editorial_acknowledgement =&gt; 1 argument to the method.

AUTHOR

Brian Phillips <bphillips@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2012 by Brian Phillips and Shutterstock, Inc. (http://shutterstock.com).

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.