Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 从Basecamp导出文件_File_Export_Basecamp - Fatal编程技术网

File 从Basecamp导出文件

File 从Basecamp导出文件,file,export,basecamp,File,Export,Basecamp,我已经四处寻找了很长一段时间如何从大本营获取文件,到目前为止,这似乎是一个“不可能完成的任务”,但我也想在这里问一下: 有没有办法从Basecamp项目中获取文件?如果有,如何获取 提前谢谢 编辑:我的意思是如何获得上传的文件。您可以导出所有项目数据,但上载的文件除外basecamp为您提供了以XML、HTML格式导出项目的功能,而且还有一种以PDF格式获取项目数据的方法。此信息可在basecamp的帮助/常见问题部分找到: 关于PDF导出的更多信息:BaseCamp API声称提供包括文件在内

我已经四处寻找了很长一段时间如何从大本营获取文件,到目前为止,这似乎是一个“不可能完成的任务”,但我也想在这里问一下:

有没有办法从Basecamp项目中获取文件?如果有,如何获取

提前谢谢


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

basecamp为您提供了以XML、HTML格式导出项目的功能,而且还有一种以PDF格式获取项目数据的方法。此信息可在basecamp的帮助/常见问题部分找到:


关于PDF导出的更多信息:

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

  • Basecamp API文档
  • 包装器/库列表
如果您对REST有任何了解,您将能够手动拉出任何/所有数据(模速率限制),然后使用它做任何您喜欢的事情


顺便说一句,如果你写了一个工具,让我把一个项目从一个帐户转移到另一个帐户,我会为此付出很多钱

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

  • 使用Chrome登录
  • 从页面文档复制Cookie标头 Chrome开发者工具中的请求
  • wget--mirror-e robots=no
    --拒绝注销--无Cookie'http://your-subdomain.basecamphq.com“--标题
  • 用于Windows


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

    马特·麦克卢尔的答案是正确的,但有几件事阻碍了我

  • 要在
    Chrome
    Developer tools中找到所需的cookie,请单击顶部的
    Network
    图标,然后单击
    Headers
    选项卡

  • 'request headers'
    部分复制整个cookie部分,包括
    'cookie:'
    标签

  • 用引号将整个字符串粘贴到matt指示的
    处,如下所示

    wget--mirror-e robots=no--reject logout--no cookies'http://your-subdomain.basecamphq.com“--header”Cookie:session_token=c6a1ea88a0187b88025e;转换令牌=BAhbB2kDA0VjSXU6CVRpbWUNqB…'

  • (为了清晰起见,我缩短了cookie字符串)

  • 将Basecamp经典项目导入新Basecamp
  • 从新基地导出数据
  • 等等
  • 获取完成的电子邮件并下载zip文件

  • 您可以设置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]';