$url = "http://steamcommunity.com/profiles/$friendid/?xml=1";
/* Wersja pierwsza - SimpleXLM */
$xml = simplexml_load_file( $url );
$avat = trim( $xml->avatarFull );
echo "Avek v.1 => " . $avat . "<br />\n";
/* Wersja druga - CURL i regexp */
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
$data = curl_exec( $ch );
curl_close($ch);
preg_match( "#<avatarFull>(?:<!\[CDATA\[)?(.*?)(?:\]\]>)?</avatarFull>#i", $data, $matches );
$avat = count( $matches == 2 ) ? trim( $matches[1] ) : "WTF?!";
echo "Avek v.2 => " . $avat . "<br />\n";
Potem sprawdzenie poprawności url'a.
if ( !preg_match( "#^https?:\/\/.+\.(jpe?g|png|gif)$#i", $avat ) )
die( "Die, die, die !" );
A na koniec dopiero pobranie i zapisanie obrazka.
Więc cały ten if mógłby wyglądać tak:
if( !$exists )
{
$url = "http://steamcommunity.com/profiles/$friendid/?xml=1";
/* Wersja pierwsza - SimpleXLM */
$xml = simplexml_load_file( $url );
$avat = trim( $xml->avatarFull );
//echo "Avek v.1 => " . $avat . "<br />\n";
/* Koniec wersji pierwszej */
/* Wersja druga - CURL i regexp */
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
$data = curl_exec( $ch );
curl_close( $ch );
preg_match( "#<avatarFull>(?:<!\[CDATA\[)?(.*?)(?:\]\]>)?</avatarFull>#i", $data, $matches );
$avat = count( $matches == 2 ) ? trim( $matches[1] ) : "WTF?!";
//echo "Avek v.2 => " . $avat . "<br />\n";
/* Koniec wersji drugiej */
if ( !preg_match( "#^https?:\/\/.+\.(jpe?g|png|gif)$#i", $avat ) )
die( "Die, die, die !" );
/* Nie ufamy file_get_contents przy plikach z zewnatrz */
if ( !is_writable( "cache/" ) || file_exists( $cacheFile) && !is_writable( $cacheFile ) )
die ( "So lame..." );
$fp = fopen($cacheFile, "wb");
$ch = curl_init();
curl_setopt( $ch, CURLOPT_URL, $avat );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, 1 );
$img = curl_exec( $ch ) or die( "Curl Error" );
curl_close( $ch );
fwrite( $fp, $img );
fclose( $fp );
/* A czy aby na pewno tylko jpg jest mozliwe ? */
header("Content-type: image/jpg");
echo $img;
exit;
}
A funkcja steam2friend też może się zmienić.
function steam2friend( $steam_id ){
if ( !preg_match("#^steam_0:(\d)\d+)$#i", $steam_id, $tmp) )
return false; /* or die ( "Ekhm..." ); ]:-> */
return $tmp[2] * 2 + $tmp[1] + 76561197960265728;
}