python实现每月自动获取阿里云账单到易快报平台提报销

本文介绍在CentOS7环境下,使用Python3和相关库如何实现每月自动从阿里云获取账单,并将其导入易快报平台进行报销操作。主要涉及的库包括python-dateutil、阿里云SDK和psycopg2。
摘要由CSDN通过智能技术生成
# -*- coding: utf-8 -*-
# This file is auto-generated, don't edit it. Thanks.
import sys

from typing import List

from alibabacloud_bssopenapi20171214.client import Client as BssOpenApi20171214Client
from alibabacloud_tea_openapi import models as open_api_models
from alibabacloud_bssopenapi20171214 import models as bss_open_api_20171214_models
import dateutil.relativedelta
import datetime
import dateutil.relativedelta
import time
import json
import os
import calendar
import psycopg2
import sys
import urllib3
import subprocess


class Sample:
    def __init__(self):
        pass

    @staticmethod
    def create_client_bj(
        access_key_id: str,
        access_key_secret: str,
    ) -> BssOpenApi20171214Client:
        """
        使用AK&SK初始化账号Client
        @param access_key_id:
        @param access_key_secret:
        @return: Client
        @throws Exception
        """
        config = open_api_models.Config(
            # 您的AccessKey ID,
            access_key_id='XXXXXXXXXXXXXXXXX',
            # 您的AccessKey Secret,
            access_key_secret='XXXXXXXXXXXXXXXXXXXXX'
        )
        # 访问的域名
        config.endpoint = 'business.aliyuncs.com'
        return BssOpenApi20171214Client(config)

    @staticmethod
    def create_client_tj(
            access_key_id: str,
            access_key_secret: str,
    ) -> BssOpenApi20171214Client:
        """
        使用AK&SK初始化账号Client
        @param access_key_id:
        @param access_key_secret:
        @return: Client
        @throws Exception
        """
        config = open_api_models.Config(
            # 您的AccessKey ID,
            access_key_id='XXXXXXXXXXXXXXXXXXXXX',
            # 您的AccessKey Secret,
            access_key_secret='XXXXXXXXXXXXXXXXXXXXXXXXXX'
        )
        # 访问的域名
        config.endpoint = 'business.aliyuncs.com'
        return BssOpenApi20171214Client(config)

    @staticmethod
    def main(
        args: List[str],
    ) -> None:
        now = datetime.datetime.now()
        date = now + dateutil.relativedelta.relativedelta(months=-1)
        old_date = now + dateutil.relativedelta.relativedelta(months=-2)
        last_month = datetime.datetime.strftime(date, '%Y-%m')  # 上个月时间
        old_month = datetime.datetime.strftime(old_date, '%Y-%m')  # 上2个月时间
        last_month_sdate = datetime.datetime.strftime(date, '%Y-%m-%d')
        print('北京阿里云')
        client = Sample.create_client_bj('accessKeyId', 'accessKeySecret')
        query_monthly_bill_request = bss_open_api_20171214_models.QueryMonthlyBillRequest(
            billing_cycle=last_month
        )
        query_monthly_bill_request_old = bss_open_api_20171214_models.QueryMonthlyBillRequest(
            billing_cycle=old_month
        )
        # 复制代码运行请自行打印 API 的返回值
        res = client.query_monthly_bill(query_monthly_bill_request)
        last_money = res.body.data.new_invoice_amount
        old_res = client.query_monthly_bill(query_monthly_bill_request_old)
        old_money = old_res.body.data.new_invoice_amount
        growth_rate = round((last_money - old_money)/old_money,2)

        print(last_month + "月费用:" + str(last_money))

        return res.body.data.new_invoice_amount,last_month_sdate,last_month,growth_rate

        # 复制代码运行请自行打印 API 的返回值
        res = client.query_account_balance()
        print("账户余额:" + str(res.body.data.available_amount))


    @staticmethod
    async def main_async(
        args: List[str],
    ) -> None:
        client = Sample.create_client('accessKeyId', 'accessKeySecret')
        query_monthly_bill_request = bss_open_api_20171214_models.QueryMonthlyBillRequest(
            billing_cycle='2021-05'
        )
        # 复制代码运行请自行打印 API 的返回值
        await client.query_monthly_bill_async(query_monthly_bill_request)
        # 复制代码运行请自行打印 API 的返回值
        await client.query_account_balance_async()

def ekuaibao(url,name,var='id'):
    dev_null = open(os.devnull, 'w')
    print(url)
    response = subprocess.check_output(url, shell=True, stderr=dev_null).decode('utf-8').replace('\n', '')
    res = json.loads(response)
    # print(res)
    for i in res['items']:
      # print(i['name'])
      if i['name'] == name:
        return i[var]

def ali(total, sdate, last_month, growth_rate):
    datetime_now = datetime.datetime.strptime(sdate, '%Y-%m-%d').date()
    end = calendar.monthrange(datetime_now.year, datetime_now.month)[1]
    end_date = '%s-%s-%s' % (datetime_now.year, datetime_now.month, end)
    start_date = '%s-%s-01' % (datetime_now.year, datetime_now.month)
    title_date = datetime.datetime.strptime(start_date, '%Y-%m-%d').date().strftime(
        "%Y%m%d") + '-' + datetime.datetime.strptime(end_date, '%Y-%m-%d
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

太生气

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值