如何使用nodejs判断一个STEAM ID是否被占用

How to tell if a STEAM ID is taken using nodejs

我正在尝试创建一个功能,该功能可以告诉我有关 Steam 页面的信息,我可以用它来判断是否找到了配置文件,并执行相应的操作。

我想到的是下面的函数。这告诉我关于该页面的大量信息,我希望当找不到 Steam 配置文件时,状态将是 404,但是找到的配置文件和未找到的配置文件之间没有区别。

//GETHTML
function getURLInfo(url) {



   (fetch(url))
                            .then(res => console.log(res))
                            .then(body => console.log(body)) 

      }

这是控制台输出

Response {
  size: 0,
  timeout: 0,
  [Symbol(Body internals)]: {
    body: Gunzip {
      _writeState: [Uint32Array],
      _readableState: [ReadableState],
      readable: true,
      _events: [Object: null prototype],
      _eventsCount: 6,
      _maxListeners: undefined,
      _writableState: [WritableState],
      writable: true,
      allowHalfOpen: true,
      _transformState: [Object],
      _hadError: false,
      bytesWritten: 0,
      _handle: [Zlib],
      _outBuffer: <Buffer 3c 21 44 4f 43 54 59 50 45 20 68 74 6d 6c 3e 0d 0a 3c 68 74 6d 6c 20 63 6c 61 73 73 3d 22 20 72 65 73 70 6f 6e 73 69 76 65 22 20 6c 61 6e 67 3d 22 65 ... 16334 more bytes>,
      _outOffset: 0,
      _chunkSize: 16384,
      _defaultFlushFlag: 2,
      _finishFlushFlag: 2,
      _defaultFullFlushFlag: 3,
      _info: undefined,
      _level: -1,
      _strategy: 0,
      [Symbol(kCapture)]: false
    },
    disturbed: false,
    error: null
  },
  [Symbol(Response internals)]: {
    url: 'https://steamcommunity.com/id/cmm9/',
    status: 200,
    statusText: 'OK',
    headers: Headers { [Symbol(map)]: [Object: null prototype] },
    counter: 0
  }
}

我想尝试的是创建一个函数,使页面的 HTML 成为一个长字符串,然后如果该字符串包含 'Specified profile could not be found.' 则执行一个操作,但我不知道我会怎么做。我需要有关如何执行此操作的帮助。

您真正应该使用的是 Steam Web API。您可以在此处注册密钥:https://steamcommunity.com/dev/apikey

这是一个有效的请求:https://api.steampowered.com/ISteamUser/GetPlayerSummaries/v2/?key={KEYGOESHERE}&format=json&steamids=76561198036370701

{
    "response": {
        "players": [
            {
                "steamid": "76561198036370701",
                "communityvisibilitystate": 3,
                "profilestate": 1,
                "personaname": "Heavenanvil",
                "commentpermission": 1,
                "profileurl": "https://steamcommunity.com/id/heavenanvil/",
                "avatar": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/d9/d9838736a062d18eb6848ba8d5cc56d72c1cef80.jpg",
                "avatarmedium": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/d9/d9838736a062d18eb6848ba8d5cc56d72c1cef80_medium.jpg",
                "avatarfull": "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/d9/d9838736a062d18eb6848ba8d5cc56d72c1cef80_full.jpg",
                "avatarhash": "d9838736a062d18eb6848ba8d5cc56d72c1cef80",
                "personastate": 0,
                "realname": "Heaven",
                "primaryclanid": "103582791433464576",
                "timecreated": 1294227386,
                "personastateflags": 0,
                "loccountrycode": "RU",
                "locstatecode": "39",
                "loccityid": 40975
            }
        ]
    }
}

当没有匹配的 steamId 时,您会得到一个空的响应。

{
    "response": {
        "players": []
    }
}

有关 API 的更多文档可在此处找到:https://partner.steamgames.com/doc/webapi_overview

编辑:如果您想检查是否有返回的玩家,只需检查 response.players 数组。

获取(url) .then(res => res.json()) .then(json => { const { 响应 } = json; 如果 (response.players && response.players.length > 0) { // 有玩家被发现。做一点事。 } 别的 { // 没有找到玩家,做点别的。 } });

如果您想使用他们的 VanityURL 进行检查,您可以使用此端点:http://api.steampowered.com/ISteamUser/ResolveVanityURL/v0001/?key={KEYGOESHERE}&format=json&vanityurl=Eclyps19

成功响应:

{
    "response": {
        "steamid": "76561197960670951",
        "success": 1
    }
}

未找到响应:

{
    "response": {
        "success": 42,
        "message": "No match"
    }
}

检查是否成功:

fetch(url)
    .then(res => res.json())
    .then(json => {
        const { response } = json;
        if (response.success === 1) {
            // Player found. Do something.
        } else {
            // No player found, do something else.
        }
    });