项目成员Basecamp(PHP)的回声化身

项目成员Basecamp(PHP)的回声化身,php,basecamp,Php,Basecamp,我正在开发一个Basecamp小部件,它必须显示关于我们目前正在进行的项目的重要信息。由于我找不到任何关于这件事的相关和详细的文件,我想向社区寻求帮助 我的处境 我目前已经在回显我的项目,此数据包含: 项目名称 描述 项目ID 对于我的待办事项,我回显以下数据: 剩余待办事项 完成待办事项 待办事项总数 百分比进展 我的目标 我想展示每个项目中所有工作人员的头像。由于这种编程对我来说是相当新的,我希望能在这方面得到一些指导。 由于Basecamp越来越受欢迎,我想更多的人可能会对这个信息

我正在开发一个Basecamp小部件,它必须显示关于我们目前正在进行的项目的重要信息。由于我找不到任何关于这件事的相关和详细的文件,我想向社区寻求帮助

我的处境

我目前已经在回显我的项目,此数据包含:

  • 项目名称
  • 描述
  • 项目ID
对于我的待办事项,我回显以下数据:

  • 剩余待办事项
  • 完成待办事项
  • 待办事项总数
  • 百分比进展
我的目标

我想展示每个项目中所有工作人员的头像。由于这种编程对我来说是相当新的,我希望能在这方面得到一些指导。 由于Basecamp越来越受欢迎,我想更多的人可能会对这个信息感兴趣。我参考了Basecamp的API,并编写了一小部分内容,试图回应项目成员的意见,但徒劳无功

我提前感谢你的帮助

干杯

J.I.N

(Post scriptum:这是我到目前为止拥有的完整源代码,一些值被故意更改以隐藏凭证等数据。很抱歉,这篇文章太长了,我尽量让它尽可能简短)

验证和检索项目数据

$appName = 'MyAppName';
$appContact = 'MyAddress';

$basecampAccountId = 'MyAccountID';
$basecampUsername = 'MyBaseCampUsername';
$basecampPassword = 'MyPassword';
$baseUrl = "https://basecamp.com/************/api/v1";

$url= $baseUrl.'/projects.json';
$credentials = "$basecampUsername:$basecampPassword";
$helloHeader = "User-Agent: $appName ($appContact)";

$ch = curl_init($url);
    curl_setopt($ch, CURLOPT_USERPWD, $credentials);
    curl_setopt($ch, CURLOPT_HEADER, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);     //optional
    curl_setopt($ch, CURLOPT_MAXREDIRS, 3);             //optional
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);     //optional
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);        //optional
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);       //optional
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);

    curl_setopt($ch, CURLOPT_HTTPGET, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array($helloHeader));

    $response = curl_exec($ch);
    $errno = curl_errno($ch);
    $error = curl_error($ch);
    curl_close($ch);
检索待办事项列表

$json = $response;
$data = json_decode($json);

/*echo "<br/><br/>";*/

foreach($data as $key)
{   
    echo "<ul>";
    echo "<li>".$key->name."</li>";
    echo "<li>".$key->id."</li>";
    echo "<li>".$key->description."</li>";

    $url= $baseUrl.'/projects/'.$key->id.'/todolists.json';
$ch = curl_init($url);
    curl_setopt($ch, CURLOPT_USERPWD, $credentials);
    // curl_setopt($ch, CURLOPT_HEADER, true);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);     //optional
    curl_setopt($ch, CURLOPT_MAXREDIRS, 3);             //optional
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);     //optional
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);        //optional
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 30);       //optional
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);

    curl_setopt($ch, CURLOPT_HTTPGET, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array($helloHeader));

    $response = curl_exec($ch);
    $errno = curl_errno($ch);
    $error = curl_error($ch);
    curl_close($ch);

    // print_r($response);

    $json = $response;
    $data = json_decode($json);

    $todo_remain = $data[0]->remaining_count;
    $todo_completed = $data[0]->completed_count;
    $todo_total = $todo_remain + $todo_completed;

    echo "<BR>";
    echo "<BR>";
    echo "Remaining To-Do Items:";
    echo "<BR>";
    echo $todo_remain;
    echo "<BR>";
    echo "Completed To-Do Items:";
    echo "<BR>";
    echo $todo_completed;
    echo "<BR>";
    echo "Total To-Do Items:";
    echo "<BR>";
    echo $todo_total;
    echo "<BR>";
    echo "Remaining percentage is: <BR>";
    echo round(($todo_remain/$todo_total)*100);
    echo "%";
    echo "<BR>";
    echo "Completed percentage is: <BR>";
    echo round(($todo_completed/$todo_total)*100);
    echo "%";


    echo "</ul>";
$json=$response;
$data=json_decode($json);
/*回声“

”*/ foreach($数据作为$key) { 回声“
    ”; 回声“
  • ”$key->name.“
  • ”; 回显“
  • ”$key->id.“
  • ”; 回声“
  • ”$key->description。”
  • ”; $url=$baseUrl./projects/.$key->id./todolists.json'; $ch=curl\u init($url); curl_setopt($ch,CURLOPT_USERPWD,$credentials); //curl_setopt($ch,CURLOPT_头,true); curl_setopt($ch,CURLOPT_RETURNTRANSFER,true); curl_setopt($ch,curloopt_FOLLOWLOCATION,true);//可选 curl_setopt($ch,CURLOPT_MAXREDIRS,3);//可选 curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,true);//可选 curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,2);//可选 curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,30);//可选 curl_setopt($ch,CURLOPT_超时,30); curl_setopt($ch,CURLOPT_HTTPGET,true); curl_setopt($ch,CURLOPT_HTTPHEADER,array($helloHeader)); $response=curl\u exec($ch); $errno=curl\u errno($ch); $error=curl\u error($ch); 卷曲关闭($ch); //打印(回复); $json=$response; $data=json_decode($json); $todo_剩余=$data[0]->剩余_计数; $todo_completed=$data[0]->已完成的_计数; $todo_总计=$todo_剩余+$todo_完成; 回声“
    ”; 回声“
    ”; 回显“剩余待办事项”:; 回声“
    ”; 回声$todo_剩余; 回声“
    ”; echo“完成待办事项:”; 回声“
    ”; echo$todo_已完成; 回声“
    ”; echo“待处理项目总数:”; 回声“
    ”; echo$todo_总计; 回声“
    ”; echo“剩余百分比为:
    ”; 回音轮($todo_剩余/$todo_总计)*100); 回声“%”; 回声“
    ”; echo“完成百分比为:
    ”; 回音轮($todo_已完成/todo_总计)*100); 回声“%”; 回声“
”;