psn-php
asciidУстановка
Установите проект с помощью composer:
composer require tustin/psn-php
Первый вход
- Включите двустороннюю аутентификацию через приложение или сайт PlayStation.
- Перейдите по ссылке:
https://www.bungie.net/en/User/SignIn/Psnid?code=000000в браузере и войдите в сеть PlayStation. - При запросе кода подтверждения не вводите его. Вместо этого обратите внимание на ссылку. Она должна содержать параметр
ticket_uuid. - Скопируйте значение
ticket_uuidиз ссылки (оно имеет следующий формат:b7aeb-485-xxxx-4ec2-zzz-0f23bcee5bc5) и код подтверждения с вашего устройства. Теперь в в сеть PSN через библиотеку можно войти так:
require_once 'vendor/autoload.php';
use PlayStation\Client;
$client = new Client();
// v ticket_uuid v 2FA code
$client->login('b7aeb485-xxxx-4ec2-zzzz-0f23bcee5bc5', '000000');
$refreshToken = $client->refreshToken();
Теперь вы можете вызвать $client->refreshToken(); чтобы получить обновлённый токен для вашего аккаунта и автоматизировать последующий вход по описанному далее методу.
Последующий вход
Заметьте: если вы использовали библиотеку для входа, сделайте это!
Обновление токенов -- наиболее простой и быстрый способ входа. Токены, естественно, могут истекать, но если вы заходите в сеть слишком часто, просто сохраняйте обновлённые токены, и всё будет в порядке.
Для обновления токена войдите в сеть через библиотеку, что описывалось в разделе выше, и сохраните обновлённый токен:
require_once 'vendor/autoload.php';
use PlayStation\Client;
$client = new Client();
$client->login('b17b5ce5-xxxx-yyyy-zzzz-5996a213b834');
$refreshToken = $client->refreshToken();
Убедитесь, что сохраняете обновлённый токен лишь когда входите через текущий. Старый токен, по которому вы вошли, будет работать, но он рано или поздно истечёт, так что во избежание проблем сохраняйте новые токены.
Информация о пользователе
Имя пользователя можно получить вызвав метод user объекта Playstation\Client, который вы уже создали для входа. С помощью этого метода можно получить информацию и о текущем (вошедшем) пользователе, и о любом другом конкретном, указав методу onlineId:
// Вошедший пользователь
$me = $client->user();
// Конкретный пользователь
$user = $client->user('Hakoom');
user возвращает экземпляр класса Playstation\Api\User.
Управление пользователем
Playstation\Api\User позволяет совершать множество действий относительно пользователя.
Друзья
Добавление в список друзей
add имеет необязательный строковой (string) параметр с отправляемым при запросе добавления в друзья сообщением.
$user->add('Add me!');
Удаление из списка друзей
$user->remove();
Блокировка пользователя
$user->block();
Разблокирование пользователя
$user->unblock();
Отправка сообщений
Текстовые сообщения
sendMessage принимает единственный строковой (string) параметр -- отправляемый текст.
$message = $user->sendMessage('Hello!');
Возвращает или экземпляр Playstation\Api\Message, или null при неудаче.
Сообщения с изображениями
sendImage принимает единственный строковой (string) параметр -- необработанные (raw) байты изображения.
$message = $user->sendImage(file_get_contents('https://i.imgur.com/FLVEUp0.png'));
Возвращает или экземпляр Playstation\Api\Message, или null при неудаче.
Аудиосообщения
sendAudio принимает два параметра. Первый -- строковой (string) -- необработанные (raw) байты аудиозаписи. Второй -- целое число (int) -- длина аудиозаписи в секундах.
$message = $user->sendAudio(file_get_contents('some_audio.mp3'), 15);
Возвращает или экземпляр Playstation\Api\Message, или null при неудаче.
Диалоги
Все диалоги
$threads = $user->messageThreads();
Возвращает все диалоги, в которых состоял и указанный пользователь, и вошедший на данный момент.
Вызов возвращает массив (array) с Playstation\Api\MessageThread.
Приватные диалоги
$threads = $user->messageThreads();
Возвращает все диалоги, в которых были лишь указанный пользователь и вошедший на данный момент.
Вызов возвращает или экземпляр Playstation\Api\MessageThread, или null, если нет приватных диалогов.
Трофеи
Доступ к трофеям осуществляется вызовом метода games в Playstation\Api\User. Вызов возвращает все игры, в которые играл пользователь. Список содержит игровые трофеи.
// Ваши игры
$games = $client->user()->games();
// Игры конкретного пользователя
$games = $client->user('tustin25')->games();
forarch ($games as $game) {
if ($game->hasTrophies()) {
$trophyGroups = $game->trophyGroups();
forarch ($trophyGroups as $trophyGroup) {
echo sprintf("\t%s has %d trophies\n", $trophyGroup->name(), $trophyGroup->trophyCount());
foreach ($trophyGroup->trophies() as $trophy) {
if (!$trophy->earned()) continue; // Пропуск неполученных трофеев.
echo sprintf("\t\t[%s] %s - %s (earn rate - %.2f%%)\n", $trophy->type(), $trophy->name(), $trophy->detail(), $trophy->earnedRate());
}
}
}
}
Пользователь
Получение ID
$onlineId = $user->onlineId();
Возвращает строку (string).
Поле "обо мне"
$about = $user->aboutMe();
Возвращает строку (string).
Подписка на указанного пользователя
$following = $user->following();
Возвращает логическое значение (bool).
Количество подписчиков пользователя
$followers = $user->followerCount();
Возвращает целое число (int).
Статус подтверждённого пользователя
$verified = $user->verified();
Возвращает логическое значение (bool).
Аватар пользователя
$avatar = $user->avatarUrl();
Возвращает строку (string) с URL на аватар.
Друзья
friends принимает два необязательных параметра:
filter-- сетевой статус (устаревший параметр).onlineпо умолчанию.limit-- лимит возвращаемого количества друзей.
$friends = $user->friends(); // Список друзей пользователя
Возвращает массив (array) с Playstation\Api\User.
Дружба
$areFriends = $user->friend(); // Пребывание в списке друзей у указанного пользователя
Возвращает логическое значение (bool).
Близкая дружба
$areCloseFriend = $user->closeFriend(); // Пребывание в списке близких друзей у указанного пользователя
Возвращает логическое значение (bool).
Список игр
games принимает необязательный параметр limit -- лимит возвращаемого количества игр.
Возвращает массив (array) с PlayStation\Api\Game.
Сообщения
Класс Playstation\Api\Message состоит лишь из методов. Они возвращают различные данные о сообщениях.
Отправитель
$user = $message->sender(); // Отправитель сообщения
Возвращает экземпляр Playstation\Api\User.
Диалог
$thread = $message->thread(); // Диалог, в котором находится сообщение
Возвращает экземпляр Playstation\Api\MessageThread.
Содержимое
$body = $message->body(); // Тело сообщения
Возвращает строку (string).
Дата отправления
$dateTime = $message->sendDate();
Возвращает экземпляр Playstation\Api\DateTime.
Управление диалогами
Получение экземпляра Playstation\Api\MessageThread описано в разделе "Диалоги".Выход из диалога
$thread->leave();
Избранные
$thread->favorite(); // Пометка избранным $thread->unfavorite(); // Удаление метки
Миниатюры
setThumbnail принимает единственный строковой (string) параметр -- необработанные (raw) байты изображения.
$thread->setThumbnail(file_get_contents('https://i.imgur.com/FLVEUp0.png')); // Смена миниатюры диалога
$thread->removeThumbnail(); // Удаление текущей миниатюры
Заголовок
setName принимает единственный строковой (string) параметр -- новый заголовок диалога.
$thread->setName('psn-php!');
Отправка сообщений описывается в соответствующем разделе!
Параметры диалога
Получение экземпляра Playstation\Api\MessageThread описано в разделе"Диалоги".Участники
$members = $thread->members(); // Список всех участников диалога
Возвращает массив (array) с Playstation\Api\User.
Количество участников
$memberCount = $thread->memberCount();
Возвращает целое число (int).
ID диалога
$threadId = $thread->messageThreadId();
Возвращает строку (string).
Название диалога
$name = $thread->name();
Возвращает строку (string).
Миниатюры
$thumbnail = $thread->thumbnailUrl();
Возвращает строку (string) с URL на миниатюру диалога.
Последнее изменение
$date = $thread->modifiedDate(); // Время последнего изменения диалога
Возвращает новый экземпляр Playstation\Api\DateTime.
Трофеи
Доступ к оным осуществляется вызовом trophies в любом объекте Playstation\Api\Game, если трофеи доступны.
// Создание объекта Playstation\Api\Game.
$game = $client->game('CUSA02290_00');
if ($game->hasTrophies()) {
$trophyGroups = $game->trophyGroups();
foreach ($trophyGroups as $trophyGroup) {
echo sprintf("\t%s has %d trophies\n", $trophyGroup->name(), $trophyGroup->trophyCount());
foreach ($trophyGroup->trophies() as $trophy) {
echo sprintf("\t\t[%s] %s - %s (earn rate - %.2f%%)\n", $trophy->type(), $trophy->name(), $trophy->detail(), $trophy->earnedRate());
}
}
}
Параметры трофеев
Обратитесь к разделам ваше, чтобы узнать, как получить объект Playstation\Api\Trophy.ID
$id = $trophy->id(); // ID трофея
Возаращает целое число (int).
Скрытый трофей
$hidden = $trophy->hidden(); // Скрыт ли трофей
Возвращает логическое значение (bool).
Тип
$type = $trophy->type(); // Тип трофея (бронза, серебро, золото, платина)
Возвращает строку (string).
Название
$name = $trophy->name(); // Название трофея
Возвращает строку (string).
Детали
$detail = $trophy->detail(); // Дополнительная информация о трофее
Возвращает строку (string).
Иконка
$iconUrl = $trophy->iconUrl();
Возвращает строку (string) с URL на иконку трофея.
Статистика получения
$earnedRate = $trophy->earnedRate(); // Процент получивших трофей игроков
Возвращает вещественное число (float).
Наличие
$hasEarned = $trophy->earned(); // Получил ли пользователь трофей
Возвращает логическое значение (bool).
Дата получения
$earnedDate = $trophy->earnedDate(); // Дата и время получения трофея
Возвращает или экземпляр \DateTime, или null, если трофей неполучен.
Группа трофея
$trophyGroup = $trophy->trophyGroup(); // Группа, в которой находится трофей
Возвращает экземпляр Playstation\Api\TrophyGroup.
Игра
$game = $trophy->game(); // Информация об игре, к которой относится трофей
Возвращает экземпляр Playstation\Api\Game.
Параметры группы трофея
ID
$id = $trophyGroup->id(); // ID группы
Возвращает целое число (int).
Название
$name = $trophyGroup->name(); // Название группы
Возвращает строку (string).
Детали
$detail = $trophyGroup->detail(); // Дополнительная информация о группе
Иконка
$iconUrl = $trophyGroup->iconUrl();
Возвращает строку (string) с URL на иконку группы.
Количество
$trophyCount = $trophyGroup->trophyCount(); // Количество всех трофеев в группе
Возвращает целое число (int).
Прогресс
$progress = $trophyGroup->progress(); // Прогресс получения трофеев в группе
Возвращает целое число (int).
Последний трофей
$lastEarnedDate = $trophyGroup->lastEarnedDate(); // Дата и время получения последнего трофея в группе
Возвращает новый экземпляр \DateTime.
Трофеи
$trophies = $trophyGroup->trophies(); // Список всех трофеев в группе
Возвращает массив (array) с Playstation\Api\Trophy.
Игра
$game = $trophyGroup->game(); // Информация об игре, к которой относится группа трофеев
Возвращает экземпляр Playstation\Api\Game.