Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Microsoft REST API将Xbox Live GamerTag转换为XUID-Java_Java_Xbox Live - Fatal编程技术网

使用Microsoft REST API将Xbox Live GamerTag转换为XUID-Java

使用Microsoft REST API将Xbox Live GamerTag转换为XUID-Java,java,xbox-live,Java,Xbox Live,我有一个Java应用程序,它需要能够为Minecraft Basefick Edition获取用户输入的gamertag,并将其转换为给定帐户的XUID,以便我可以将其存储起来,以便稍后用于白名单和参考目的 我一直在浏览Microsoft REST API文档,寻找一种可以让我这样做的方法,但我能找到的最接近的方法是: 它仍然需要XUID作为输入,而不是作为输出提供 是否有任何方法可以将玩家代号的给定字符串输入转换为关联帐户的XUID,或者如果Java应用程序不存在此类帐户,则转换为null?

我有一个Java应用程序,它需要能够为Minecraft Basefick Edition获取用户输入的gamertag,并将其转换为给定帐户的XUID,以便我可以将其存储起来,以便稍后用于白名单和参考目的

我一直在浏览Microsoft REST API文档,寻找一种可以让我这样做的方法,但我能找到的最接近的方法是:

它仍然需要XUID作为输入,而不是作为输出提供

是否有任何方法可以将玩家代号的给定字符串输入转换为关联帐户的XUID,或者如果Java应用程序不存在此类帐户,则转换为null?

我已经用纯的、自包含的
bash+curl+sed
编写了一篇文章

它的灵感来源于抄袭/浓缩自from的,,您可能应该改用它。他们的API是如此之好,涵盖了如此之多的奥秘,以至于微软;如果您的项目的核心功能依赖于微软的Xbox Live API,那么为了这个库,您应该考虑将项目切换到Python

简而言之,要使用此API,您必须:

  • 登记

    • 如果您的应用程序可以绑定到要授权该应用程序的用户系统上的
      localhost:8080
      ,或者您得到了他们的合作(特别是:他们可以从浏览器中的URL将
      code
      参数粘贴到程序中),您可以跳过此步骤,使用
      client\u id=00000000 48093EE3
      ,并完全忽略
      client\u secret
      。(在这种情况下,您甚至不需要Azure帐户。)
  • 让任何**Xbox Live用户通过OAuth2向您的应用程序提供
    Xbox Live.signin
    Xbox Live.offline\u访问
    范围

  • 使用此授权和承载令牌从
    https://user.auth.xboxlive.com/user/authenticate

  • 使用该令牌向
    https://xsts.auth.xboxlive.com/xsts/authorize
    以获取

  • 使用该令牌向
    https://profile.xboxlive.com
    用于您感兴趣的实际端点,例如
    /users/gt({gamertag})/profile/settings
    (在属性
    “id”
    )中包含XUID,作为十进制字符串

  • (**显然,如果您访问的是特权端点,例如查看私人信息或修改用户帐户设置的端点,您将对需要谁的授权以及需要请求什么范围有额外的要求;但是,对于gamertag到XUID查找的一般情况,任何用户只要登录即可。)


    *对于这一点,应该是这样的:

    从异步IO导入以arun运行
    从系统导入argv
    从操作系统导入路径,环境
    导入子流程
    从aiohttp导入客户端会话
    从xbox.webapi.api.client导入XboxLiveClient
    从xbox.webapi.authentication.manager导入AuthenticationManager
    从xbox.webapi.authentication.models导入OAuth2TokenResponse
    异步定义gamertags_to_xuids(gamertags,client_id=environ[“client_id”],client_secret=environ[“client_secret”],token_jar=path.join(environ[“HOME”],“.local”,“share”,“xbox”,“tokens.json”):
    断言len(玩家代号)>=1
    全球会议
    auth\u mgr=AuthenticationManager(会话、客户端id、客户端密钥“”)
    等待更新令牌(授权管理器、令牌\u jar)
    xbl\u client=XboxLiveClient(身份验证管理器)
    ids=[]
    对于gamertag中的gamertag:
    profile=等待xbl_客户端。profile.通过游戏代号(游戏代号)获取游戏代号
    附加(int(profile.profile\u用户[0].id))
    xuids=[f“{id:016X}”表示id中的id]
    返回xuids
    异步def刷新令牌(身份验证管理器、令牌\u jar):
    将open(token_jar,“r+”)作为f:
    auth_mgr.oauth=OAuth2TokenResponse.parse_raw(f.read())
    等待授权管理器刷新令牌()
    f、 搜索(0)
    f、 截断()
    f、 写入(auth_mgr.oauth.json())
    异步def amain(参数):
    全球会议
    subprocess.run([“xbox authenticate”],check=True)#TODO:避免此系统调用
    与ClientSession()作为会话异步:
    将等待玩家标记返回到xuids(args)
    def main(args=argv[1:]):
    返回阿伦(阿明(阿格斯))
    如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
    对于main()中的xuid:
    打印(xuid)