搬瓦工高级教程:使用Python调用KiwiVM面板API

今天介绍一下搬瓦工如何调用KiwiVM面板的API,实现自己的瓦工控制器。之前的文章介绍了iOS和安卓上现成的APP,有兴趣的可以看看。有能力的,建议自己撸一个玩玩。这几天论文截稿(现在论文已经截稿提交了,从草稿箱里把这篇文章拉了出来),忙里偷闲,写点代码压压惊。这篇文章主要以Python为主,介绍一下如何调用搬瓦工的API。

对了,今天晚上把网站搬到了搬瓦工香港的VPS上,访问速度是不是有所改善?

相关教程:搬瓦工 API 教程:获取 API KEY/调用 API 方法/PHP 示例代码》。

相关文章

获取API KEY

登录KiwiVM面板后,点击左侧菜单 API,然后可以看到下图。点击 Show API Key,显示你的API KEY,然后再记录下 VEID。

Python示例

其实这些Python代码都很简单。就是调用一下了上面的API。官方给出的示例是PHP的(世界上最好的语言)。

当然,也有一些通过wget操作的,比如通过wget重启:

wget -qO- "https://api.64clouds.com/v1/restart?veid=706783&api_key=YOUR_API_KEY_HERE"

有了这些API有什么用呢?最简单的一个例子,如果你想每天定时给搬瓦工开关机,那么你就可以通过这些API来实现。比如你在另外一台VPS上写个脚本,每天定时把你的搬瓦工开机,每天定时再把它关机,是不是很有意思?(真的吗?)

或者你再有时间,可以自己搞个带GUI的Python的客户端。

代码在下面。稍后更新Github地址。

#/usr/bin/env python
# -*- coding: utf-8 -*-

import requests
import json
from utils import *
from apis import *

class Bandwagonhost(object):

    def __init__(self, veid, api_key):
        self.veid = veid
        self.api_key = api_key

    def start_vps(self):
        r = requests.get('https://api.64clouds.com/v1/start?veid=' + self.veid + '&api_key=' + self.api_key)
        print json.dumps(r.json(), indent=1)

    def stop_vps(self):
        r = requests.get('https://api.64clouds.com/v1/stop?veid=' + self.veid + '&api_key=' + self.api_key)
        print json.dumps(r.json(), indent=1)

    def restart_vps(self):
        r = requests.get('https://api.64clouds.com/v1/restart?veid=' + self.veid + '&api_key=' + self.api_key)
        print json.dumps(r.json(), indent=1)

    def kill_vps(self):
        r = requests.get('https://api.64clouds.com/v1/kill?veid=' + self.veid + '&api_key=' + self.api_key)
        print json.dumps(r.json(), indent=1)

    def get_server_info(self):
        r = requests.get('https://api.64clouds.com/v1/getServiceInfo?veid=' + self.veid + '&api_key=' + self.api_key)
        print json.dumps(r.json(), indent=1)
        return json.dumps(r.json(), indent=1)

    def get_live_service_info(self):
        r = requests.get('https://api.64clouds.com/v1/getLiveServiceInfo?veid=' + self.veid + '&api_key=' + self.api_key)
        print json.dumps(r.json(), indent=1)

    def get_available_os(self):
        r = requests.get('https://api.64clouds.com/v1/getAvailableOS?veid=' + self.veid + '&api_key=' + self.api_key)
        print json.dumps(r.json(), indent=1)

    def reinstall_os(self, os):
        r = requests.get(
            'https://api.64clouds.com/v1/reinstallOS?os=' + os + '&veid=' + self.veid + '&api_key=' + self.api_key)
        print json.dumps(r.json(), indent=1)

    def reset_root_password(self):
        r = requests.get('https://api.64clouds.com/v1/resetRootPassword?veid=' + self.veid + '&api_key=' + self.api_key)
        print json.dumps(r.json(), indent=1)

    # TODO draw a fig instead
    def get_raw_usage_stats(self):
        r = requests.get('https://api.64clouds.com/v1/getRawUsageStats?veid=' + self.veid + '&api_key=' + self.api_key)
        print json.dumps(r.json(), indent=1)

    def set_hostname(self, newHostname):
        server = self.get_server_info()
        if server.json()['vm_type'] != 'ovz':
            print 'only for ovz servers'
            return False
        else:
            r = requests.get(
                'https://api.64clouds.com/v1/setHostname?newHostname=' + newHostname
                + '&veid=' + self.veid + '&api_key=' + self.api_key)
            print json.dumps(r.json(), indent=1)

    def set_ptr_record(self, ip, ptr):
        r = requests.get(
            'https://api.64clouds.com/v1/setPTR?ip=' + ip + '&ptr=' + ptr + '&veid='
            + self.veid + '&api_key=' + self.api_key)
        print json.dumps(r.json(), indent=1)

    # no need
    def basic_shell_cd(self):
        pass

    def basic_shell_exec(self):
        pass

    def shell_script_exec(self):
        pass

    def snapshot_create(self, description='Automatic_Snapshot'):
        r = requests.get(
            'https://api.64clouds.com/v1/snapshot/create?description=' + description + '&veid='
            + self.veid + '&api_key=' + self.api_key)
        print json.dumps(r.json(), indent=1)

    def snapshot_list(self):
        r = requests.get(
            'https://api.64clouds.com/v1/snapshot/list?veid=' + self.veid + '&api_key=' + self.api_key)
        print json.dumps(r.json(), indent=1)

    def snapshot_delete(self, snapshot):
        r = requests.get(
            'https://api.64clouds.com/v1/snapshot/delete?snapshot=' + snapshot
            + '&veid=' + self.veid + '&api_key=' + self.api_key)
        print json.dumps(r.json(), indent=1)

    def snapshot_restore(self, snapshot):
        r = requests.get(
            'https://api.64clouds.com/v1/snapshot/restore?snapshot=' + snapshot
            + '&veid=' + self.veid + '&api_key=' + self.api_key)
        print json.dumps(r.json(), indent=1)

    def snapshot_toggle_sticky(self, snapshot, sticky):
        r = requests.get(
            'https://api.64clouds.com/v1/snapshot/toggleSticky?snapshot=' + snapshot
            + '&sticky=' + sticky + '&veid=' + self.veid + '&api_key=' + self.api_key)
        print json.dumps(r.json(), indent=1)

    def snapshot_export(self, snapshot):
        r = requests.get(
            'https://api.64clouds.com/v1/snapshot/export?snapshot=' + snapshot
            + '&veid=' + self.veid + '&api_key=' + self.api_key)
        print json.dumps(r.json(), indent=1)

    def snapshot_import(self, source_veid, source_token):
        r = requests.get(
            'https://api.64clouds.com/v1/snapshot/import?sourceVeid=' + source_veid + '&sourceToken=' + source_token
            + '&veid=' + self.veid + '&api_key=' + self.api_key)
        print json.dumps(r.json(), indent=1)

    # TODO need test if the ip is ipv4 or ipv6
    def ipv6_add(self, ip):
        r = requests.get(
            'https://api.64clouds.com/v1/ipv6/add?ip=' + ip + '&veid=' + self.veid + '&api_key=' + self.api_key)
        print json.dumps(r.json(), indent=1)

    def ipv6_delete(self, ip):
        r = requests.get(
            'https://api.64clouds.com/v1/ipv6/delete?ip=' + ip + '&veid=' + self.veid + '&api_key=' + self.api_key)
        print json.dumps(r.json(), indent=1)

    def migrate_get_locations(self):
        r = requests.get(
            'https://api.64clouds.com/v1/migrate/getLocations?veid=' + self.veid + '&api_key=' + self.api_key)
        print json.dumps(r.json(), indent=1)

    def migrate_start(self, location):
        r = requests.get(
            'https://api.64clouds.com/v1/migrate/start?location=' + location
            + '&veid=' + self.veid + '&api_key=' + self.api_key)
        print json.dumps(r.json(), indent=1)

    def clone_from_external_server(self, external_server_ip, external_server_ssh_port, external_server_root_password):
        server = self.get_server_info()
        if server.json()['vm_type'] != 'ovz':
            print 'only for ovz servers'
            return False
        else:
            r = requests.get(
                'https://api.64clouds.com/v1/cloneFromExternalServer?externalServerIP=' + external_server_ip
                + '&externalServerSSHport=' + external_server_ssh_port + '&externalServerRootPassword'
                + external_server_root_password + '&veid=' + self.veid + '&api_key=' + self.api_key)
            print json.dumps(r.json(), indent=1)

    def get_suspension_details(self):
        r = requests.get(
            'https://api.64clouds.com/v1/getSuspensionDetail?&veid=' + self.veid + '&api_key=' + self.api_key)
        print json.dumps(r.json(), indent=1)

    def unsuspend(self, record_id):
        r = requests.get(
            'https://api.64clouds.com/v1/unsuspend?record_id=' + record_id
            + '&veid=' + self.veid + '&api_key=' + self.api_key)
        print json.dumps(r.json(), indent=1)

    def get_rate_limit_status(self):
        r = requests.get(
            'https://api.64clouds.com/v1/getRateLimitStatus?veid=' + self.veid + '&api_key=' + self.api_key)
        print json.dumps(r.json(), indent=1)

if __name__ == '__main__':
    # do some test
    bwh = Bandwagonhost(VEID_BWH,API_KEY_BWH)
    bwh_info = bwh.get_server_info()
    # bwh.create_snapshot()
    # bwh.get_raw_usage_stats()
    for keys in json.loads(bwh_info).keys():
       print json.loads(bwh_info)[keys]

搬瓦工新手优惠

搬瓦工推荐方案

搬瓦工实时库存:https://stock.bwg.net

温馨提醒 如果您有选择困难症,直接选中间的 CN2 GIA-E方案,季付 $49.99,多达 12 个机房任意切换
方案内存CPU硬盘流量/月带宽推荐机房价格购买
KVM
(最便宜)
1GB2核20GB1TB1GbpsDC3 CN2
DC8 ZNET
(购买后在后台迁移)
$49.99/年购买
KVM2GB3核40GB2TB1Gbps$52.99/半年
$99.99/年
购买
CN2 GIA-E
(最推荐)
1GB2核20GB1TB2.5Gbps美国 DC6 CN2 GIA-E
美国 DC9 CN2 GIA
日本软银 JPOS_1
荷兰 EUNL_9
美国圣何塞 CN2 GIA
加拿大 CN2 GIA
$49.99/季度
$169.99/年
购买
CN2 GIA-E2GB3核40GB2TB2.5Gbps$89.99/季度
$299.99/年
购买
HK
(高端首选)
2GB2核40GB0.5TB1Gbps中国香港 CN2 GIA
日本东京 CN2 GIA
日本大阪 CN2 GIA
新加坡 CN2 GIA
$89.99/月
$899.99/年
购买
HK4GB4核80GB1TB1Gbps$155.99/月
$1559.99/年
购买
OSAKA2GB2核40GB0.5TB1.5Gbps日本大阪 CN2 GIA$49.99/月
$499.99/年
购买
OSAKA4GB4核80GB1TB1.5Gbps$86.99/月
$869.99/年
购买
搬瓦工优惠码:BWHCGLUKKB搬瓦工购买教程:《2024 年最新搬瓦工购买教程和支付宝支付教程

选择建议:

  • 入门:洛杉矶 CN2 套餐,目前最便宜,可选 CN2 GT 机房,入门之选。
  • 推荐:洛杉矶 CN2 GIA-E 套餐,速度超快,可选机房多(DC6、DC9、日本软银、荷兰联通等),性价比最高。
  • 高端:香港 CN2 GIA 套餐,价格较高,但是无可挑剔。

搬瓦工新手教程

  1. 搬瓦工新手入门:《搬瓦工新手入门完全指南:方案推荐、机房选择、优惠码和购买教程(推荐阅读)
  2. 搬瓦工购买教程:《2021 年最新搬瓦工购买教程和支付宝支付教程
  3. 搬瓦工优惠码:BWHCGLUKKB
  4. 搬瓦工补货通知:《欢迎订阅搬瓦工补货通知(补货提醒)/ 加入搬瓦工交流群
  5. 搬瓦工方案推荐:《搬瓦工高性价比 VPS 推荐:目前哪款方案最值得买?

未经允许不得转载:Bandwagonhost中文网 » 搬瓦工高级教程:使用Python调用KiwiVM面板API