从Microsoft Live API获取JSON响应,而不是重定向用户的个人资料图片

时间:2015-02-09 15:52:03

标签: json rest live-connect-sdk

我正在针对Microsoft Live API发出以下请求:

GET https://apis.live.net/v5.0/me/picture?access_token=ACCESS_TOKEN

与该API的任何其他请求不同,结果是重定向到物理图像位置,这会导致返回实际的图像对象,而不是包含该图像路径的典型JSON响应。

我可以深入了解响应对象并尝试获取Content-Location标题或其他内容以获取我正在寻找的网址,但这种感觉非常脆弱并且与我的方式不同。 m处理所有其他API响应。

我也知道基于此行为的API网址本身可以充当图片网址,但是1)我使用的是在幕后构建该网址的客户端,2)我没有'我希望将访问令牌保留在类似于个人资料图片列的内容中。

Interactive Live SDK实际上显示了一个JSON对象作为REST请求的返回值:

{
    "location": "https://cid-0000000000000000.users.storage.live.com/users/0x0000000000000000/myprofile/expressionprofile/profilephoto:UserTileStatic"
}

这就是我想要的响应,并且由于交互式SDK可以显示它,因此必须有一些方法来请求返回JSON。我已经尝试在查询字符串中设置redirect=false(Facebook需要做类似的事情),并将Accept请求标头设置为application/json。没有任何影响。

2 个答案:

答案 0 :(得分:1)

这不是我的问题的真正答案,所以我仍然对我原始问题的任何回答感兴趣。但是,我找到了各种解决方法。

网址https://apis.live.net/v5.0/{user_id}/picture将返回相应的照片照片,而无需访问令牌。因此,您只需要构建此URL的用户ID即可,并且可以通过以下方式获取:

GET apis.live.net/v5.0/me?access_token=ACCESS_TOKEN

将返回类似于:

的内容
{
    "id": "0000000000000000",
    "name": "John Doe",
    "first_name": "John",
    "last_name": "Doe",
    "gender": null,
    "locale": "en_US"
}

那里的id成员是您需要的URL。这并不理想,因为我必须做两个步骤,并希望微软不会改变特定用户的个人资料图片的检索方式,或者突然开始需要一个访问令牌。不过,我想,它总比没有好。

答案 1 :(得分:1)

添加?suppress_redirects = true应该这样做。

即。 获取https://apis.live.net/v5.0/me/picture?access_token=ACCESS_TOKEN&suppress_redirects=true

我实际上还没有使用/ me / picture对此进行测试,但{user_id} / picture具有相同的行为,添加suppress_redirects = true就可以了。