Rest Basecamp API-检索时间

Rest Basecamp API-检索时间,rest,basecamp,Rest,Basecamp,我被要求查看一个报告的创建,该报告将为项目列表提取时间输入数据。给出项目名称/id,检索花费在该项目上的所有时间的总和,以及过去一周的小时数总和 但是我看不出在新的API中有什么东西可以给我时间条目,至少,检索过程不在Basecamp文档中 我一直在看这个页面,它描述了API: 到目前为止,我们所看到的是,没有一种简单的方法可以获得在任何项目上花费的实际时间。您可以做一些简单的事情,比如从项目创建到关闭/删除的时间 我们看到这样做的下注方式是查看每个待办事项列表,然后查看下面的待办事项。找出该项

我被要求查看一个报告的创建,该报告将为项目列表提取时间输入数据。给出项目名称/id,检索花费在该项目上的所有时间的总和,以及过去一周的小时数总和

但是我看不出在新的API中有什么东西可以给我时间条目,至少,检索过程不在Basecamp文档中

我一直在看这个页面,它描述了API:


到目前为止,我们所看到的是,没有一种简单的方法可以获得在任何项目上花费的实际时间。您可以做一些简单的事情,比如从项目创建到关闭/删除的时间

我们看到这样做的下注方式是查看每个待办事项列表,然后查看下面的待办事项。找出该项目每个待办事项列表下每个待办事项花费的累计时间,这将是该项目花费的实际时间(最接近的准确时间)

您可以使用API来获取这个todo级别的详细信息,这样就可以了


如果有人有更好的选择,也请告诉我们:)从今天起,我们正在做上述工作

事实证明,您可以从他们的旧API中获得它:

这将为您提供XML形式的时间条目,这是一个难题。它还对结果进行分页。在返回的标题中有两个字段,告诉您总共有多少条记录,以及有多少页:

var pageCount = headers["X-Pages"];
var recCount = headers["X-Records"];
您可以按如下方式处理返回的记录:

function processRecords(response)
{
    var respObj =
    {
        totalHours: 0,
        thisWeekHours: 0
    }

    var doc = null;

    if (response.getContentText) 
    {
       doc = Xml.parse(response.getContentText(), true);
    }
    else if (response.getElements) 
    {
       doc = response;
    }
    else 
    {
      var name = typeof response;
      if (response.constructor) name = response.constructor.name;
      throw new Exception("Incompatible type: " + name);
    }

    var root = doc.getElement();

    var records = root.getElements("time-entry");

    if (records.length > 0)
    {
        for (i = 0;i < records.length; i++)
        {
           var hours = Number(records[i].hours.getText());
           var recordDate = records[i].date.getText();
           if (recordDate >= previousSunday && recordDate <= previousSaturday)
           {
               respObj.thisWeekHours = respObj.thisWeekHours + hours; 
           }

           respObj.totalHours = respObj.totalHours + hours;
        }
     }

     return respObj;
}
函数处理记录(响应)
{
var respObj=
{
总小时数:0,
本周:0
}
var doc=null;
if(response.getContentText)
{
doc=Xml.parse(response.getContentText(),true);
}
else if(response.getElements)
{
doc=响应;
}
其他的
{
变量名称=响应类型;
if(response.constructor)name=response.constructor.name;
抛出新异常(“不兼容类型:“+name”);
}
var root=doc.getElement();
var记录=root.getElements(“时间输入”);
如果(记录长度>0)
{
对于(i=0;i如果(recordDate>=previousSunday&&recordDate)不知道你为什么会被记下来。哦,好吧。看看我上面的答案,有一种方法可以获取信息。