File 从Basecamp导出文件
我已经四处寻找了很长一段时间如何从大本营获取文件,到目前为止,这似乎是一个“不可能完成的任务”,但我也想在这里问一下: 有没有办法从Basecamp项目中获取文件?如果有,如何获取 提前谢谢File 从Basecamp导出文件,file,export,basecamp,File,Export,Basecamp,我已经四处寻找了很长一段时间如何从大本营获取文件,到目前为止,这似乎是一个“不可能完成的任务”,但我也想在这里问一下: 有没有办法从Basecamp项目中获取文件?如果有,如何获取 提前谢谢 编辑:我的意思是如何获得上传的文件。您可以导出所有项目数据,但上载的文件除外basecamp为您提供了以XML、HTML格式导出项目的功能,而且还有一种以PDF格式获取项目数据的方法。此信息可在basecamp的帮助/常见问题部分找到: 关于PDF导出的更多信息:BaseCamp API声称提供包括文件在内
编辑:我的意思是如何获得上传的文件。您可以导出所有项目数据,但上载的文件除外basecamp为您提供了以XML、HTML格式导出项目的功能,而且还有一种以PDF格式获取项目数据的方法。此信息可在basecamp的帮助/常见问题部分找到:
关于PDF导出的更多信息:BaseCamp API声称提供包括文件在内的完整访问
- Basecamp API文档
- 包装器/库列表
顺便说一句,如果你写了一个工具,让我把一个项目从一个帐户转移到另一个帐户,我会为此付出很多钱 您可以使用以下步骤从Basecamp导出所有内容
wget--mirror-e robots=no
--拒绝注销--无Cookie'http://your-subdomain.basecamphq.com“--标题
在试用模式下,该工具将允许从base下载三个项目,在您使用basecamp凭据登录后,将列出base帐户上的所有项目。马特·麦克卢尔的答案是正确的,但有几件事阻碍了我
Chrome
Developer tools中找到所需的cookie,请单击顶部的Network
图标,然后单击Headers
选项卡'request headers'
部分复制整个cookie部分,包括'cookie:'
标签
处,如下所示
wget--mirror-e robots=no--reject logout--no cookies'http://your-subdomain.basecamphq.com“--header”Cookie:session_token=c6a1ea88a0187b88025e;转换令牌=BAhbB2kDA0VjSXU6CVRpbWUNqB…'
您可以设置Basecamp和Dropbox之间的集成,以自动将所有Basecamp附件转移到专用Dropbox文件夹中:
集成是由CloudWork完成的,CloudWork有一个免费的计划,因此如果您认为每月备份的附件不会超过100个,它可以免费完成。除此之外,还有一个定价计划。马特和彼得都已经提议使用
wget--mirror
,我认为这是最简单的解决方案。然而,我无法从谷歌浏览器上正确复制cookies
相反,我选择了一个稍微不同的方向,并使用将所有cookie作为纯文本复制到cookies.txt文件中
我的wget命令如下所示:
wget --mirror -e robots=no --reject logout 'http://yourdomain.basecamphq.com' --load-cookies cookies.txt
Mac用户的其他注意事项:wget
可通过以下设备轻松安装:
如果您的计算机上安装了php,请将此代码保存到basecampfilevac.php:
<?
// make sure the folder of the script is writeable (0777)
ini_set('memory_limit', '-1');//keeps the script from timing out
function BasecampCall($endPoint, $usePrefix = true) {
// From: http://prattski.com/2008/10/22/basecamp-api-examples-using-php-and-curl-get/
$session = curl_init();
$basecampId = '[Your Basecamp Account Id Here]'; //this should be a number like 9999999, You can find it in the URL when you log into Basecamp.
$username = '[Your Basecamp Username Here]';
$password = '[Your Basecamp Password Here]';
$emailaddress = '[Your Basecamp Email Address Here]';
$basecampUrl = 'https://basecamp.com/' . $basecampId . '/api/v1/';
curl_setopt($session, CURLOPT_URL, ($usePrefix == true ? $basecampUrl : "") . $endPoint);
curl_setopt($session, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($session, CURLOPT_HTTPGET, 1);
curl_setopt($session, CURLOPT_HEADER, false);
curl_setopt($session, CURLOPT_HTTPHEADER, array('Accept: application/json', 'Content-Type: application/json'));
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
curl_setopt($session, CURLOPT_USERAGENT, "MyApp (".$emailaddress.")");
curl_setopt($session,CURLOPT_USERPWD, $username . ":" . $password);
if(ereg("^(https)",$request)) curl_setopt($session,CURLOPT_SSL_VERIFYPEER,false);
$response = curl_exec($session);
curl_close($session);
if($usePrefix){
$r = json_decode($response);
} else {
$r = $response;
}
return $r;
}
$projects = BasecampCall('projects.json');
// For each project take name and id
foreach($projects as $proj) {
$pr = array(
"id" => (string)$proj->id,
"name" => (string)$proj->name
);
// Retrieve the attachments
echo "\nSaving attachments for project: " . $pr['name'] . "...\n";
@mkdir($pr['name']);
$filesArray = array();
$n = 1;
do {
$attachments = BasecampCall("projects/" . $proj->id . "/attachments.json?page=" . $n);
if(count($attachments) > 0) {
foreach($attachments as $attachment) {
$file = pathinfo($attachment->name);
@file_put_contents($pr['name'] . "/" . $file['filename'] . (in_array($file['filename'], $filesArray) ? "-" . rand() : "") . "." . $file['extension'], BasecampCall($attachment->{'url'}, false));
$filesArray[] = $file['filename'];
echo "Saving file " . $attachment->name . "...\n";
}
}
$n++;
} while(count($attachments) == 50);
}
?>
然后保存并执行以下命令:php basecampfilevac.php
这是一个修改后的脚本,最初来自我编辑了这个问题。我的意思是:如何获取你上传到Basecamp项目的文件。它们不是通过API提供的,或者我不知道可以这样做。仅供参考,链接到的PDF导出方法需要一个ColdFusion服务器(我没有意识到人们仍然使用CFM,但myeup)更新:我联系了BaseCamp客户服务,他们很高兴将所有文件压缩并加入“客户服务”不计入我的存储限制的项目。这不是一个优雅的解决方案,但它奏效了。档案是按文件夹组织的,每个项目都在一个单独的文件夹中。我对今天最有可能奏效的所有答案都投了赞成票。不幸的是,我没有时间检查每个问题,因为我发布这个问题已经快三年了,我不再负责这个项目了,但根据其他人的投票,我认为他们都很好。我喜欢wget+cookie thingie(不错,真的),但是我会接受关于API的答案,因为它反映了今天的有效性,没有令人讨厌的黑客/解决方法。根据他们的网站,该产品(降落伞)已经停产,无法再下载。3年前,它是不可能做到的,否则这个问题就不会发布在这里(这是最后的手段)。正如我在对问题本身的评论中所解释的,从今天起,我接受了你的回答,因为这是最方便的方式,也是“应该如何做”。不幸的是,将项目从一个帐户转移到另一个帐户并不是目标,这是情不自禁的:)我无法在我的cookie中识别session_token和transition_token,有什么想法吗?现在(2012年)Basecamp成为Basecamp经典,新Basecamp有所不同,这种方法仍然有效吗?如果没有子域,它能工作吗?
<?
// make sure the folder of the script is writeable (0777)
ini_set('memory_limit', '-1');//keeps the script from timing out
function BasecampCall($endPoint, $usePrefix = true) {
// From: http://prattski.com/2008/10/22/basecamp-api-examples-using-php-and-curl-get/
$session = curl_init();
$basecampId = '[Your Basecamp Account Id Here]'; //this should be a number like 9999999, You can find it in the URL when you log into Basecamp.
$username = '[Your Basecamp Username Here]';
$password = '[Your Basecamp Password Here]';
$emailaddress = '[Your Basecamp Email Address Here]';
$basecampUrl = 'https://basecamp.com/' . $basecampId . '/api/v1/';
curl_setopt($session, CURLOPT_URL, ($usePrefix == true ? $basecampUrl : "") . $endPoint);
curl_setopt($session, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($session, CURLOPT_HTTPGET, 1);
curl_setopt($session, CURLOPT_HEADER, false);
curl_setopt($session, CURLOPT_HTTPHEADER, array('Accept: application/json', 'Content-Type: application/json'));
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
curl_setopt($session, CURLOPT_USERAGENT, "MyApp (".$emailaddress.")");
curl_setopt($session,CURLOPT_USERPWD, $username . ":" . $password);
if(ereg("^(https)",$request)) curl_setopt($session,CURLOPT_SSL_VERIFYPEER,false);
$response = curl_exec($session);
curl_close($session);
if($usePrefix){
$r = json_decode($response);
} else {
$r = $response;
}
return $r;
}
$projects = BasecampCall('projects.json');
// For each project take name and id
foreach($projects as $proj) {
$pr = array(
"id" => (string)$proj->id,
"name" => (string)$proj->name
);
// Retrieve the attachments
echo "\nSaving attachments for project: " . $pr['name'] . "...\n";
@mkdir($pr['name']);
$filesArray = array();
$n = 1;
do {
$attachments = BasecampCall("projects/" . $proj->id . "/attachments.json?page=" . $n);
if(count($attachments) > 0) {
foreach($attachments as $attachment) {
$file = pathinfo($attachment->name);
@file_put_contents($pr['name'] . "/" . $file['filename'] . (in_array($file['filename'], $filesArray) ? "-" . rand() : "") . "." . $file['extension'], BasecampCall($attachment->{'url'}, false));
$filesArray[] = $file['filename'];
echo "Saving file " . $attachment->name . "...\n";
}
}
$n++;
} while(count($attachments) == 50);
}
?>
$basecampId = '[Your Basecamp Account Id Here]'; //this should be a number like 9999999, You can find it in the URL when you log into Basecamp.
$username = '[Your Basecamp Username Here]';
$password = '[Your Basecamp Password Here]';
$emailaddress = '[Your Basecamp Email Address Here]';