Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

Находим всеобщих друзей людей с применением VK API

Anna | 29.05.2014 | нет комментариев
0.Предыстория

Здравствуй, програюзер.
Некогда у меня появилась надобность обнаружить человека, зная его внешний вид и зная о его членстве в определенном клубе. Также я обладал адресами(вконтакте) страниц 2-х других членов клуба. Примерно наверно желанный человек был у всякого из них в друзьях. Решить эту задачу дозволено было различными путями. В статье я напишу о том, как мною было реализовано решение с применением vk.com API.

1.Задача

Сделать сервис, тот, что будет находить всех всеобщих друзей 2-х отдельно взятых пользователей, не требуя верификации и аккаунта в общественной сети для пользователей обслуживания. Получить данные об всеобщих друзьях:

  • имя
  • фотография
  • ID

Реализовать задание на базе API вконтакте. Написать отельный класс для этого.

2.Решение
2.1.Определяем нужные способы API

Заходим в список способов API. И поискав, находим то, что нам необходимо.

Для приобретения друзей пользователя есть способ friends.get.
friends.get — возвращает список идентификаторов друзей пользователя либо расширенную информацию о друзьях пользователя (при применении параметра fields).

И, что значимо, в рамках решения поставленной задачи это открытый способ, не требующий access_token.

Непременный параметр только один:
image

Применяя данный способ, дозволено получить информацию обо всех друзьях всякого из 2-х наших множеств, но такой подход не будет оптимальным. Пользователь А может иметь 2000 людей в друзьях, пересекаться с друзьями пользователя В будут только 3 человека. В таком случае информация о 1997 пользователях будет нам непотребной, и источники, затраченные на её приобретение, будут потрачены впустую.
Мы будем запрашивать экстраординарно идентификаторы пользователей, и получив надобные нам номера(которые принадлежат множеству А и В), теснее по ним выбирать информацию.

Для приобретения информации о пользователе есть способ users.get.
users.get - Возвращает расширенную информацию о пользователях. 

Данный способ также не нуждается в access_token, то есть безупречно подходит для нашей задачи.
image
В user_ids мы передадим массив идентификаторов пользователей, которые встречаются в обоих множествах.
Мы хотим получить только аватар размером 100*100, для этого в параметре fields передадим значение photo_100.

2.2.Переходим к утилитарной стороне

Я написал примитивный класс на php:

class VkFriends
{

    public function clean_var($var) {

         $var = strip_tags($var);
         $var = preg_replace('~\D ~', '', $var);        
         $var = trim($var);

         return $var;
    }

    public function get_friends($u_id) {

         $friends = file_get_contents('https://api.vk.com/method/friends.get?user_id='.$u_id);
         $friends = json_decode($friends);

         if(!isset($friends->error)){
             return $friends;
         }else{
             return '';
         }

    }    

    public function mutual_friends($friends) {

         $mutual = array_intersect($friends[0]->response, $friends[1]->response);

         if(!empty($mutual)){
             return $mutual;
         }else{
             return '';
         }

    }

    public function get_users_info($users) {

         $u_ids = implode(",",$users);    
         $u_info = file_get_contents('https://api.vk.com/method/users.get?user_ids='.$u_ids.'&fields=photo_100');
         $u_info = json_decode($u_info);

         return $u_info;
    }     

    public function view_user_info($u_info) {

         $uid = $u_info->uid;
         $first_name = $u_info->first_name;
         $last_name = $u_info->last_name;
          = $u_info->photo_100;

         print("
         <a href='http://vk.com/id$uid' target='_blank'>
         <div id='info'>

            <div id='ava'>
                <img src=''>
            </div>

            <div id='name'>
                $first_name <br/>
                $last_name
            </div>
         </div>
         </a>
         ");

    }    

    public function view_users_info($users_info) {

        for($i=0;$i<sizeof($users_info->response);$i  ){

            $this->view_user_info($users_info->response[$i]);

        }

    }

}

Сейчас глядим на наш класс в действии:

$vkf = new VkFriends;

$u_id[0] = $vkf->clean_var($_POST["u1"]);//clean variables from POST
$u_id[1] = $vkf->clean_var($_POST["u2"]);

if(($u_id[0]!='')&&($u_id[1]!='')){

    echo '<div id="block">';

    $friends[0] = $vkf->get_friends($u_id[0]);//getting friends list from user with u_id
    $friends[1] = $vkf->get_friends($u_id[1]);

    if(($friends[0]!='')&&($friends[1]!='')){

        $mutual = $vkf->mutual_friends($friends);//create new array from intersect arrays

        if($mutual!=''){

            $users_info = $vkf->get_users_info($mutual);//getting info about users that are mutual
            $vkf->view_users_info($users_info);//view information about selected users

        }else{      
            print("<center><h2 class='error'>Всеобщих друзей нет</h2></center>");
        }

    }else{  
        print("<center><h2 class='error'>Один из пользователей не доступен</h2></center>"); 
    }

    echo '</div>';  
}
3.Резюме

Рабочий пример дозволено увидеть на 13c.me.
Ссылка на репозиторий GitHub — vkfriends.

Спасибо, что читали,
откровенно верю, что вам было увлекательно.

 Источник: programmingmaster.ru
Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB