Skip to content

Instantly share code, notes, and snippets.

@slhck
Created May 23, 2018 18:02
Show Gist options
  • Save slhck/7e86ddb0995e6e533b3c73e74390410c to your computer and use it in GitHub Desktop.
Save slhck/7e86ddb0995e6e533b3c73e74390410c to your computer and use it in GitHub Desktop.
Get Speedtest results from URL
#!/usr/bin/env python3.6
#
# Author: Werner Robitza
#
# Get speedtest results from speedtest URL
#
# Requirements: Python 3.6 and `pip3 install beautifulsoup4`
from bs4 import BeautifulSoup
import argparse
import requests
import re
import json
def extract_value(soup, ret_type):
"""
Extract value of ret_type (download, upload, ping) from soup
"""
try:
value = soup.select(f'div.share-{ret_type} p')[0].text
ret = float(re.search(r'[\d\.]+', value)[0])
return ret
except Exception as e:
return None
def get_speedtest_results(url):
"""
Get speed test results from URL like http://www.speedtest.net/result/7334238606
"""
response = requests.get(url)
data = response.text
soup = BeautifulSoup(data, 'html5lib')
ret = {}
for ret_type in ['download', 'upload', 'ping']:
ret[ret_type] = extract_value(soup, ret_type)
try:
ret['isp'] = soup.select('div.share-isp p')[0].text
except Exception as e:
ret['isp'] = None
# assign ID from URL
ret['id'] = url.split('/')[-1]
return ret
def main():
parser = argparse.ArgumentParser()
parser.add_argument('url')
cli_args = parser.parse_args()
ret = get_speedtest_results(cli_args.url)
print(json.dumps(ret))
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment