Class PHP Steam : Différence entre versions

De Wiki levelKro
(Page créée avec « Steam offre un API mais peu de documentation, voici des codes pour vous aider à inclure Steam dans votre site. == Pré-requis == * Clé d'accès à l'API de Steam. * PHP... »)
 
Ligne 14 : Ligne 14 :
 
*/
 
*/
 
class STEAMcommunity {
 
class STEAMcommunity {
 +
  function=nameVAC($id){
 +
switch($id){
 +
case '0':
 +
return "En règle";
 +
break;
 +
case '1':
 +
return "Suspendu";
 +
break;
 +
default:
 +
return "Non déterminé";
 +
}
 +
  }
 +
  function=nameTrade($id)
 +
switch($id){
 +
case 'None':
 +
return "En règle";
 +
break;
 +
case 'Probation':
 +
return "Limité";
 +
break;
 +
default:
 +
return "Non déterminé";
 +
}
 +
  }
 +
      function=nameVisibility($id){
 +
switch($id){
 +
case '1':
 +
return "Privé";
 +
break;
 +
case '2':
 +
case '3':
 +
return "Public";
 +
break;
 +
default:
 +
return "Non déterminé";
 +
}
 +
};    
 +
   
 
function OpenURL($url){
 
function OpenURL($url){
 
// Code for get content of remote URL
 
// Code for get content of remote URL
Ligne 25 : Ligne 63 :
 
curl_close($ch);
 
curl_close($ch);
 
}
 
}
 +
       
 
function group($id){
 
function group($id){
 
// Return information about a Steam Group
 
// Return information about a Steam Group
Ligne 69 : Ligne 108 :
 
return false;
 
return false;
 
}
 
}
}
+
}
 +
        function=userAPI($apikey,$value){
 +
$result=$this->remoteUrl("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=".$apikey."&steamids=".$value."&format=json");
 +
$pro=json_decode($result);
 +
return (array) $pro->response->players[0];
 +
}  
 +
        function=userGames($apikey,$steamID){
 +
    $json = $this->remoteUrl("http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key=".$apikey."&steamid=".$steamID."&format=json");
 +
    $result = json_decode($json,true);
 +
    return $result['response']['games']; 
 +
        }
 +
    function=userBan($apikey,$steamID){
 +
          $result = false;
 +
          $json = $this->remoteUrl("http://api.steampowered.com/ISteamUser/GetPlayerBans/v1/?key=".$apikey."&steamids=".$steamID."&format=json");
 +
          $array = json_decode($json,true);
 +
          return $array['players']['0'];
 +
        }
 
}
 
}
 
</pre>
 
</pre>
Ligne 185 : Ligne 240 :
 
* De tous les packages associés aux produits
 
* De tous les packages associés aux produits
 
* D'un produit spécifique
 
* D'un produit spécifique
<pre></pre>
+
<pre>
 +
<?php
 +
/*
 +
* (c) Copyright Mathieu Légaré (levelkro@yahoo.ca)
 +
* 2013-2019
 +
*/
 +
class STEAMstore {   
 +
    }
 +
</pre>
 +
== SteamLogin.Class.php ==
 +
Requis pour l'identification avec Steam, utilise le OpenID Auth 2.0.
 +
<pre>
 +
<?php
 +
/*
 +
*/
 +
class STEAMSignIn {
 +
const STEAM_LOGIN = 'https://steamcommunity.com/openid/login';
 +
 +
public static function genUrl($returnTo = false, $useAmp = true) {
 +
$returnTo = (!$returnTo) ? (!empty($_SERVER['HTTPS']) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] : $returnTo;
 +
$params = array(
 +
'openid.ns' => 'http://specs.openid.net/auth/2.0',
 +
'openid.mode' => 'checkid_setup',
 +
'openid.return_to' => $returnTo,
 +
'openid.realm' => (!empty($_SERVER['HTTPS']) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'],
 +
'openid.identity' => 'http://specs.openid.net/auth/2.0/identifier_select',
 +
'openid.claimed_id' => 'http://specs.openid.net/auth/2.0/identifier_select',
 +
);
 +
$sep = ($useAmp) ? '&amp;' : '&';
 +
return self::STEAM_LOGIN . '?' . http_build_query($params, '', $sep);
 +
}
 +
public static function validate() {
 +
$params = array(
 +
'openid.assoc_handle' => $_GET['openid_assoc_handle'],
 +
'openid.signed' => $_GET['openid_signed'],
 +
'openid.sig' => $_GET['openid_sig'],
 +
'openid.ns' => 'http://specs.openid.net/auth/2.0',
 +
);
 +
$signed = explode(',', $_GET['openid_signed']);
 +
foreach($signed as $item) {
 +
$val = $_GET['openid_' . str_replace('.', '_', $item)];
 +
$params['openid.' . $item] = get_magic_quotes_gpc() ? stripslashes($val) : $val;
 +
}
 +
$params['openid.mode'] = 'check_authentication';
 +
$data =  http_build_query($params);
 +
$context = stream_context_create(array(
 +
'http' => array(
 +
'method'  => 'POST',
 +
'header'  =>
 +
"Accept-language: en\r\n".
 +
"Content-type: application/x-www-form-urlencoded\r\n" .
 +
"Content-Length: " . strlen($data) . "\r\n",
 +
'content' => $data,
 +
),
 +
));
 +
$result = file_get_contents(self::STEAM_LOGIN, false, $context);
 +
preg_match("#^https://steamcommunity.com/openid/id/([0-9]{17,25})#", $_GET['openid_claimed_id'], $matches);
 +
$steamid64 = is_numeric($matches[1]) ? $matches[1] : 0;
 +
return preg_match("#is_valid\s*:\s*true#i", $result) == 1 ? $steamid64 : false;
 +
}
 +
}
 +
</pre>
 
[[Catégorie:Programmation]]
 
[[Catégorie:Programmation]]

Version du 27 janvier 2019 à 06:55

Steam offre un API mais peu de documentation, voici des codes pour vous aider à inclure Steam dans votre site.

Pré-requis

  • Clé d'accès à l'API de Steam.
  • PHP 5.4+ avec cURL

SteamCommunity.Class.php

Permet d'avoir les informations;

  • D'un groupe
  • D'un utilisateur
<?php
	/*
	 * (c) Copyright Mathieu Légaré (levelkro@yahoo.ca)
	 * 2013-2019
	 */
	class STEAMcommunity {
	  function=nameVAC($id){
		switch($id){
			case '0':
				return "En règle";
				break;
			case '1':
				return "Suspendu";
				break;
			default:
				return "Non déterminé";
		}
	  }
	  function=nameTrade($id)
		switch($id){
			case 'None':
				return "En règle";
				break;
			case 'Probation':
				return "Limité";
				break;
			default:
				return "Non déterminé";
		}	
	  }
      function=nameVisibility($id){
		switch($id){
			case '1':
				return "Privé";
				break;
			case '2':
			case '3':
				return "Public";
				break;
			default:
				return "Non déterminé";
		}			
	};	    
    
		function OpenURL($url){
			// Code for get content of remote URL
			$ch = curl_init();
			curl_setopt($ch,CURLOPT_URL,$url);
			curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
			curl_setopt($ch,CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3");
			curl_setopt($ch,CURLOPT_TIMEOUT,1000);
			$result = curl_exec($ch);
			return $result; 
			curl_close($ch);
		}	
        
		function group($id){
			// Return information about a Steam Group
			$values = self::OpenURL("http://steamcommunity.com/groups/".$id."/memberslistxml/?xml=1");
			try{
				$values = (array) simplexml_load_string($values);
				$values['groupDetails'] = (array) $values['groupDetails'];				
				$values['groupDetails']['groupName'] = (string) $values['groupDetails']['groupName'];
				$values['groupDetails']['groupURL'] = (string) $values['groupDetails']['groupURL'];
				$values['groupDetails']['headline'] = (string) $values['groupDetails']['headline'];
				$values['groupDetails']['summary'] = (string) $values['groupDetails']['summary'];
				$values['groupDetails']['avatarIcon'] = (string) $values['groupDetails']['avatarIcon'];
				$values['groupDetails']['avatarMedium'] = (string) $values['groupDetails']['avatarMedium'];
				$values['groupDetails']['avatarFull'] = (string) $values['groupDetails']['avatarFull'];
				$values['members'] = (array) $values['members'];
				return $values;
			} catch (Exception $e) {
				return false;
			} 		
		}	
		function user($id){
			// Return information about a Steam Group
			$values = self::OpenURL("http://steamcommunity.com/id/".$id."/?xml=1");
			try{
				$values = (array) simplexml_load_string($values);
				$values['steamID'] = (string) $values['steamID'];
				$values['stateMessage'] = (string) $values['stateMessage'];
				$values['avatarIcon'] = (string) $values['avatarIcon'];
				$values['avatarMedium'] = (string) $values['avatarMedium'];
				$values['avatarFull'] = (string) $values['avatarFull'];
				$values['customURL'] = (string) $values['customURL'];
				$values['steamRating'] = (string) $values['steamRating'];
				$values['headline'] = (string) $values['headline'];
				$values['location'] = (string) $values['location'];
				$values['realname'] = (string) $values['realname'];
				$values['summary'] = (string) $values['summary'];
				
				$values['mostPlayedGames'] = (array) $values['mostPlayedGames'];
				$values['mostPlayedGames'] = (array) $values['mostPlayedGames']['mostPlayedGame'];
				$values['groups'] = (array) $values['groups'];
				$values['groups'] = (array) $values['groups']['group'];
				return $values;
			} catch (Exception $e) {
				return false;
			} 		
		}	
        function=userAPI($apikey,$value){
			$result=$this->remoteUrl("http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=".$apikey."&steamids=".$value."&format=json");
			$pro=json_decode($result);
			return (array) $pro->response->players[0];
		}	  
        function=userGames($apikey,$steamID){
		    $json = $this->remoteUrl("http://api.steampowered.com/IPlayerService/GetOwnedGames/v0001/?key=".$apikey."&steamid=".$steamID."&format=json"); 
		    $result = json_decode($json,true);	
		    return $result['response']['games'];   
        }
	    function=userBan($apikey,$steamID){
          $result = false;
          $json = $this->remoteUrl("http://api.steampowered.com/ISteamUser/GetPlayerBans/v1/?key=".$apikey."&steamids=".$steamID."&format=json");		
          $array = json_decode($json,true);
          return $array['players']['0'];
        }
	}	

SteamMarket.Class.php

Permet d'avoir les informations;

  • Nombre total de produits
  • Résultat depuis 'X' des items (100 éléments maximum)
  • Détails d'un produit du marché spécifique (avec URL)
<?php
	/*
	 * (c) Copyright Mathieu Légaré (levelkro@yahoo.ca)
	 * 2013-2019
	 */
	class STEAMmarket {     
	// Récupérer le contenu d'une page distant
	function getUrlContent($url){
		$ch = curl_init();
		curl_setopt($ch,CURLOPT_URL,$url);
		curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
		curl_setopt($ch,CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.3) Gecko/20060426 Firefox/1.5.0.3");
		curl_setopt($ch,CURLOPT_TIMEOUT,1000);
		$result = curl_exec($ch);
		return $result; 
		curl_close($ch);
	}	

	// Récupère la listes des 100 éléments suivants
	function getListDetails($s=0){
		$l="https://steamcommunity.com/market/search/render/?query=&start=".$s."&count=100&norender=1";
		$s=getUrlContent($l);
		$n=(array) json_decode($s, true);
		return $n;
	}

	// Récupère le nombre d'éléments à importer
	function getListPages(){
		$l="https://steamcommunity.com/market/search/render/?query=&start=0&count=100&norender=1";
		$s=getUrlContent($l);
		$n=(array) json_decode($s, true);
		return $n['total_count'];
	}
		function getInfos($p){
			// Get informations about the item in Market
			$source = self::OpenURL($p);
			$htmlsrc=explode("<!-- main body -->",$source);	// The beginning
			$htmlsrc=explode("<div id=\"market_activity_section\">",$htmlsrc[1]); // The end of part of code
			$htmlsrc=$htmlsrc[0]; 
			$htmlsrc=str_replace("&"."#36;","",$htmlsrc);	   
			$htmlsrc=str_replace("\r","",$htmlsrc);
			$htmlsrc=str_replace("\t","",$htmlsrc);	
			$htmlsrc=str_replace("\n","",$htmlsrc);	
			$htmlsrc=str_replace(">","",$htmlsrc);
			$htmlsrc=str_replace("<div id=\"BG_bottom\"><div id=\"mainContents\"><div class=\"market_listing_nav_container\"><div class=\"market_listing_nav\">","<item>\r\n",$htmlsrc);	
			$htmlsrc=str_replace("<div style=\"clear: both;\"></div>","",$htmlsrc);
			$htmlsrc=preg_replace("/<\/a>/i","</a>\r\n", $htmlsrc);
			$htmlsrc=explode("<div id=\"largeiteminfo\">",$htmlsrc);
			$htmlsrc=$htmlsrc[0];
			$htmlsrc=str_replace("</div></div><div class=\"market_page_fullwidth market_listing_firstsection\"><div class=\"market_listing_iteminfo\"><div class=\"market_listing_largeimage\">","",$htmlsrc);
			$htmlsrc=preg_replace("/<a href=\"(.+)search(.+)=(.+)\">(.+)<\/a>/i","<catAppid>$3</catAppid>\r\n<catName>$4</catName>", $htmlsrc);
			$htmlsrc=preg_replace("/<a href=\"(.+)listing(.+)\">(.+)<\/a>/i","<itemUrl>$1listing$2</itemUrl>\r\n<itemName>$3</itemName>", $htmlsrc);
			$htmlsrc=preg_replace("/<img src=\"(.+)\" alt=\"\" \/><\/div>/i","<itemImage>$1</itemImage>", $htmlsrc);
			$htmlsrc=$htmlsrc."</item>";
			$htmlsrc="<?phpxml version=\"1.0\" encoding=\"UTF-8\"?>\r\n".$htmlsrc."";
			$htmlsrc=str_replace("&","&",$htmlsrc);
			try{
				$htmlsrc = simplexml_load_string($htmlsrc);
				$htmlsrc = (array) $htmlsrc;
			} catch (Exception $e) {
				$htmlsrc=array();
			} 
			$jsonAsrc=explode("var g_rgAppContextData = ",$source);
			$jsonAsrc=explode("var g_rgAssets",$jsonAsrc[1]);
			$jsonAsrc=explode("\"".$htmlsrc['catAppid']."\":",$jsonAsrc[0]);
			$jsonAsrc=explode("};",$jsonAsrc[1]);
			if(strpos($jsonAsrc[0],"},")){
				$jsonAsrc=explode("},",$jsonAsrc[0]);
				$jsonAsrc=explode(":{",$jsonAsrc[1]);
				$jsonAsrc=(array) json_decode("{".$jsonAsrc[1],true);
			}
			else{
				$jsonAsrc=(array) json_decode($jsonAsrc[0],true);
			}
			$jsonBsrc=explode("var g_rgAssets = ",$source);
			$jsonBsrc=explode("var g_rgListingInfo",$jsonBsrc[1]);
			$jsonBsrc=explode("\"".$htmlsrc['catAppid']."\":",$jsonBsrc[0]);
			$jsonBsrc=explode("};",$jsonBsrc[1]);
			$jsonBsrc=(array) json_decode($jsonBsrc[0],true);
			foreach($jsonBsrc as $jsonItemsrc){
				$jsonBsrc=$jsonItemsrc;
			}			
			$o=1;
			foreach($jsonBsrc as $jsonItemsrc){
				if($o==1){
					$jsonItem=$jsonItemsrc;
					$o++;
				}
			}
			$jsonItemDesc="";
			foreach($jsonItem['descriptions'] as $jsonDescsrc){
				$jsonItemDesc.=$jsonDescsrc['value']."<br/>";
			}			
			$jsonItem['descriptions']=$jsonItemDesc;
			$output=array();
			$output['base']=$htmlsrc;
			$output['parent']=$jsonAsrc;
			$output['item']=$jsonItem;
			return $output;
		}
       }

SteamStore.Class.php

Permet d'avoir les informations;

  • De tous les produits disponibles (sans les exclus, désactivés, supprimés, etc...)
  • De tous les packages associés aux produits
  • D'un produit spécifique
<?php
	/*
	 * (c) Copyright Mathieu Légaré (levelkro@yahoo.ca)
	 * 2013-2019
	 */
	class STEAMstore {    
    }

SteamLogin.Class.php

Requis pour l'identification avec Steam, utilise le OpenID Auth 2.0.

<?php
	/*
	 */
	class STEAMSignIn {
		const STEAM_LOGIN = 'https://steamcommunity.com/openid/login';
		
		public static function genUrl($returnTo = false, $useAmp = true) {
			$returnTo = (!$returnTo) ? (!empty($_SERVER['HTTPS']) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] : $returnTo;
			$params = array(
				'openid.ns'			=> 'http://specs.openid.net/auth/2.0',
				'openid.mode'		=> 'checkid_setup',
				'openid.return_to'	=> $returnTo,
				'openid.realm'		=> (!empty($_SERVER['HTTPS']) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'],
				'openid.identity'	=> 'http://specs.openid.net/auth/2.0/identifier_select',
				'openid.claimed_id'	=> 'http://specs.openid.net/auth/2.0/identifier_select',
			);
			$sep = ($useAmp) ? '&' : '&';
			return self::STEAM_LOGIN . '?' . http_build_query($params, '', $sep);
		}
		public static function validate() {
			$params = array(
				'openid.assoc_handle'	=> $_GET['openid_assoc_handle'],
				'openid.signed'			=> $_GET['openid_signed'],
				'openid.sig'			=> $_GET['openid_sig'],
				'openid.ns'				=> 'http://specs.openid.net/auth/2.0',
			);
			$signed = explode(',', $_GET['openid_signed']);
			foreach($signed as $item) {
				$val = $_GET['openid_' . str_replace('.', '_', $item)];
				$params['openid.' . $item] = get_magic_quotes_gpc() ? stripslashes($val) : $val; 
			}
			$params['openid.mode'] = 'check_authentication';
			$data =  http_build_query($params);
			$context = stream_context_create(array(
				'http' => array(
					'method'  => 'POST',
					'header'  => 
						"Accept-language: en\r\n".
						"Content-type: application/x-www-form-urlencoded\r\n" .
						"Content-Length: " . strlen($data) . "\r\n",
					'content' => $data,
				),
			));
			$result = file_get_contents(self::STEAM_LOGIN, false, $context);
			preg_match("#^https://steamcommunity.com/openid/id/([0-9]{17,25})#", $_GET['openid_claimed_id'], $matches);
			$steamid64 = is_numeric($matches[1]) ? $matches[1] : 0;
			return preg_match("#is_valid\s*:\s*true#i", $result) == 1 ? $steamid64 : false;
		}
	}