0

Начальный коммит

This commit is contained in:
eleksir
2021-05-18 12:32:46 +03:00
commit 0c147086c0
29 changed files with 2534 additions and 0 deletions

164
lib/Yandex/Disk/Public.pm Normal file
View 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