Начальный коммит
This commit is contained in:
164
lib/Yandex/Disk/Public.pm
Normal file
164
lib/Yandex/Disk/Public.pm
Normal file
@@ -0,0 +1,164 @@
|
||||
#
|
||||
#===============================================================================
|
||||
#
|
||||
# FILE: Public.pm
|
||||
#
|
||||
# DESCRIPTION:
|
||||
#
|
||||
# FILES: ---
|
||||
# BUGS: ---
|
||||
# NOTES: ---
|
||||
# AUTHOR: YOUR NAME (),
|
||||
# ORGANIZATION:
|
||||
# VERSION: 1.0
|
||||
# CREATED: 01.10.2017 12:34:59
|
||||
# REVISION: ---
|
||||
#===============================================================================
|
||||
package Yandex::Disk::Public;
|
||||
|
||||
use 5.008001;
|
||||
use strict;
|
||||
use warnings;
|
||||
use utf8;
|
||||
use URI::Escape;
|
||||
use Carp 'croak';
|
||||
|
||||
use base 'Yandex::Disk';
|
||||
|
||||
#Class for Public actions under Yandex Disk files and folders
|
||||
|
||||
our $VERSION = '0.06';
|
||||
|
||||
sub publicFile {
|
||||
my $self = shift;
|
||||
my %opt = @_;
|
||||
my $path = $opt{-path} || croak "Specify -path param";
|
||||
|
||||
my $res = $self->__request('https://cloud-api.yandex.net/v1/disk/resources/publish?path=' . uri_escape($path), "PUT");
|
||||
my $code = $res->code;
|
||||
if ($code ne '200') {
|
||||
croak "Cant public file $path. Error: " . $res->status_line;
|
||||
}
|
||||
my $metainfo_href = $self->__fromJson($res->decoded_content)->{href};
|
||||
my $res_get_metainfo = $self->__getPublicUrl($metainfo_href);
|
||||
return $res_get_metainfo;
|
||||
}
|
||||
|
||||
sub unpublicFile {
|
||||
my $self = shift;
|
||||
my %opt = @_;
|
||||
$self->{public_info} = {};
|
||||
my $path = $opt{-path} || croak "Specify -path param";
|
||||
|
||||
my $res = $self->__request('https://cloud-api.yandex.net/v1/disk/resources/unpublish?path=' . uri_escape($path), "PUT");
|
||||
my $code = $res->code;
|
||||
if ($code ne '200') {
|
||||
croak "Cant unpublic file $path. Error: " . $res->status_line;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
sub listPublished {
|
||||
my $self = shift;
|
||||
my %opt = @_;
|
||||
my $limit = $opt{-limit};
|
||||
my $offset = $opt{-offset} || 0;
|
||||
my $type = $opt{-type};
|
||||
|
||||
$limit = 999999 if not defined $limit;
|
||||
|
||||
if ($type && ($type ne 'dir' && $type ne 'file')) {
|
||||
croak "Wrong -type value (dir/file)";
|
||||
}
|
||||
|
||||
my $param = "limit=$limit&offset=$offset";
|
||||
$param .= "&type=$type" if $type;
|
||||
|
||||
my $res = $self->__request('https://cloud-api.yandex.net/v1/disk/resources/public?' . $param, "GET");
|
||||
my $code = $res->code;
|
||||
if ($code ne '200') {
|
||||
croak "Cant get listPublished. Error: " . $res->status_line;
|
||||
}
|
||||
my $items = $self->__fromJson($res->decoded_content)->{items};
|
||||
return $items;
|
||||
}
|
||||
|
||||
sub __getPublicUrl {
|
||||
my ($self, $href) = @_;
|
||||
my $res = $self->__request($href, "GET");
|
||||
my $code = $res->code;
|
||||
if ($code ne '200') {
|
||||
croak "Cant get public url by href: $href. Error: " . $res->status_line;
|
||||
}
|
||||
$self->{public_info} = $self->__fromJson($res->decoded_content);
|
||||
return 1;
|
||||
}
|
||||
|
||||
sub publicUrl {
|
||||
return shift->{public_info}->{public_url};
|
||||
}
|
||||
|
||||
sub publicType {
|
||||
return shift->{public_info}->{type};
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
__END__
|
||||
=pod
|
||||
|
||||
=encoding UTF-8
|
||||
|
||||
=head1 NAME
|
||||
|
||||
B<Yandex::Disk::Public> - public and unpublic yandex disk resources(files and folders)
|
||||
|
||||
=head1 VERSION
|
||||
|
||||
version 0.06
|
||||
|
||||
=head1 SYNOPSIS
|
||||
use Yandex::Disk;
|
||||
|
||||
my $token = "my token";
|
||||
my $disk = Yandex::Disk( -token => $token); #Create Yandex::Disk object
|
||||
my $public = $disk->public; #Create Yandex::Disk::Public object
|
||||
|
||||
#Public file '/Temp/small_file'
|
||||
$public->publicFile (-path => '/Temp/small_file');
|
||||
|
||||
=head1 METHODS
|
||||
|
||||
=head2 publicFile(%opt)
|
||||
|
||||
Make file or folder as public
|
||||
$public->publicFile ( -path => '/Temp/small_file' ) or die "Cant public file"; #Make file '/Temp/small_file' as public
|
||||
Options:
|
||||
-path => Path to resource on yandex disk, where need public
|
||||
|
||||
=head2 unpublicFile(%opt)
|
||||
|
||||
Remove public access to resources
|
||||
$public->unpublicFile( -path => '/Temp/small_file' ) or die "Cant unpublic file";
|
||||
Options:
|
||||
-path => Path to resource on yandex disk, where need public
|
||||
|
||||
=head2 listPublished(%opt)
|
||||
|
||||
Return array hashref with published files
|
||||
my $list = $public->listPublished();
|
||||
Options:
|
||||
-limit => Limit max files to output (default: unlimited)
|
||||
-offset => Offset records from start (default: 0)
|
||||
-type => dir/file (default: undef (display dirs and files)
|
||||
|
||||
=head2 publicUrl()
|
||||
|
||||
Get public url from published file. Return undef if error
|
||||
|
||||
=head2 publicType()
|
||||
|
||||
Get type of published resource. Retutn undef if error
|
||||
|
||||
|
||||
=cut
|
||||
Reference in New Issue
Block a user