Rat's

一个可以解决因api抽风出现空目录的OneDrive目录程序:OneList
说明:目前OneDrive目录程序已经很多了,比如:PyOne、OneIndex和OLAINDEX。这几个各有特色...
扫描右侧二维码阅读全文
05
2019/03

一个可以解决因api抽风出现空目录的OneDrive目录程序:OneList

说明:目前OneDrive目录程序已经很多了,比如:PyOneOneIndexOLAINDEX。这几个各有特色,都挺好用的,不过有时候api在高峰期抽风的时候,都很容易出现空目录的情况,导致下载会出现问题,这里萌咖sxyazi大佬就历时N天,写了个基于Python3的简约OneDrive目录列表,同时换了一种api来防止因使用人过多导致抽风等问题,稳定性大大的增加,而且使用Redis动态缓存策略,打开目录的速度是相当的快,不过该程序初衷只想安静的做个目录程序,所以是不会增加看视频的功能,如果你想看视频,那就选择开头的3个程序。

截图

请输入图片描述

安装

Github地址:https://github.com/0oVicero0/OneList/

说明:该程序不适用OneDrive个人版,且建议使用Debian系统安装,会很快。

1、安装依赖
CenOS 6系统:

#安装EPEL
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-6.noarch.rpm
#安装Python3和Redis
yum install python34 redis git -y
#安装pip3
wget https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py
#启动Redis
service redis start
#设置Redis开机自启
chkconfig redis on

CenOS 7系统:

#安装EPEL
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
#安装Python3和Redis
yum install python36 redis git -y
#配置Python3软链接
ln -s /usr/bin/python3.6 /usr/bin/python3
#安装pip3
wget https://bootstrap.pypa.io/get-pip.py
python3 get-pip.py
#启动Redis
systemctl start redis
#设置Redis开机自启
systemctl enable redis

Debian/Ubuntu系统:

#安装pip3和Redis
apt update
apt install python3-pip redis-server git -y

2、安装OneList

#拉取源码
git clone https://github.com/0oVicero0/OneList.git
#安装依赖
cd OneList && pip3 install -r requirements.txt

3、获取auth_token

提示:获取方式建议选择方法一。

方法一:直接访问地址→传送门,然后登录你的账号获取auth_token即可。

方法二:先使用浏览器访问该地址→传送门,登录你的OneDrive账号,复制地址栏code=&session之间的参数。

获取refresh_token,在SSH客户端使用命令:

#将下面auth_token替换成你获取到的参数,再使用命令
code="auth_token"
wget --no-check-certificate --post-data="client_id=ea2b36f6-b8ad-40be-bc0f-e5e4a4a7d4fa&client_secret=h27zG8pr8BNsLU0JbBh5AOznNS5Of5Y540l/koc7048=&grant_type=authorization_code&resource=https://api.office.com/discovery/&redirect_uri=http://localhost/onedrive-login&code=$code" 'https://login.microsoftonline.com/common/oauth2/token' -qO-

然后复制refresh_token参数后面的字段。

4、运行
接下来在OneList目录新建config.json配置文件。

nano config.json

将以下内容复制进去:

#将下面refresh_token替换成你获取到的字段
{
  "token": "<refresh_token>",
  "location_path": "/",
  "start_directory": "/",
  "threads": 3,
  "diff_seconds": 480,
  "refresh_seconds": 720,
  "metadata_cached_seconds": 768,
  "structure_cached_seconds": 840
}

再使用ctrl+xy保存退出。

开始运行:

gunicorn app:app -b 127.0.0.1:8888 -D

此时访问地址为127.0.0.1:8888,还需要使用域名反代才能访问,如果你要使用ip访问,将运行命令改成0.0.0.0:8888即可。

5、域名反代
安装Caddy

wget -N --no-check-certificate https://raw.githubusercontent.com/iiiiiii1/doubi/master/caddy_install.sh && chmod +x caddy_install.sh && bash caddy_install.sh
#备用地址
wget -N --no-check-certificate https://www.moerats.com/usr/shell/Caddy/caddy_install.sh && chmod +x caddy_install.sh && bash caddy_install.sh

配置Caddy

#以下全部内容是一个整体,请修改域名后一起复制到SSH运行!
echo "www.moerats.com {
 gzip
 tls admin@moerats.com
 proxy / 127.0.0.1:8888
}" > /usr/local/caddy/Caddyfile

该配置会自动签发SSL,请提前解析域名到VPS服务器。

启动Caddy

/etc/init.d/caddy start

就可以打开域名进行访问了。

最后如果你没有OneDrive大容量网盘可以申请1年开发者计划,申请地址→传送门

Vultr新用户注册送100美元/16个机房按小时计费,支持支付宝,【点击查看】。
最后修改:2019 年 06 月 17 日 04 : 07 PM

发表评论

84 条评论

  1. heihei

    caddy反代之后,访问域名返回502,咋整啊

    1. Rat's
      @heihei

      使用ip访问可以打开?

  2. 高玩梁

    想通过某些方式实现走服务器流量,或者是反代理xxx-my.sharepoint.com,大佬知道咋弄吗,下载就20k真的受不了

    1. Rat's
      @高玩梁

      这个倒没试过,你试试nginx反向代理

  3. cctv

    vps没有域名,第五步域名反代 要这么设置

    1. Rat's
      @cctv

      没域名就不用反代了,直接ip:端口访问

  4. zjboy

    第三步我获取到了auth_token,但怎样获取refresh_token,那里有点没看明白,谢谢

    1. Rat's
      @zjboy

      仔细看auth_token,你会看到refresh_token参数

  5. 维他柠檬茶

    大佬,有计划加入支持世纪互联的版本吗?

    1. Rat's
      @维他柠檬茶

      新版的可能会支持

  6. 寒夜方舟

    大佬,执行完:
    wget --no-check-certificate --post-data="client_id=ea2b36f6-b8ad-40be-bc0f-e5e4a4a7d4fa&client_secret=h27zG8pr8BNsLU0JbBh5AOznNS5Of5Y540l/koc7048=&grant_type=authorization_code&resource=https://api.office.com/discovery/&redirect_uri=http://localhost/onedrive-login&code=$code" 'https://login.microsoftonline.com/common/oauth2/token' -qO-
    后,没有显示任何东西,请问refresh_token后的参数是在哪看

    1. 寒夜方舟
      @寒夜方舟

      已解决,只有方法2才能获取refresh_token

  7. 自然

    好奇怪 wget不会返回refresh_token

    1. Rat's
      @自然

      有数据返回吗?

  8. aeg

    请问如何刷新缓存阿,删除文件后网站内容不更新。

    1. Rat's
      @aeg

      试试清空redis缓存

      1. aeg
        @Rat's

        好的 这个已经解决 但是还有个小问题
        我在rc.local文件中添加了两行
        cd /www/wwwroot/m/NeteaseCloudMusicApi && screen -dmS api node app.js
        cd /www/wwwroot/accpan/OneList && gunicorn app:app -b 127.0.0.1:8855 -D
        但是后一个重启服务器并没有执行,有没有啥办法

        1. Rat's
          @aeg

          给个更好的开机自启方案你,步骤如下:
          1、新建systemd配置文件,将以下代码一起复制到SSH运行
          cat > /etc/systemd/system/onelist.service <<EOF
          [Unit]
          Description=onelist
          After=network.target
          Wants=network.target

          [Service]
          Type=simple
          PIDFile=/var/run/onelist.pid
          ExecStart=$(command -v gunicorn) app:app -b 127.0.0.1:8855
          WorkingDirectory=/www/wwwroot/accpan/OneList
          Restart=on-failure

          [Install]
          WantedBy=multi-user.target
          EOF
          2、开始启动并设置开机自启
          systemctl start onelist
          systemctl enable onelist

          1. aeg
            @Rat's

            谢谢谢谢博主。

  9. YBurger

    这个程序可以设置仅显示指定目录吗?比如说只列出share文件夹下的文件

    1. Rat's
      @YBurger

      这个我没试过,你试试修改config.json配置文件里的路径参数。

  10. iyzyi

    大佬,我安装成功后,可以运行。
    在rc.local中添加了开机自启,但是失败。用 gunicorn app:app -b 127.0.0.1:10000
    测试了一下,报错ModuleNotFoundError: No module named 'app'。然后我手动重新pip3 install -r requirements.txt后,居然就可以访问了。但是再次重启后需要再次手动pip3 install -r requirements.txt,否则就一直是缺少'app'
    大佬你知道这是为什么吗?第一次见到重启服务器后,pip过的库居然还要再次pip。
    谢谢大佬

    1. Rat's
      @iyzyi

      有没有加一个cd 到程序目录的命令

      1. iyzyi
        @Rat's

        刚刚又试了一下,问题不在于开机自启。哪怕是不设置开机自启,重启服务器后手动开启服务,也不行。每次重启都必需安装依赖再开启服务。感觉好奇怪呀。环境CentOS7,宝塔。谢谢大佬

        1. iyzyi
          @iyzyi

          emmm,我现在每次开机都自动安装依赖,勉强达到了开机自启的目的。不用劳烦大佬分析原因了