From e2b970339dfcc1ed2035c3462f2f58cdb6c16e8a Mon Sep 17 00:00:00 2001 From: vrag Date: Tue, 14 May 2019 17:15:56 +0300 Subject: [PATCH] Added findFileByName() method --- lib/Mediafire/.Api.pm.swp | Bin 24576 -> 32768 bytes lib/Mediafire/Api.pm | 53 ++++++++++++++++++++++++++- lib/Mediafire/Api/.UploadFile.pm.swp | Bin 28672 -> 36864 bytes lib/Mediafire/Api/UploadFile.pm | 31 ++++++++++------ t/001_test.t | 14 +++++++ 5 files changed, 86 insertions(+), 12 deletions(-) diff --git a/lib/Mediafire/.Api.pm.swp b/lib/Mediafire/.Api.pm.swp index 6b378593c2056c479952bcfa9b8bbafeda44daa6..89b956e7c75a1a29e27fe4cfdb866a19f04cad79 100644 GIT binary patch delta 1512 zcmajfUuYaf90%~Z+$EaCdY4p<)tFA3vzse-XIig`Y?_$Zw21-ljKS0Q7uFbE#8NWRKVKmet z!m(_Ki=(lwJ-5kNv~aB>>p>q1`j()-FX%t=PR8b=S7;=*We0|uoA86BxYyC&6{>uK zbZ@{g?1x_X4kKH!$hYt*ECGWY9EKj~f>wA3CBF@C z0f(6|IY=JC#V+WE`{5?)`x36g`|uvT3?>|ayFk7}1b)RkKZst8?b<53l}^}NNiDG= z4chPsjq9nA(n`UYTf%rbN$QX4eabOb*`{zgv?(;pa)zcGoT=)VZK&!YBhOMJCVQr@ zktCv<9<)PF*CE1zTB&w2C~Io+a-WG17Etl+=7Ov|P6iNAtwak^Z@XQF+hC9z%Y zX>rPBEH55aGaYGqj5)StI!vX?PMW4-EpvA>`kjh+QC)r5VH%%X@ROzK32vG5lm`>& zoRwqLGHHS5sS?)<`TQ&{74cVMTJ$748Y79?SMh5Ig6J@f%V}vbweLz2rMiqObVI|w zDq23T{JWh>?YoHE2YQ~YRW&OE>T~3TB6BuQIL)|YSY{&xp)zW3df&#VAeW2XQ$+Vu z+r;64?#Rljt%=2f>~!sE+Fr1g##@YT`U4CRBCGJ<4PLSeuK+kg9VGg+q_UD+3J-}y&8%o>Erve6WN2RI?h}+=X&?d ztcNRFj*vf*qH;&=G^rmpH=~674bOuES@`)*Le}9T2*|?$*bYB!A>?ED02W~!5)g%J z$o&Pp0_WizQ~_&7$#b|U!xWsQs2IB?oZ6N&t| zaWcL)2O*AJ)vk*650IPpcA&no2r@h)>ag>Ya(lDZSZ|KQ_MqfhEp71A1NfUfO&*5 lg&uT6LlGYBBAZBH4N<$PSX(vCH?tDs`h~f_^`_IvslUrPR`37- diff --git a/lib/Mediafire/Api.pm b/lib/Mediafire/Api.pm index 5af20f6..a781e3c 100644 --- a/lib/Mediafire/Api.pm +++ b/lib/Mediafire/Api.pm @@ -183,6 +183,57 @@ sub uploadFile { return $mediafire_file; } +sub findFileByName { + my ($self, %opt) = @_; + my $filename = $opt{-filename} // croak "You must specify '-filename' param"; + + my @mediafire_files; + my $url = 'https://www.mediafire.com/api/1.4/folder/search.php'; + my %param = ( + 'r' => 'qzpa', + 'search_text' => $filename, + 'version' => '2.5', + 'search_all' => 'yes', + 'folder_key' => '', + 'filter' => 'all', + 'session_token' => $self->{session_token}, + 'response_format' => 'json', + ); + my $full_url = $url . '?' . join('&', map {"$_=" . uri_escape($param{$_})} keys %param); + my $res = $self->{ua}->get($full_url); + my $code = $res->code; + if ($code ne '200') { + croak "Can't search file. Wrong response code on url '$full_url'. Code: $code"; + } + + my $json_res = eval { + decode_json($res->decoded_content); + }; + if ($@) { + croak "Can't decode response to json. Response: '" . $res->decoded_content . "'"; + } + + for my $f (@{$json_res->{response}->{results}}) { + # If not file + if ($f->{type} ne 'file') { + next; + } + + # If in Trash folder + if ($f->{parent_name} eq 'Trash') { + next; + } + + push @mediafire_files, + Mediafire::Api::File->new( + -size => $f->{size}, + -key => $f->{quickkey}, + ); + } + + return \@mediafire_files; +} + =pod Вынести в отдельный класс с проверкой наличия такой директории sub createDir { my ($self, %opt) = @_; @@ -260,7 +311,7 @@ B - Upload and Download files from mediafire.com file sharing =head1 DEPENDENCE -L, L, L, L, L, L, L +L, L, L, L, L, L, L, L =head1 AUTHORS diff --git a/lib/Mediafire/Api/.UploadFile.pm.swp b/lib/Mediafire/Api/.UploadFile.pm.swp index aa5672a91ca0ea677b2e02739a361a9a852aaa07..d58956d6e72e4b05a674b1a3e9d9dd6a8a4d1da2 100644 GIT binary patch delta 2322 zcmZwI4@{J09KiACjtfLk{wRr#>ak`5d7gXj z_j}*f=XI-F^v2>DOLOeTIVrOQEmnx0Bd3@5#p}g_VM07tvKPDzZ1PRc~ zDB446TTB!BkAaNZe$_KhO>hTj4+v7Dn^K z66thD3Gor?QGl5U!#Bf)XhQ>PQ3EsXL<;dOKEYeah7FT&i<7yApYS@G(S#c0;bHW0 zLRWA(f`dIprxnFmjzZ)j2Uo*|=)fjCj{y8AKqfM9`#u)M8SF$GR5&mdHw;1?Lo>=S zA2y`p%7QQ<4&gPtfMP@=96kKw2k|L(qX^HS0O?48(Nt1Vsu<@QwUh}9qg=vUV>Fvq zDE`GOosZ0ZY;nLljfj;>N!b#gr@~p9?e-{)5FmTmRTbWOPQD%tdRnOtc$NOp{xG}S ztK`@CWJI8UhRIf;#-$`_eU?OBv^~fEWNK=b;#W%iTEz4}V@IrFaJwxbpkF$$3whF%il z3Vy&j9117HD(NI59&reRz+JNAB2M4~ti>XvV;n}~7H28X^E&#_jZS=r%bax=zQ-vX zMJrk`6W2(P-^cTD6<=cmUP2@Ck%Y54?PSIUeX#z2npGHSRf<1QRcqGMloy$*7RTs{9){-Wp9R8Z1Zy?s~GMa6nuO}PpLidr={R5=A zNrvCMi8&lDlGsu1^eSePOJ2xNxezynV!3B%l3LQrl~v{;G5tTv@5qu96P)by`8@6t zr{7&sKE2lMOTIVV;QR#H99AKV$j&{oIvA=B6dUW*xfO}(-n_Wx?Bi-j_5&Z!?+BYP zB+Qa#HdQMgmnE&vMfugU8M$HAmz$vVpB$D|G>(gGcd40f zbfN?8D8VAc;|z84A$Fn-O<0O>1gIM;u2Cy*pcxrRKqu?Gk4*@zNhyUJx`wNjg`>ha zNv*QbXVAJGNwGm^sSq0p8^djKYlANsxwV~W!wzi6i;yLMo8>pdhGZmQ6yhOEU6%Q2 zltGsFG{_f-0Y_M8Kfb`GXb~Zn(is!2=?qO#+PREh!a_UxiYzXo9ORA$Uxyc2`2=?1 z6;z@eUgRSkX}HA>ZpvLi9@-8xqX<)Qon0Kp+gODh#N!ehIVxXY2k9I@IWi%S<_<^n zBVNW@cwoa5n2K}!yQgpx2e1`xq+%8x#e?{nhtn>+i&kvGX3W88oEXN#Wj{}*efSJ5 z*oY0t!aPjGuRNLL`|b>O!4Dha(Zz$P9b2#->o5mVIL`y^aXl=Q+>k zyVLicrSCgMtADDhbi1}WbCb|i5nIFjOU+J;lthcX=65#^A4?4ugdC0t>1Be&oJH%= z6V+tBL@iNT^Nl3(8yvQuhp$mK9!AATU$GSg_6B&UIWmt_LVnsrD2RZ`S zij`Q15%~fa;6e@Z;6yy`vo}GU!6*V~!n3d=3Xxcf68R{Kee0pqi4N>UJ!0`=Bs+p( z3}FyH)Z#^~fD^w(h+ISnXVHZMsJLZgA?QaPYEX?R+^~v_<#ITR9;9InA`m8|tGJ9k zXoC;cFaykh{&wwSmN#;Z^2dL&e30gj*55x|^iXrRmfGm)sBCg)Wj|Bd*{p5R+B@sD z9?_M|)yD1hDT-m=@Vjbf;qs00PbIYKiTUZhdmSQPG$99@k%k2lABR~PZy_5GNcKLi zVG==jQH>oagcVI@^$fJ0uyxDfm%|YOyLtW zV>e!f8->WiBV4C-seaJ;@` z4HT`4^J%HO+FM&(eowm|tVq$*i{{pew%jr@Qaf9`9WL)Hx$@uO|L({&qKmItV;a1> zJ+6*!pXY?~yj3;tH7n=eQGKE?*-*;+6f2|pzKZ?5KNCtDX_AIJ2l4kiMT|(>Vyymhty4e$#71Mh Q_DP$bus+6EaII4R0ug@bVE_OC diff --git a/lib/Mediafire/Api/UploadFile.pm b/lib/Mediafire/Api/UploadFile.pm index 2b7bfd3..2ba6c12 100644 --- a/lib/Mediafire/Api/UploadFile.pm +++ b/lib/Mediafire/Api/UploadFile.pm @@ -12,6 +12,7 @@ use LWP::ConnCache; use File::Basename; use HTTP::Request; use JSON::XS; +use MIME::Detect; use Crypt::Digest::SHA256 qw/sha256_hex/; use Time::HiRes qw/gettimeofday/; use IO::Socket::SSL; @@ -26,14 +27,16 @@ our $VERSION = '0.01'; my $DEFAULT_BUFF_SIZE = 1048576; ############################ PRIVATE METHODS ############################################ -my $getSha256Sum = sub { +my ($getSha256Sum, $checkUploadFile, $getFileFromCache, $checkResumeUpload, $getMimeType, $uploadF); + +$getSha256Sum = sub { my ($fname) = @_; my $sha = Crypt::Digest::SHA256->new(); $sha->addfile($fname); return $sha->hexdigest; }; -my $checkUploadFile = sub { +$checkUploadFile = sub { my ($self) = @_; my $url = 'https://www.mediafire.com/api/1.5/upload/check.php'; @@ -87,7 +90,7 @@ my $checkUploadFile = sub { return $response; }; -my $getFileFromCache = sub { +$getFileFromCache = sub { my ($self) = @_; my $url = 'https://www.mediafire.com/api/1.5/upload/instant.php'; @@ -130,7 +133,7 @@ my $getFileFromCache = sub { return 1; }; -my $checkResumeUpload = sub { +$checkResumeUpload = sub { my ($self) = @_; my $ua = $self->{ua}; @@ -163,7 +166,7 @@ my $checkResumeUpload = sub { }; # Upload file -my $uploadF = sub { +$uploadF = sub { my ($self) = @_; my $upload_file = $self->{upload_file}; @@ -176,7 +179,6 @@ my $uploadF = sub { my $param_str = join('&', map {"$_=" . uri_escape($param{$_})} keys %param); my $url = $self->{upload_url} . '?' . $param_str; - my $file_type = 'application/zip'; my $unit_id = 0; my $filebuf; open my $FH, "<$upload_file" or croak "Can't open $upload_file $!"; @@ -194,7 +196,7 @@ my $uploadF = sub { "Origin" => "https://www.mediafire.com", "X-Filesize" => $self->{file}->size, "X-Filename" => $self->{file}->name, - "X-Filetype" => $file_type, + "X-Filetype" => $getMimeType->($self->{file}->name), "X-Filehash" => $self->{file}->hash, "X-Unit-Hash" => $unit_hash, "X-Unit-Size" => $bytes, @@ -222,10 +224,8 @@ my $uploadF = sub { if ($json_res->{response}->{resumable_upload}->{all_units_ready} eq 'yes') { last; } - p $json_res; ++$unit_id; - } close $FH; @@ -234,11 +234,20 @@ my $uploadF = sub { croak "Not all parts of file '$upload_file' uploaded. Wrong answer from server"; } - p $json_res; - return 1; }; +$getMimeType = sub { + my ($fname) = @_; + my $default_mime = 'application/zip'; + my $mime = MIME::Detect->new(); + my @types = $mime->mime_types_from_name($fname); + if (@types) { + return $types[0]->mime_type; + } + return $default_mime; +}; + ######################################################################################## diff --git a/t/001_test.t b/t/001_test.t index 54d281d..0e7421f 100644 --- a/t/001_test.t +++ b/t/001_test.t @@ -19,6 +19,7 @@ use utf8; use strict; use warnings; use File::Spec; +use File::Basename; my $CURR_DIR; BEGIN { @@ -53,6 +54,7 @@ SKIP: { } testUploadFile($mediafire, $UPLOAD_FILE); + testFindFileByName($mediafire, basename($UPLOAD_FILE)); }; @@ -80,4 +82,16 @@ sub testUploadFile { ok($doupload_key, "Test upload file. DouploadKey: $doupload_key"); } +sub testFindFileByName { + my ($mediafire, $filename) = @_; + my $res = $mediafire->findFileByName( + -filename => $filename, + ); + + ok (@$res, "Test findFileByName ok"); + my $doupload_key = $res->[0]->key; + ok($doupload_key, "Find file doupload_key: $doupload_key"); + +} +