AppServer/

基于 Seafile API 的二次开发

发布
更新
字数
440
阅读
1 分钟

使用 Seafile 也很久了,在上面保存了很多的数据。某天需要对 Seafile 进行一些简单的二次开发。在 Seafile 官网查了下,确实有接口开放。而且也有示例代码和封装好的 Python 和 PHP 的 API 。由于项目的特殊性,我决定直接调用 Seafile 的 Web API 做一些简单的二次开发的工作。
如,我们想要列出某个 Seafile 用户下共享出来的文件和文件夹。步骤如下:

首先是获取 Seafile 的 token 。在官方的示例中,获取方式是:

bash
curl -d "username=username@example.com&password=123456" https://cloud.seafile.com/api2/auth-token/

那么在 PHP 中,我们只需要模拟这个操作就可以了:

php
$stringSeafileUserName = 'username@example.com';
$stringSeafilePassword = 'yourpassword';
// getHttpContent 是一个自定义函数
$jsonSeafileToken = getHttpContent('http://seafile.mydomain.com/api2/auth-token/', 'POST', array('username' => $stringSeafileUserName,'password' => $stringSeafilePassword));
$arraySeafileToken = json_decode($jsonSeafileToken, true);
// 得到 token
$stringSeafileToken = $arraySeafileToken['token'];

// 利用获取到的 token 通过 web api 获取列表
$uri = 'http://seafile.mydomain.com/api2/shared-links/';
$ch = curl_init($uri);
curl_setopt_array($ch, array(
    CURLOPT_HTTPHEADER  => array('Authorization: Token ' . $stringSeafileToken),
    CURLOPT_RETURNTRANSFER  =>true,
    CURLOPT_VERBOSE     => 1
));
$out = curl_exec($ch);
curl_close($ch);

$arraySeafileSharedInfo = json_decode($out, true);
echo '<pre>';
// 列出所有的共享文件和文件夹
print_r($arraySeafileSharedInfo);

/*****************************
* @param        $url
* @param string $method
* @param json  $postData
* @return mixed|null|string
*****************************/
function getHttpContent($url, $method = 'GET', $postData = array())
{
    $data = '';

    if (!empty($url)) {
        try {
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_HEADER, false);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
            curl_setopt($ch, CURLOPT_TIMEOUT, 30); //30秒超时
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
            //curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie_jar);
            if (strtoupper($method) == 'POST') {
                if (is_array($postData)){
                    $curlPost = http_build_query($postData);
                }else{
                    $curlPost = $postData;
                    curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
                }
                $curlPost = is_array($postData) ? http_build_query($postData) : $postData;
                curl_setopt($ch, CURLOPT_POST, 1);
                curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
            }
            $data = curl_exec($ch);
            curl_close($ch);
        } catch (Exception $e) {
            $data = null;
        }
    }

    return $data;
}

这个只是简单的一个应用,想要从 Seafile 中获取更多数据和更多功能,可以查阅在线手册: https://manual.seafile.com/develop/web_api_v2.1.html

评论

正在载入评论…

留下评论

人机验证
四位数字,看不清可点击图片刷新

评论经审核后显示。

回到顶部 ↑