VK APIを使用している人々の共通の友人を見つける

画像

0先史時代


こんにちは、habrauser。

一度私は人を見つける必要があり、彼の外見を知り、特定のクラブの会員であることを知りました。 また、私は他の2人のクラブ会員のページのアドレス(VKontakte)を所有していました。 ほぼ間違いなく、彼が探していたのはそれぞれの友人でした。 この問題を解決する方法はいくつかありました。 この記事では、vk.com APIを使用してソリューションを実装した方法について説明します。



1.タスク


確認とサービスのユーザーのソーシャルネットワーク上のアカウントを必要とせずに、2人の個々のユーザーのすべての共通の友人を見つけるサービスを作成します。 共通の友人に関するデータを取得します。



VKontakte APIに基づいてタスクを実装します。 このためにホテルのクラスを書きます。





2ソリューション


2.1。必要なAPIメソッドを定義する


API メソッドリストに移動します 。 そして、検索後、必要なものを見つけます。



ユーザーの友達を取得するには、 friends.getメソッドがあります。

friends.get- ユーザーの友達IDのリストまたはユーザーの友達に関する拡張情報を返します(fieldsパラメーターを使用する場合)。



そして、重要なことに、タスクのソリューションの一部として、これはaccess_tokenを必要としないオープンなメソッドです。



必須パラメーターは1つのみです。

画像



この方法を使用すると、2つのセットそれぞれのすべての友人に関する情報を取得できますが、このアプローチは最適ではありません。 ユーザーAの友達は2000人で、ユーザーBの友達と交差するのは3人だけです。 この場合、1997年のユーザーに関する情報は不要であり、その受信に費やされたリソースは無駄になります。

ユーザーIDのみを要求し、必要な番号(セットAおよびBに属する)を受け取ったので、それらの情報を既に選択します。



ユーザー情報を取得するためのusers.getメソッドがあります

users.get- 高度なユーザー情報を返します。



また、このメソッドはaccess_tokenを必要としません。つまり、タスクに最適です。

画像

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.まとめ


GitHubリポジトリ-vkfriendsへのリンク。



読んでくれてありがとう

あなたが興味を持っていたことを心から願っています。



All Articles