今天介绍一下搬瓦工如何调用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
| 方案 | 内存 | CPU | 硬盘 | 流量/月 | 带宽 | 推荐机房 | 价格 | 购买 |
|---|---|---|---|---|---|---|---|---|
| KVM (最便宜) | 1GB | 2核 | 20GB | 1TB | 1Gbps | DC2 AO DC8 ZNET | $49.99/年 | 购买 |
| KVM | 2GB | 3核 | 40GB | 2TB | 1Gbps | $52.99/半年 $99.99/年 | 购买 | |
| CN2 GIA-E (最推荐) | 1GB | 2核 | 20GB | 1TB | 2.5Gbps | 美国 DC6 CN2 GIA-E 美国 DC9 CN2 GIA 日本软银 JPOS_1 荷兰 EUNL_9 美国圣何塞 CN2 GIA 加拿大 CN2 GIA | $49.99/季度 $169.99/年 | 购买 |
| CN2 GIA-E | 2GB | 3核 | 40GB | 2TB | 2.5Gbps | $89.99/季度 $299.99/年 | 购买 | |
| HK (高端首选) | 2GB | 2核 | 40GB | 0.5TB | 1Gbps | 中国香港 CN2 GIA 日本东京 CN2 GIA 日本大阪 CN2 GIA 新加坡 CN2 GIA | $89.99/月 $899.99/年 | 购买 |
| HK | 4GB | 4核 | 80GB | 1TB | 1Gbps | $155.99/月 $1559.99/年 | 购买 | |
| OSAKA | 2GB | 2核 | 40GB | 0.5TB | 1.5Gbps | 日本大阪 CN2 GIA | $49.99/月 $499.99/年 | 购买 |
| OSAKA | 4GB | 4核 | 80GB | 1TB | 1.5Gbps | $86.99/月 $869.99/年 | 购买 | |
| 搬瓦工优惠码:BWHCGLUKKB | 搬瓦工购买教程:《2025 年最新搬瓦工购买教程和支付宝支付教程》 | |||||||
选择建议:
- 入门:洛杉矶 CN2 套餐,目前最便宜,可选 CN2 GT 机房,入门之选。
- 推荐:洛杉矶 CN2 GIA-E 套餐,速度超快,可选机房多(DC6、DC9、日本软银、荷兰联通等),性价比最高。
- 高端:香港 CN2 GIA 套餐,价格较高,但是无可挑剔。
搬瓦工新手教程
- 搬瓦工新手入门:《搬瓦工新手入门完全指南:方案推荐、机房选择、优惠码和购买教程》(推荐阅读)
- 搬瓦工购买教程:《2021 年最新搬瓦工购买教程和支付宝支付教程》
- 搬瓦工优惠码:BWHCGLUKKB
- 搬瓦工补货通知:《欢迎订阅搬瓦工补货通知(补货提醒)/ 加入搬瓦工交流群》
- 搬瓦工方案推荐:《搬瓦工高性价比 VPS 推荐:目前哪款方案最值得买?》
未经允许不得转载:Bandwagonhost中文网 » 搬瓦工高级教程:使用Python调用KiwiVM面板API
Bandwagonhost中文网

