sub
Mojo::Webqq::Client::_get_offpic {
my
$self
=
shift
;
my
$file_path
=
shift
;
my
$sender
=
shift
;
my
$cb
=
pop
;
my
@query_string
= (
file_path
=> url_escape(
$file_path
),
f_uin
=>
$sender
->id,
clientid
=>
$self
->clientid,
psessionid
=>
$self
->psessionid,
);
my
$callback
=
sub
{
my
(
$data
,
$ua
,
$tx
) =
@_
;
unless
(
defined
$data
){
$self
->
warn
(
"图片下载失败: "
.
$tx
->error->{message});
return
;
}
return
unless
$tx
->res->headers->content_type =~/^image\/(.*)/;
my
$type
= $1=~/jpe?g/i ?
".jpg"
: $1=~/png/i ?
".png"
: $1=~/bmp/i ?
".bmp"
: $1=~/gif/i ?
".gif"
:
undef
;
return
unless
defined
$type
;
if
(
defined
$self
->pic_dir and not -d
$self
->pic_dir){
$self
->error(
"无效的 pic_dir: "
.
$self
->pic_dir);
return
;
}
my
@opt
= (
TEMPLATE
=>
"mojo_webqq_offpic_XXXX"
,
SUFFIX
=>
$type
,
UNLINK
=> 0,
);
defined
$self
->pic_dir?(
push
@opt
,(
DIR
=>
$self
->pic_dir)):(
push
@opt
,(
TMPDIR
=>1));
eval
{
my
$tmp
= File::Temp->new(
@opt
);
binmode
$tmp
;
print
$tmp
$tx
->res->body();
close
$tmp
;
$self
->emit(
receive_pic
=>
$tmp
->filename,
$sender
);
$self
->emit(
receive_friend_pic
=>
$tmp
->filename,
$sender
)
if
$sender
->type eq
"friend"
;
$self
->emit(
receive_sess_pic
=>
$tmp
->filename,
$sender
)
if
$sender
->type ne
"friend"
;
$cb
->(
$self
,
$tmp
->filename,
$sender
)
if
ref
$cb
eq
"CODE"
;
};
$self
->error(
"[Mojo::Webqq::Client::_get_offpic] $@"
)
if
$@;
};
$self
->http_get(
$self
->gen_url(
$api
,
@query_string
),{
Referer
=>
'http://'
.
$self
->domain .
'/'
},
$callback
);
};
1;