Group
Extension

Webqq-Client/lib/Webqq/Client/Method/_get_user_friends.pm

use JSON;
use Webqq::Client::Util qw(hash);
sub Webqq::Client::_get_user_friends{
    my $self = shift;
    my $api_url = 'http://s.web2.qq.com/api/get_user_friends2';
    my $ua = $self->{ua};
    my @headers = $self->{type} eq 'webqq'? (Referer=>'http://s.web2.qq.com/proxy.html?v=20110412001&callback=1&id=3')
                :                           (Referer=>'http://s.web2.qq.com/proxy.html?v=20130916001&callback=1&id=1')   
                ;
    my %r = (
        hash        => hash($self->{qq_param}{ptwebqq},$self->{qq_param}{qq}),  
        vfwebqq     => $self->{qq_param}{vfwebqq},
    );
    if($self->{type} eq 'webqq'){
        $r{"h"} = "hello";
    }
    my $response = $ua->post($api_url,[r=>JSON->new->utf8->encode(\%r)],@headers);
    if($response->is_success){
        print $response->content(),"\n" if $self->{debug};
        my $json = JSON->new->utf8->decode($response->content());
        return undef if $json->{retcode}!=0 ;
        my $friends_state = $self->_get_friends_state();
        my %categories ;
        my %info;
        my %marknames;
        my %vipinfo;
        my %state;
        if(defined $friends_state){
            for(@{$friends_state}){
                $state{$_->{uin}}{state} = $_->{state};
                $state{$_->{uin}}{client_type} = $_->{client_type};
            }
        }
        for(@{ $json->{result}{categories}}){
            $categories{ $_->{'index'} } = {'sort'=>$_->{'sort'},name=>encode("utf8",$_->{name}) };
        }
        $categories{0} = {sort=>0,name=>'我的好友'};
        for(@{ $json->{result}{info}}){
            $info{$_->{uin}} = {face=>$_->{face},flag=>$_->{flag},nick=>encode("utf8",$_->{nick}),};
        }
        for(@{ $json->{result}{marknames} }){
            $marknames{$_->{uin}} = {markname=>encode("utf8",$_->{markname}),type=>$_->{type}};
        }
        for(@{ $json->{result}{vipinfo} }){
            $vipinfo{$_->{u}} = {vip_level=>$_->{vip_level},is_vip=>$_->{is_vip}};
        }        
        for(@{$json->{result}{friends}}){
            my $uin  = $_->{uin};
            if(exists $state{$_->{uin}}){
                $_->{state} = $state{$uin}{state};
                $_->{client_type} = $state{$uin}{client_type};
            }
            else{
                $_->{state} = 'offline';
                $_->{client_type} = 'unknown';
            }
            $_->{categorie} = $categories{$_->{categories}}{name};
            $_->{nick}  = $info{$uin}{nick};
            $_->{face} = $info{$uin}{face};
            $_->{markname} = $marknames{$uin}{markname};
            $_->{is_vip} = $vipinfo{$uin}{is_vip};
            $_->{vip_level} = $vipinfo{$uin}{vip_level};
            delete $_->{categories};
        }
        return $json->{result}{friends};
    }
    else{return undef}
}
1;


Powered by Groonga
Maintained by Kenichi Ishigaki <ishigaki@cpan.org>. If you find anything, submit it on GitHub.