在TFS中,如何访问ReportServer URL以获取每日scrum burndown图表的jpeg?

时间:2011-06-27 11:28:16

标签: tfs

我想访问TFS服务器,并定期下载动态生成的“Scrum Burndown图表”,以便在单独的报告中重复使用它(即pdf) 是的,有很多报道都在进行......

如何在要下载的服务器中找到正确的URL,以及如何解决权限问题?

1 个答案:

答案 0 :(得分:2)

这是我自己回答的一个问题。

流程摘要

  • 使用HTTP代理嗅探器来确定URL的格式 - 请参阅下面的
  • 使用py-ntlm,连接到TFS服务器,使用已知格式的URL来获取“完整”报告页面,
  • 解析报告页面以获取图片网址,再次通过py-ntlm下载并存储。

没有直接的网址,即我不能要求reportserver / myteam / burndownchart / 20110815(很好,很安静)但是有一个param样式请求 包装“报告”到我想要的图像。遗憾的是,没有简单的方法可以在VS2010扩展中找到它 - 我使用Charles调试器代理来查看VS2010正在发送的内容。

您需要直接访问您的团队报告的网址类似于       http://tfs.example.com/reportserver?/TfsReports/ExampleCompany/ExampleProject/Sprint+Burndown+Chart&rc:toolbar=false&pReleaseWorkStreamPath= \ Release01 \&安培; pSprintTeam = \ Release02 \ Sprint01 \ Team01

有一些基于会话的混淆与实际图像URL一起进行,这意味着我必须调用然后解析报告页面,找到图像的URL,然后下载它。最重要的是,我需要让Python使用Windows身份验证,并且通常摆弄很多东西

下面的进程是合理的,但代码很脆弱,我只是推荐它作为起点

标识报告的URL

安装py-ntlm(http://code.google.com/p/python-ntlm/)

(a)你需要每次创建一个用户传递哈希值和请求的URL(这通常是浏览器不可见) (b)然后将它作为urllib2处理程序传递给urllib2 (c)像往常一样通过urllib2处理网址

import urllib2
from ntlm import HTTPNtlmAuthHandler
#
passman = urllib2.HTTPPasswordMgrWithDefaultRealm()
passman.add_password(None, url, user, password) ## (a) 
auth_NTLM = HTTPNtlmAuthHandler.HTTPNtlmAuthHandler(passman)  #(b)
opener = urllib2.build_opener(auth_NTLM)

urllib2.install_opener(opener)  # (c)
response = urllib2.urlopen(url_moi)
html = response.read()

这样就可以获得标准报告网页,其中包含图片。我现在需要提取该图像URL,我使用正则表达式获取 所有IMG标签,并采取列表中的第二个。专业而且根本不脆: - )

然后我们重建了nltm哈希(我已经下载了HTML报告页面,现在我想要其中的JPG图像), 调用上面的URL并将输出写入本地磁盘。

我希望有所帮助。

YMMV