Nếu bạn đã php cài đặt trên máy tính của bạn, tiết kiệm mã này để 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);
}
?>
sau đó cập nhật các dòng sau đây với các thông tin chính xác:
$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]';
sau đó lưu và thực hiện lệnh này: php basecampfilevac.php
Đây là một kịch bản biến đổi ban đầu từ Rettger Galactic
chưa
Không trả lời ??? – Sayuj
Cập nhật: Tôi đã liên hệ với dịch vụ khách hàng của BaseCamp và họ rất sẵn lòng nén tất cả các tệp và lưu vào dự án "Dịch vụ khách hàng" không được tính vào giới hạn bộ nhớ của tôi. Không phải là một giải pháp thanh lịch, nhưng nó hoạt động. Các kho lưu trữ được tổ chức bởi các thư mục, với mỗi dự án trong một thư mục riêng biệt. –
Tôi đã bỏ phiếu cho tất cả các câu trả lời có nhiều khả năng làm việc nhất hiện nay. Thật không may, tôi không có thời gian để kiểm tra từng người vì đã gần 3 năm kể từ khi tôi đăng câu hỏi và tôi không chịu trách nhiệm cho dự án đó nữa, nhưng dựa trên phiếu bầu của những người khác tôi cho là họ ổn. Tôi thích các wget + cookie thingie (đẹp nhất, thực sự), tuy nhiên tôi sẽ chấp nhận câu trả lời về API bởi vì nó phản ánh những gì là hợp lệ ngày hôm nay, mà không có khó chịu hacks/cách giải quyết. –