【问题标题】:Get steamID by user nickname通过用户昵称获取 steamID
【发布时间】:2013-10-15 09:17:12
【问题描述】:

可以通过昵称获取用户的steamID吗?我没有在 Steam API 文档中找到解决方案。我发现的唯一一件事是http://dev.dota2.com 上的旧帖子:

您可以使用 GetMatchHistory 的 player_name 选项直接搜索 Dota2 API 然后您可以在列表中找到他们的 32 位 ID,然后将其转换为 64 位 ID。

但是现在GetMatchHistory 函数没有player_name 参数。现在它需要account_id

那么像http://dotabuff.com/search?q=Dendi 这样的网站是如何获得这些信息的呢?

【问题讨论】:

    标签: php steam-web-api


    【解决方案1】:

    你可以使用

    获取http://api.steampowered.com/ISteamUser/ResolveVanityURL/v0001/

    从 Steam 配置文件的自定义 URL 中获取 SteamID。见http://wiki.teamfortress.com/wiki/WebAPI/ResolveVanityURL

    您无法从某人当前的昵称中获取 steamID,因为昵称可以更改并且不是唯一的。

    【讨论】:

    • 小附录:就像昵称一样,自定义 URL 也可以更改。但由于自定义 URL 是唯一的,您将不得不处理“如果两个玩家交换他们的 URL 怎么办?”之类的情况。
    【解决方案2】:

    使用 PHP 和 Steam Condenser 项目,您可以完成此操作。

    require_once('steam/steam-condenser.php');
    
    $playername = 'NAMEOFPLAYER';
    try
    {
        $id = SteamId::create($playername);
    } 
    catch (SteamCondenserException $s)
    {
        // Error occurred
    }
    
    echo $id->getSteamId;
    

    如果您需要更多信息,该项目的 wiki 中有usage examples

    【讨论】:

    • 我想这已经不可能了:D
    【解决方案3】:

    这是我对这个问题的解决方案:

    module.exports.getProfile = async (req, res) => {
    let response = { success: false, data: {}, error: {} }
    let { profileAddress } = req.body;
    if (profileAddress) {
        try {
            let steamId;
            let split = profileAddress.split('/');
            split = split.filter(arrayItem => arrayItem != '');
            if (split[split.length - 2] === 'profiles') {
                steamId = split[split.length - 1]
            } else {
                let vanityUrl = split[split.length - 1];
                let steamIdResponse = await axios.get(
                    `http://api.steampowered.com/ISteamUser/ResolveVanityURL/v0001/?key=${process.env.steamApiKey}&vanityurl=${vanityUrl}`,
                );
                if (steamIdResponse.data.response.success === 1) {
                    steamId = steamIdResponse.data.response.steamid;
                } else {
                    response.error = steamIdResponse.data.response.message;
                }
            }
            let profileResponse = await axios.get(
                `http://api.steampowered.com/ISteamUser/GetPlayerSummaries/v0002/?key=${process.env.steamApiKey}&steamids=${steamId}`,
            );
            if (profileResponse.data.response.players[0]) {
                response = {
                    success: true,
                    data: profileResponse.data.response.players[0],
                    error: null
                }
                res.status(200);
            } else {
                response.error = response.error ? response.error : "Failed to get Profile.";
                res.status(500);
            }
            res.send(response);
        } catch (error) {
            console.log(error)
            response.error = "Failed to get Profile."
            res.status(500).send(response);
        }
    } else {
        response.error = "Profile URL missing."
        res.status(500).send(response);
    }
    };
    

    【讨论】:

      【解决方案4】:

      这是 JS 答案,不是 PHP,但无论如何

      您可以使用这个url地址从steamcommunity.com/search/获取用户列表 页面

      https://steamcommunity.com/search/SearchCommunityAjax?text=aaa&filter=users&sessionid=session&steamid_user=false&page=1

      text 表示用户名,sessionid 表示 cookie 文件中的 sessionid,您可以通过访问站点本身来获取它

      这是我用于演示的糟糕代码:

      let axios = require('axios').default;
      
      //create axios instance from which we will get to the search list
      let instance = axios.create({ baseURL: 'https://steamcommunity.com' });
      
      async function getSessionId() {
      
        let res = await axios.get('https://steamcommunity.com/');
        
        let [cookie] = res.headers['set-cookie'];
        
        instance.defaults.headers.Cookie = cookie;
        
        return cookie;
      
      }
      
      getSessionId().then(cookie => {
      
        let session = cookie.split(' ')[0].slice(10, -1);
        instance.get(`https://steamcommunity.com/search/SearchCommunityAjax?text=aaa&filter=users&sessionid=${session}&steamid_user=false&page=1`).then(res => {
        
          //i have regex
          let regex = /('<div>')/|/('<img>')/|/('<span>')/g
          
          //html also
          let arr = res.data.html.split(regex).join('').split('\t').join('').split('\n').join('').split('\r');
      
          arr = arr.filter(a => a !== '');
          
          arr = arr.filter(a => a.includes("searchPersonaName"));
          
          let result = [];
      
          arr.forEach(a => {
                  
                  let [link, name] = a.replace('<a class="searchPersonaName" href="','').replace('</a><br />','').split('">');
      
                  let obj = {
      
                      link,
      
                      name
      
                  };
      
                  result.push(obj);
              
              });
      
              console.log(result); //logs out array of objects with links and usernames
        
        })
        
      })

      【讨论】:

        【解决方案5】:

        不使用 api 的简单方法

        转到您的 Steam 个人资料页面 右键单击 -> 检查元素 -> Ctrl + F(查找)-> 键入“steamid”(不带引号)

        稍后谢谢我:)

        【讨论】:

          【解决方案6】:

          您是否从 Steam Web API 阅读过此内容?

          https://developer.valvesoftware.com/wiki/Steam_Web_API#GetPlayerSummaries_.28v0002.29

          它有一个使用 Steam 配置文件 url 返回用户 Steam ID 的示例,还有一些其他参数来收集其他信息。

          如果你从那里读了一点,它会说“返回任何 Steam 用户的朋友列表

          示例网址:http://api.steampowered.com/ISteamUser/GetFriendList/v0001/?key=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX&steamid=76561197960435530&relationship=friend"

          • 您可以为要返回的个人资料信息添加参数,例如如果个人资料是公开的,则为 Steam ID。

          【讨论】:

          • 是的。此功能需要steamids 参数。这是一组蒸汽 ID。不是昵称。
          猜你喜欢
          • 2021-07-30
          • 2017-12-18
          • 2014-05-04
          • 2021-04-14
          • 1970-01-01
          • 2021-02-23
          • 1970-01-01
          • 2018-08-21
          相关资源
          最近更新 更多