Группы друзей в Steam

Данная заметка является аналогом групп друзей на vk.com (25/05/2012). Мы постараемся найти среди друзей пользователя группы людей, где каждый есть у каждого в друзьях. Исходный код доступен на Github.

Как не удивительно, но алгоритм будет таким-же, как и в вышеуказанной заметке. Вообще, профиль в Стиме имеет схожие настройки с профилем Вк — может быть публичным и скрытым (с разделением на «доступен друзьям» и «скрыт от всех»), а так же его не обязательно заполнять полностю (это значит, что для разных пользователей ответ API будет содержать разную информацию).

Запрос на список друзей описан здесь. В ответе мы получим список steam ids друзей пользователя. Если его профиль «не публичный», то вернется пустой список.

Для Вк я использовал только PHP, сейчас же я хочу сделать новомодный интерфейс на основе Twitter Bootstrap, EmberJS, Handlebars и Bootstrap for Ember. Однако без серверной части обойтись не получится, так как ajax-запросы на посторонний домен никто нам делать не даст. Так что еще будет небольшой прокси-скрипт на PHP:

<?php
set_time_limit(0);
$url = (string)$_POST['url'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_ENCODING , "gzip");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
// Ignore SSL warnings and questions
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
$r = curl_exec($ch);
curl_close($ch);
header('Content-Type: application/json');
echo $r;

Прокси-скрипт просто загружает ответ с переданной ему ссылке (так указывает, что возвращает json).

Для работы со Steam API нужен ключик. Взять его можно по ссылке — http://steamcommunity.com/dev/apikey. Домен можно вписывать любой. Так как свой ключ мы в приложение «вшивать» не будем, то сделаем поле ввода для него. Еще одно поле будет для steamid того пользователя, чей список друзей хотим проанализировать. На страничке это выглядит так:

Steam Friends Mapper

СтОит сказать, что запрос в steam api на список друзей может выполняться до 20 секунд, а может и вообще вылететь. Так что надо предусмотреть возможность повторной отправки запросов (сделано). Помимо этого надо как-то информировать пользователя о том, что вообще происходит. Сделаем это используя bs-progress. Он будет показывать количество выполненных запросов на списки друзей. То есть, для каждого из друзей введенного пользователя мы загружаем список их друзей. И это может занять немало времени (помним, что запрос может не выполниться и отправиться на «второй заход»).

Еще желательно сделать какую-то наглядную демонстрацию в виде графа друзей. Вершины — пользователи, ветви — дружат ли эти пользователи. Граф сделаем используя sigmajs. В примерах есть достаточно информации, чтоб сделать простой граф с такими условиями:

  • Использовать аватарки пользователей в качестве вершин графа
  • Должна быть возможность перетягивать вершины

Это все реализовано во view.

Расписывать что-то по коду я не буду — он нормально закомментирован. Остановлюсь на сборке проекта. Текущий вариант уже есть в папке dist. Берем его и копируем в директорию хоста веб-сервера (с поддержкой PHP). А вот если вы хотите что-то поменять и собрать проект сами, то понадобится nodejs (с npm):

cd project_dir
npm install
bower install
grunt build

Вот пример того, что пользователь получит после загрузки всех данных и выполнения вычислений (кликабельно):

Mapped friends

, ,

Оставить комментарий

Top ↑ | Main page | Back