阿里云函数计算开发学习二:python实现OneDrive直链


项目描述

基于阿里云函数计算,应用python、flask框架,实现OneDrive直链解析。

1.使用fun创建阿里云python函数计算;
2.基于阿里云函数官方模板创建函数;
3.函数本地编制、部署上传;
4.域名绑定。

使用fun创建阿里云python函数计算

新建aliyunserverless文件夹作为工程目录,命令行中切换到aliyunserverless,使用fun创建函数,选择http-trigger-python3

cd aliyunserverless
fun init -n odrvdirecttest


创建完成:

基于阿里云函数官方模板创建函数

此步之前已创建服务。

  1. 通过阿里云flask-web模板新建函数

  2. 配置函数名

  3. 调整配置,运行环境调整为python3

  4. 导出函数和配置

函数本地编制

  1. 解压导出的函数和配置
    (1) 修改template.yml配置文件,并替换到\aliyunserverless\odrvdirecttest路径;
  • Runtime: python2.7调整为Runtime: python3.0
  • CodeUri: ./odrvdirect2/odrvdirecttest调整为CodeUri: ./
    (2) 将odrvdirect\odrvdirecttest中的所有文件移到\aliyunserverless\odrvdirecttest路径。
  1. 函数编制

    整合GitHub OneDrive-Direct-Link代码与上一步解压得到的代码。

(1) 打开命令行,切换到\aliyunserverless\odrvdirecttest路径;
(2) conda新建python虚拟运行环境,并激活进入;

conda create -n aliyunpy391 python=3.9.1
activate aliyunpy391

(3) 安装python依赖
根据requirements.txt,分别安装依赖到odrvdirecttest路径根目录。

pip install -t . requests
pip install -t . flask
pip install -t . cachetools

使用pip install -t . 指令安装的依赖貌似没有安装到aliyunpy391虚拟环境。

(aliyunpy391) C:\ >pip list
Package      Version
------------ -------------------
certifi      2020.12.5
pip          20.3.3
setuptools   51.0.0.post20201207
wheel        0.36.2
wincertstore 0.2

(4) 整合代码
根据将app.py中的代码整合到\aliyunserverless\odrvdirecttest\main.py。

# coding=utf-8
import requests
from flask import Flask, request, Response
from cachetools.func import ttl_cache
from flask import make_response

try:
  from urllib.parse import urlparse
except:
  from urlparse import urlparse

app = Flask(__name__)

base_path = ''

@ttl_cache(1024, ttl=600)
def get_direct_url(ch, share_token):
    url_step1 = 'https://1drv.ms/{ch}/s!{share_token}'.format(
        ch=ch,  # the ch could be w u t or more
        share_token=share_token
    )
    resp_step1 = requests.get(url_step1, timeout=10, allow_redirects=False)
    url_step2 = resp_step1.headers['Location']
    url_step3 = url_step2.replace('/redir?', '/download?')
    resp_step3 = requests.get(url_step3, timeout=10, allow_redirects=False)
    url_final = resp_step3.headers['Location']

    return url_final


@app.route('/<ch>/s!<share_token>')
def share_ts(ch, share_token):
    url_direct = get_direct_url(ch, share_token)

    if 'txt' in request.args:
        # display plain text
        return url_direct
    else:
        # 301 redirect
        return Response('',
                        status=301,
                        headers={'Location': url_direct},
                        content_type='text/plain'
                        )


@app.route('/')
def index():
    return   """<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>OneDrive直链提取使用说明</title>
<meta name="keywords" content="OneDrive,direct,download,link,OneDrive direct download,直链"/>
<meta name="description" content="通过地址转换获取OneDrive直链"/>
</head>
<body>
<h1>OneDrive直链提取使用说明</h1>
<p>通过将 OneDrive分享地址中"https://1drv.ms/"调整为"http://1drv.stdfirm.com",实现直链快捷获取</p>
<h2>使用方法</h2>
1. 获取OneDrive分享链接: <a href='https://1drv.ms/u/s!Aiw77soXua44hb4CEu6eSveUl0xUoA'>https://1drv.ms/u/s!Aiw77soXua44hb4CEu6eSveUl0xUoA</a><br>
2. 获取直链:将<b>"https://1drv.ms/"</b> 调整为 <b>"http://1drv.stdfirm.com"</b>, <br>成为 <a href='http://1drv.stdfirm.com/u/s!Aiw77soXua44hb4CEu6eSveUl0xUoA'>http://1drv.stdfirm.com/u/s!Aiw77soXua44hb4CEu6eSveUl0xUoA</a><br>

<h2>使用注意</h2>
"http://1drv.stdfirm.com"基于OneDrive,为<a href='http://stdfirm.com'>小酌笔墨</a>提供图床和小文件下载使用,感谢关注!

<hr>
<p>主站: <a href='http://stdfirm.com'>小酌笔墨</a></p>
<p>感谢: <a href='https://github.com/aploium/OneDrive-Direct-Link'>GitHub OneDrive-Direct-Link</a></p>
</body>
</html>
"""

def handler(environ, start_response):
    parsed_tuple = urlparse(environ['fc.request_uri'])
    li = parsed_tuple.path.split('/')
    global base_path
    if not base_path:
        base_path = "/".join(li[0:5])
    return app(environ, start_response)

(4) 上传部署

fun deploy

绑定域名

注意:域名需要已经备案。

使用

将 OneDrive分享地址中https://1drv.ms/调整为http://1drv.stdfirm.com,实现直链获取。

使用方法

  1. 获取OneDrive分享链接,例如: https://1drv.ms/u/s!Aiw77soXua44hb4CEu6eSveUl0xUoA
  2. 获取直链:将https://1drv.ms/ 调整为http://1drv.stdfirm.com,
    成为 http://1drv.stdfirm.com/u/s!Aiw77soXua44hb4CEu6eSveUl0xUoA

文章作者: 小酌笔墨
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 小酌笔墨 !
  目录