我一直在寻找如何从 Basecamp 获取文件,到目前为止,这似乎是一个“不可能完成的任务”,但我也想在这里问一下:
有没有办法从 Basecamp 项目中获取文件,如果有的话,怎么做?
提前致谢。
编辑:我的意思是如何获取上传的文件。您可以导出除已上传的文件之外的所有项目数据。
您可以使用以下步骤从 Basecamp 导出所有内容。
wget --mirror -e robots=no
--reject logout --no-cookies 'http://your-subdomain.basecamphq.com' --header <pasted-cookie-header>
马特麦克卢尔的回答很到位,但有几件事让我感到困惑;
要在开发人员工具中找到所需的 cookie Chrome
,请单击Network
顶部的图标,然后单击Headers
选项卡。
从该部分复制整个 cookie 部分'request headers'
,包括'Cookie:'
标签
用引号粘贴整个字符串,其中 matt 指示<pasted-cookie-header>
如下;
wget --mirror -e robots=no --reject logout --no-cookies 'http://your-subdomain.basecamphq.com' --header 'Cookie: session_token=c6a1ea88a0187b88025e; transition_token=BAhbB2kDA0VjSXU6CVRpbWUNqB...'
(为了清楚起见,我缩短了 cookie 字符串)
BaseCamp API 声称提供包括文件在内的完整访问权限。
如果您对 REST 有任何了解,您将能够手动提取任何/所有数据(模速率限制),然后用它做任何您喜欢的事情。
顺便说一句,如果您编写了一个工具,可以让我将项目从一个帐户转移到另一个帐户,我会为此付出高昂的代价!
Matt 和 Peter 都已经提出使用wget --mirror
它,我认为这是最简单的解决方案。但是,我无法从 Google Chrome 正确复制 cookie。
相反,我采取了稍微不同的方向,并使用Chrome cookie.txt 导出扩展将所有 cookie 作为纯文本复制到 cookies.txt 文件中。
我的 wget 命令看起来像这样:
wget --mirror -e robots=no --reject logout 'http://yourdomain.basecamphq.com' --load-cookies cookies.txt
Mac 用户的附加说明:wget
可以使用homebrew轻松安装:
brew install wget
basecamp 让您可以以 XML、HTML 格式导出您的项目 - 还有一种以 PDF 格式获取它的方法。此信息可在 basecamp 的帮助/常见问题解答部分找到:http: //basecamphq.com/help/general#exporting_data
有关 PDF 导出的更多信息:http: //37signals.blogs.com/products/2008/02/export-a-baseca.html
将此工具用于Windows。
在试用模式下,此工具将允许从 base 下载三个项目,在您使用 basecamp 凭据登录后,将列出您基本帐户中的所有项目。
您可以设置 Basecamp 和 Dropbox 之间的集成,以自动将所有 Basecamp 附件传输到专用的 Dropbox 文件夹:
http://blog.cloudwork.com/your-automatic-basecamp-dropbox-backup-step-by-step/
集成由 CloudWork 完成,它有一个免费计划,所以如果您认为自己每月备份的附件不会超过 100 个,它可以免费完成。除此之外,还有一个定价计划。
如果您的机器上安装了 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);
}
?>
然后使用正确的信息更新以下行:
$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]';
然后保存并执行此命令:php basecampfilevac.php
这是最初来自Rettger Galactic的修改脚本