今天介绍一下搬瓦工如何调用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 | DC3 CN2 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 | 搬瓦工购买教程:《2024 年最新搬瓦工购买教程和支付宝支付教程》 |
选择建议:
- 入门:洛杉矶 CN2 套餐,目前最便宜,可选 CN2 GT 机房,入门之选。
- 推荐:洛杉矶 CN2 GIA-E 套餐,速度超快,可选机房多(DC6、DC9、日本软银、荷兰联通等),性价比最高。
- 高端:香港 CN2 GIA 套餐,价格较高,但是无可挑剔。
搬瓦工新手教程
- 搬瓦工新手入门:《搬瓦工新手入门完全指南:方案推荐、机房选择、优惠码和购买教程》(推荐阅读)
- 搬瓦工购买教程:《2021 年最新搬瓦工购买教程和支付宝支付教程》
- 搬瓦工优惠码:BWHCGLUKKB
- 搬瓦工补货通知:《欢迎订阅搬瓦工补货通知(补货提醒)/ 加入搬瓦工交流群》
- 搬瓦工方案推荐:《搬瓦工高性价比 VPS 推荐:目前哪款方案最值得买?》
未经允许不得转载:Bandwagonhost中文网 » 搬瓦工高级教程:使用Python调用KiwiVM面板API