PHP - получение ссылки на аватар по SteamID

GANZ

Участник
Сообщения
208
Реакции
73
Подскажите, как получить ссылку на аватар по SteamID
Данный способ очень долго обрабатывается, а на странице нужно отобразить 30 аватарок..
Заранее спасибо

PHP:
<?
$id = 'STEAM_0:0:34774273';
$x = substr($id, 8, 1);
$y = substr($id, 10);
$z = (string) ($y * 2) + 7960265728 + $x;
$steamid = '7656119'.$z;
$slf = 'http://steamcommunity.com/profiles/'.$steamid.'/?xml=1';
$url = simplexml_load_file($slf);
echo '<img src="'.$url->avatarIcon.'">';
?>
 

gibs

Фитиль народного волненья
Сообщения
722
Реакции
407
Мошенник
Через steam web api
 

The Night Fury

Участник
Сообщения
1,300
Реакции
1,395
Нужно получить ключ для использования API: http://steamcommunity.com/dev/apikey
Потом посмотреть нужный метод на вики: https://developer.valvesoftware.com/wiki/Steam_Web_API
Так, получаем инфу о Робине Уокере (в твоём случае — его аватар):

PHP:
<?
$shit = file_get_contents("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=XXXXXXXXXXXXXXXXXXXXXXX&steamids=76561197960435530");
$json = json_decode($shit);
print("<pre>");
print_r($json);
print("</pre>");

echo $json->response->players[0]->avatarfull;
echo "<br>";
echo "<img src=\"{$json->response->players[0]->avatarfull}\">";
?>

В этом скрипте "XXXXXXXXXXXXXXXXXXXXXXX" нужно заменить на свой ключ, полученный ранее.
Строки
PHP:
$json = json_decode($shit);
print("<pre>");
print_r($json);
print("</pre>");
выводят содержимое ответа в форме json.

Согласно той же документации, можно получить до 100 массивов за 1 запрос — данные нужно указывать через запятую: steamids=76561197960435530,76561197960435530,76561197960435530.
 

GANZ

Участник
Сообщения
208
Реакции
73
спасибо большое, вечером попробую разобраться)
 

GANZ

Участник
Сообщения
208
Реакции
73
получилось, но есть касяк, когда делаешь запрос steamids через запятую
они загружаются не по порядку, как записаны, а в случайном порядке
и вот таким способом уже не получается идентифицировать аватарки

steamids=76561197960435530,76561197960435530,76561197960435530

$n - переменная
$json->response->players[$n]->avatar

по идее должно быть так
$json->response->players[0]->avatar это 76561197960435530
$json->response->players[1]->avatar это 76561197960435530
$json->response->players[2]->avatar это 76561197960435530

а на деле выходит, что они перемешиваются
подскажите что можно сделать, я уже запарился
 

gibs

Фитиль народного волненья
Сообщения
722
Реакции
407
Мошенник
получилось, но есть касяк, когда делаешь запрос steamids через запятую
они загружаются не по порядку, как записаны, а в случайном порядке
и вот таким способом уже не получается идентифицировать аватарки

steamids=76561197960435530,76561197960435530,76561197960435530

$n - переменная
$json->response->players[$n]->avatar

по идее должно быть так
$json->response->players[0]->avatar это 76561197960435530
$json->response->players[1]->avatar это 76561197960435530
$json->response->players[2]->avatar это 76561197960435530

а на деле выходит, что они перемешиваются
подскажите что можно сделать, я уже запарился

Ну самый простой и очевидный метод - вложенный цикл:
PHP:
<?php
$arr[] = "76561197960435530";
$arr[] = "76561197960435531";
$arr[] = "76561197960435532";


$shit = file_get_contents("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=ХХХХХХХХХХХХХХХХХХ&steamids=76561197960435530,76561197960435531,76561197960435532");
$json = json_decode($shit);

foreach($arr as $id)
{
	foreach($json->response->players as $player)
	{
		if($player->steamid === $id)
		{
			echo $player->steamid.'</br>';
			echo "<img src='".$player->avatarfull."'> </br>\n";
			break;
		}
	}
}
?>
 

GANZ

Участник
Сообщения
208
Реакции
73
забыл написать)
Спасибо, да так все получилось
 

Snake

Участник
Сообщения
124
Реакции
30
а есть более быстрый (свежый) способ?
Просто вывод информации о девяти игроках на сайт занимает более 3 секунд.
 

Lord FEAR

Участник
Сообщения
429
Реакции
250
Кэширование настрой и можно загружать картинки скриптом параллельно занрузке страницы и выводить их мо мере получения
 

Snake

Участник
Сообщения
124
Реакции
30
Кэширование настрой и можно загружать картинки скриптом параллельно занрузке страницы и выводить их мо мере получения
Да у меня процесс в цикле был и он обращался к api.steampowered.com каждый раз, решил просто всех в один запрос. Теперь всё норм но 1 минус ответ от steam приходит рандомным (не по порядку steamID) вот сижу проверку делаю.
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,927
  • Команда форума
  • #12
@Snake, а в чём проблема сделать ассоциативный массив, где в роли ключа выступает SteamID, а в роли значения - ссылка на аватар?
 

Snake

Участник
Сообщения
124
Реакции
30
@Snake, а в чём проблема сделать ассоциативный массив, где в роли ключа выступает SteamID, а в роли значения - ссылка на аватар?
Можно поточнее?
Сейчас у меня идет запрос к базе. там берутся 10 игроков, по том все заносятся в переменную $steamidkonv2 (получается что там хранится такой текст: 765611941618354xxx,764711983618354xxx,765611983658354xxx...) потом запрос к steam серверам (file_get_contents("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=".$apikey."&steamids=".$steamidkonv2);) и потом приходится полученные данные группировать, оперяясь на данные из базы $steamidkonv (она возвращает их рандомно)

$ii=0;
$proverca="{$json->response->players[$ii]->steamid}";
while($proverca != $steamidkonv){
$ii++;
$proverca="{$json->response->players[$ii]->steamid}";
}
и если верно то вывод
echo "<span style='border-color: #dddddd;padding: 0.65em;border-radius: 10%;border: solid 1px;' class='image'><img style='border-radius: 10%;width: 7em;' src=\"{$json->response->players[$ii]->avatarfull}\"></span>";
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,927
  • Команда форума
  • #14
@Snake, скажите честно, Вы на PHP как давно пишете?
Что-то вроде такого будет:
PHP:
function getUserAvatars($steamIdArr, $ApiKey) {
  if (!is_array($steamIdArr))
    throw new LogicException("No array has been passed to function.");

  $steamIdReq = implode(',', $steamIdArr);
  $request = http_build_query([
    'key'       => $ApiKey,
    'steamids'  => $steamIdReq
  ]);

  $result = json_decode(file_get_contents("https://steamcommunity.com/ISteamUser/GetPlayerSummaries/v0002/?{$request}"), true);

  $response = [];
  foreach ($result['response']['players'] as $player) {
    $response[$player['steamid']] = $player['avatarfull'];
  }

  return $response;
}

А работать как-то так:
PHP:
<?php
$avatars = getUserAvatars($userIds);

// ...
?>
<!-- ... -->
<span style='border-color: #dddddd;padding: 0.65em;border-radius: 10%;border: solid 1px;' class='image'><img style='border-radius: 10%;width: 7em;' src="<?= $avatars[$users[$ii]] ?>"></span>

Показать более конкретные примеры довольно сложно, не видя всего кода.
 

SAPSAN 隼

Не было б печали, если бы ключи мне дали!
Сообщения
822
Реакции
778
Капец ребятки, качаете любой из существующих вебов связанных с загрузкой аватарок и их кеширование, и переписываете под себя! У каждого автора по своему, но думаю определится можно!
 
Сверху Снизу