10

我一直在寻找如何从 Basecamp 获取文件,到目前为止,这似乎是一个“不可能完成的任务”,但我也想在这里问一下:

有没有办法从 Basecamp 项目中获取文件,如果有的话,怎么做?

提前致谢。

编辑:我的意思是如何获取上传的文件。您可以导出除已上传的文件之外的所有项目数据。

4

9 回答 9

12

您可以使用以下步骤从 Basecamp 导出所有内容。

  1. 使用 Chrome 登录。
  2. 从 Chrome 开发者工具中的页面文档请求中复制 Cookie 标头。
  3. wget --mirror -e robots=no --reject logout --no-cookies 'http://your-subdomain.basecamphq.com' --header <pasted-cookie-header>
于 2012-04-02T13:42:06.000 回答
9

马特麦克卢尔的回答很到位,但有几件事让我感到困惑;

  1. 要在开发人员工具中找到所需的 cookie Chrome,请单击Network顶部的图标,然后单击Headers选项卡。

  2. 从该部分复制整个 cookie 部分'request headers',包括'Cookie:'标签

  3. 用引号粘贴整个字符串,其中 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 字符串)

于 2012-05-29T11:32:50.630 回答
3

BaseCamp API 声称提供包括文件在内的完整访问权限。

如果您对 REST 有任何了解,您将能够手动提取任何/所有数据(模速率限制),然后用它做任何您喜欢的事情。

顺便说一句,如果您编写了一个工具,可以让我将项目从一个帐户转移到另一个帐户,我会为此付出高昂的代价!

于 2012-03-04T20:14:02.933 回答
2

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 
于 2013-08-16T04:14:27.633 回答
1

basecamp 让您可以以 XML、HTML 格式导出您的项目 - 还有一种以 PDF 格式获取它的方法。此信息可在 basecamp 的帮助/常见问题解答部分找到:http: //basecamphq.com/help/general#exporting_data

有关 PDF 导出的更多信息:http: //37signals.blogs.com/products/2008/02/export-a-baseca.html

于 2010-01-18T14:05:11.583 回答
1

将此工具用于Windows。

在试用模式下,此工具将允许从 base 下载三个项目,在您使用 basecamp 凭据登录后,将列出您基本帐户中的所有项目。

于 2012-04-05T18:15:28.377 回答
0
  1. 将您的 Basecamp Classic 项目导入新的 Basecamp
  2. 从新的 Basecamp 导出数据
  3. 等待
  4. 获取已完成的电子邮件并下载 zip 文件
于 2013-02-19T20:07:05.117 回答
0

您可以设置 Basecamp 和 Dropbox 之间的集成,以自动将所有 Basecamp 附件传输到专用的 Dropbox 文件夹:

http://blog.cloudwork.com/your-automatic-basecamp-dropbox-backup-step-by-step/

集成由 CloudWork 完成,它有一个免费计划,所以如果您认为自己每月备份的附件不会超过 100 个,它可以免费完成。除此之外,还有一个定价计划。

于 2013-04-18T16:18:36.443 回答
0

如果您的机器上安装了 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的修改脚本

于 2015-02-19T00:13:43.607 回答