@incognito82
Начал учить PHP :)

Не вывести аватарку через Steam API, как правильно построить код?

Добрый день дорогие пользователи. Я уже целую неделю борюсь с проблемой, что не могу вывести аватарки через Steam API.

Как должен работать мой код:
• Код берет из базы MySQL 15 последних SteamID, которые были авторизованы на сайте через Steam.
• На главной странице сайта в таблицу выводит аватарки данных SteamID с помощью Steam API.

Как это работает в данном случае:
• Все работает прекрасно, но аватарки не отображает. Если нажать по аватарке ПКМ и посмотреть исходный код, то ссылка на изображение там вообще отсутствует.
Там мы увидим что-то вроде этого:
<img src="" width="50px" height="50px">

Подскажите, что поправить в коде, чтобы он стал адекватно работать? Я уже запутался...

<div class="panel panel-default">
	<?php	
		include("db_connect.php");
		$usersData = [];
		$steamIds = [];
        $query = "SELECT steam_id FROM users_profiles ORDER BY `id` DESC limit 15";
        $result = mysql_query($query)or die("MySQL Error");
        if (mysql_num_rows($result) > 0) {
            while ($row = mysql_fetch_assoc($result)) {
                $usersData[$row['steam_id']] = $row;
				$steamIds = $row['steam_id'];
            }
        }

		$url = "http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=".$steamauth['apikey']."&steamids=" . join(',', $steamIds);
		$ch = curl_init();
		curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
		curl_setopt($ch, CURLOPT_URL,$url);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
		$result=curl_exec($ch);
		curl_close($ch);
		$steamData = json_decode($result, true);
		
		foreach($steamData['response']['players'] as &$player) {
			$usersData[$player['steamid']]['steam_avatar'] = $player['avatarmedium'];
			$usersData[$player['steamid']]['steam_avatar'] = str_replace("https","http",$usersData[$player['steamid']]['steam_avatar']);
			$usersData[$player['steamid']]['steam_name'] = $player['personaname'];
		}
		
		$chunked = array_chunk($usersData, 3);	
	?>
	  
  <table class="table table-striped table-responsive table-bordered">
	<tbody>
		<?php foreach($chunked as &$chunked_row): ?>
			<tr>
				<?php foreach($chunked_row as &$chunked_cell): ?>
					<td>
						<center>
							<img src="<?= htmlspecialchars($chunked_cell['steam_avatar']); ?>" width="50px" height="50px"/>
							<?= htmlspecialchars($chunked_cell['steam_avatar']); ?>
						</center>
					</td>
				<?php endforeach; ?>
			</tr>
		<?php endforeach; ?>
    </tbody>
  </table>
</div>
  • Вопрос задан
  • 1614 просмотров
Пригласить эксперта
Ответы на вопрос 3
mhthnz
@mhthnz
PHP, YII2, Golang, Linux
Когда-то писал библиотеку для Steam API, может пригодится:
https://github.com/mhthnz/SteamPlayer
Есть методы для получения ссылки на аватар (3 размеров) и скачивание аватара:
// Steam api key
SteamPlayer::$API_KEY = 'api key'; 

// Массив идентификаторов стима
$steamIDs = [
    'xxxxxxxxxxxxxxxxxxxxx', 
    'xxxxxxxxxxxxxxxxxxxxx', 
    'xxxxxxxxxxxxxxxxxxxxx'
];

// Отдает коллекцию объектов SteamPlayer
$SteamPlayerCollection = SteamPlayer::Create($steamIDs);

// Получаем массив инстансов SteamPlayer[] и выводим ссылку на большой аватара у каждого
foreach($SteamPlayerCollection->get() as $player){
    echo $player->avatar(SteamPlayer::AVATAR_LARGE);
}
Ответ написан
Комментировать
Urvin
@Urvin
Возникает ощущение что неделю Вы боретесь не с проблемой, а с окружающим миром, который не хочет делать за Вас Вашу работу.
Вы освоили за неделю var_dump и print_r?

Как Вы боролись, если стандартный путь отладки — задаться вопросами:
— Происходит ли коннект к базе;
— Что находится в $usersData и $steamIds после выборки данных;
— Какой формируется $url;
— Что содержится в $result;
— Что содержится в $steamData после декодировки;
— Что содержится в $usersData после дополнения данными;
Вами не пройден?

Что Вы неделю делали? Создали три идентичных темы на Тостере?
Вы понимаете, что делает приведенный Вами код?

$steamIds[] = $row['steam_id'];
Ответ написан
@ukoHka
Всего понемногу
Код точно правильный? С правильными профилями у меня картинки отображаются. Если же задать заведомо неправильные, приходит $result с пустым players и img не формируется вообще.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы