2016-03-31 15 views
1

Ich benutze derzeit PHP, um eine Website über Dampf zu entwickeln, die das Profil des Benutzers holen und Spielerkarten und so weiter machen kann. Ich verwende die Steam Web API, um mir die gewünschten Informationen zu geben. Das Problem ist, wenn ich die Absicht, die Abzeichen des Benutzers zu erwerben, verwende ich die „IPlayerService/GetBadges/v1“ api, und es gibt eine JSON-Daten wie folgt aus:Warum kann ich nicht php curl verwenden, um Steam-Benutzerprofile zu erhalten und wie bekomme ich ein Steam-Badge-Bild?

{ 
    "response": { 
     "badges": [ 
      { 
       "badgeid": 23, 
       "level": 300, 
       "completion_time": 1434209651, 
       "xp": 125, 
       "scarcity": 0 
      }, 
      { 
       "badgeid": 18, 
       "level": 15, 
       "completion_time": 1404061200, 
       "xp": 100, 
       "scarcity": 102167 
      }, 
      { 
       "badgeid": 2, 
       "level": 3, 
       "completion_time": 1457872741, 
       "xp": 500, 
       "scarcity": 1334304 
      }, 
      { 
       "badgeid": 13, 
       "level": 57, 
       "completion_time": 1356099851, 
       "xp": 260, 
       "scarcity": 5832743 
      }, 
      { 
       "badgeid": 1, 
       "level": 3, 
       "completion_time": 1356099851, 
       "xp": 150, 
       "scarcity": 76725893 
      }, 
      { 
       "badgeid": 1, 
       "appid": 231430, 
       "level": 3, 
       "completion_time": 1455540973, 
       "xp": 300, 
       "communityitemid": "817099833", 
       "border_color": 0, 
       "scarcity": 20438 
      }, 
      { 
       "badgeid": 1, 
       "appid": 24010, 
       "level": 1, 
       "completion_time": 1403487961, 
       "xp": 100, 
       "communityitemid": "828384582", 
       "border_color": 0, 
       "scarcity": 15404 
      }, 
      { 
       "badgeid": 1, 
       "appid": 35450, 
       "level": 1, 
       "completion_time": 1403573788, 
       "xp": 100, 
       "communityitemid": "842044372", 
       "border_color": 0, 
       "scarcity": 122236 
      }, 
      { 
       "badgeid": 1, 
       "appid": 63380, 
       "level": 1, 
       "completion_time": 1403574599, 
       "xp": 100, 
       "communityitemid": "842169975", 
       "border_color": 0, 
       "scarcity": 222048 
      }, 
      { 
       "badgeid": 1, 
       "appid": 303700, 
       "level": 1, 
       "completion_time": 1403743093, 
       "xp": 100, 
       "communityitemid": "866824198", 
       "border_color": 0, 
       "scarcity": 998614 
      }, 
      { 
       "badgeid": 17, 
       "appid": 335590, 
       "level": 1, 
       "completion_time": 1420075581, 
       "xp": 100, 
       "communityitemid": "1438441936", 
       "border_color": 0, 
       "scarcity": 858393 
      }, 
      { 
       "badgeid": 1, 
       "appid": 105450, 
       "level": 1, 
       "completion_time": 1451207235, 
       "xp": 100, 
       "communityitemid": "2454848086", 
       "border_color": 0, 
       "scarcity": 49755 
      }, 
      { 
       "badgeid": 1, 
       "appid": 220200, 
       "level": 1, 
       "completion_time": 1451207275, 
       "xp": 100, 
       "communityitemid": "2454853894", 
       "border_color": 0, 
       "scarcity": 100821 
      }, 
      { 
       "badgeid": 2, 
       "appid": 425280, 
       "level": 3, 
       "completion_time": 1451805075, 
       "xp": 300, 
       "communityitemid": "2483562201", 
       "border_color": 0, 
       "scarcity": 297565 
      }, 
      { 
       "badgeid": 1, 
       "appid": 206440, 
       "level": 1, 
       "completion_time": 1451805331, 
       "xp": 100, 
       "communityitemid": "2549522337", 
       "border_color": 0, 
       "scarcity": 43807 
      }, 
      { 
       "badgeid": 1, 
       "appid": 391220, 
       "level": 1, 
       "completion_time": 1455372224, 
       "xp": 100, 
       "communityitemid": "2699515873", 
       "border_color": 0, 
       "scarcity": 16843 
      }, 
      { 
       "badgeid": 1, 
       "appid": 287390, 
       "level": 1, 
       "completion_time": 1457355907, 
       "xp": 100, 
       "communityitemid": "2764853882", 
       "border_color": 0, 
       "scarcity": 35158 
      } 
     ] 
     , 
     "player_xp": 2735, 
     "player_level": 18, 
     "player_xp_needed_to_level_up": 65, 
     "player_xp_needed_current_level": 2600 
    } 
} 

Diese Daten können nur zurückgegeben, erzählt mir von der badgeid und appid und sagt nichts über die URL des Abzeichenbildes. Ich habe das Abzeichen Bild auf Dampf, es ist URL wie http://cdn.akamai.steamstatic.com/steamcommunity/public/images/items/105450/ ist 472be31927c4e77721fcba33bbd04b1331272e7e .png

so kann ich nicht die URL bekommen nur durch die appid. Da der Dampfbahn api kann nicht meine Absicht erfüllen, versuche ich php curl die Anfrage zu verwenden, um die Seite Profilseite und Abzeichen des Dampf Benutzer die Informationen, die ich brauche, und mein Code zu erwerben:

$url='http://steamcommunity.com/profile/76561198078931851'; 
$postFields=''; 
$cookie=''; 
$header=array('Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*//*;q=0.8', 'Accept-Encoding:gzip, deflate, sdch', 'Accept-Language:zh-CN,zh;q=0.8', 'Cache-Control:max-age=0', 'Connection:keep-alive','Host:steamcommunity.com', 'Upgrade-Insecure-Requests: 1','User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36'); 

$btch=curl_init($url); 

curl_setopt($btch, CURLOPT_FAILONERROR, 0); 
curl_setopt($btch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($btch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($btch, CURLOPT_TIMEOUT, 1); 
curl_setopt($btch, CURLOPT_ENCODING, 'gzip,deflate,sdch');   // 防止乱码 
curl_setopt($btch, CURLOPT_HEADER, 1); 
curl_setopt($btch, CURLOPT_COOKIE, $cookie); 
curl_setopt($btch, CURLOPT_HTTPHEADER, $header); 
curl_setopt($btch, CURLOPT_HTTPGET, 1); 

try{  
     $result=curl_exec($btch); 
}    
catch(exception $e) 
{    
     echo $e->getMessage(); 
} 
if(!$result) 
{ 
    echo 'false!'; 
} 
echo '<pre>'; 
print_r($result); 
echo '</pre>'; 

curl_close($btch); 

Die Locke tat Arbeit, aber Steam nie die Profilseite des Benutzers zurück und leitet immer die Anfrage immer auf die Homepage von Steam-Community und fordert mich auf, sich anzumelden. Daher kann ich nicht weiter Benutzerprofil abrufen. Ich habe die folgende verwandte Frage gelesen: Steam Web API get Badge Image URL Weiß jemand etwas darüber, wie man dieses Problem löst, und könnten Sie mir etwas Hilfe zur Verfügung stellen? Vielen Dank im Voraus!

+0

Ich nehme an, die Steam Web API erfordert Benutzer angemeldet sein, um seine Profilseite zu dienen. Es klingt nicht so unerwartet ... :-) – MarcoS

+0

@MarcoS Danke für deinen Kommentar, aber vielleicht hast du mich falsch verstanden. 1 Wenn ich php curl direkt benutze, frage ich die Steam-Benutzerprofilseite (wie http://steamcommunity.com/profiles/76561198119890595), dass ich mich anmelden soll, nicht wenn ich die dampf web api benutze. Die Steam Web API funktioniert einwandfrei, es kann einfach nicht die Informationen liefern, die ich brauche. 2 Wenn ich einen Webbrowser verwende (ich habe Chrome, Edge und ie ausprobiert), um eine Benutzerprofilseite zu besuchen, werde ich nicht aufgefordert, mich einzuloggen, und ich kann immer noch den gesamten Inhalt bekommen. Ich lösche sogar alle meine Cookies, um sicherzustellen, dass ich nicht eingeloggt bin, und es funktioniert immer noch. Das ist der verwirrendste Teil. – RainnyMiG

+0

Sorry, ich kenne Steam Web API nicht; Ich habe nur versucht, eine Äußerung von draußen zu geben, vorausgesetzt, es könnte ein Fehler von dir sein ... :-( – MarcoS

Antwort

0

Es scheint, dass ich einen Weg selbst finde, um das Problem zu lösen ... nur file_get_contents() statt curl verwenden, um die Steam-Benutzerprofilseite anzufordern. :)

Verwandte Themen