2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

jqを利用してSpeedtestのjsonからdownloadとuploadだけを取得する方法

Last updated at Posted at 2020-03-08

#jqコマンドは?
json形式のデータをパースしてくれるコマンドです。
インストールは、

brew install jq

でできます。
#利用するデータは?
今回は、speedtestの結果を以下のコマンドでjsonで出力して、それをパースしてダウンロードとアップロードだけを取得してみたいと思います。
まず、speedtestで出力結果をjson形式で書き出してresult.jsonに保存するために以下のコマンドを実施します。
なお、speedtestはOoklaの公式で提供されているものを用います。
それのインストール方法は、Ooklaの公式サイトで公開されています。

入力するコマンド

speedtest --format=json >> result.json  

ファイル名を指定して出力する方法もありそうですが、私の力では見つからなかったため、とりあえずリダイレクションで、terminalの出力結果をファイルに出力しましした。

さて、ここからが本題です。
まずは、出力されたresult.jsonの中身を見てみましょう。

{"type":"result","timestamp":"2020-03-08T02:36:24Z","ping":{"jitter":3.3050000000000002,"latency":4.7750000000000004},"download":{"bandwidth":976859,"bytes":13739838,"elapsed":15015},"upload":{"bandwidth":903839,"bytes":4670503,"elapsed":5174},"packetLoss":0,"isp":"Asahi Net","interface":{"internalIp":"10.0.0.15","name":"en0","macAddr":"F8:FF:C2:69:EA:AA","isVpn":false,"externalIp":"14.3.19.11"},"server":{"id":14623,"name":"IPA CyberLab","location":"Bunkyo","country":"Japan","host":"speed.coe.ad.jp","port":8080,"ip":"103.95.184.74"},"result":{"id":"b3e495d4-30b6-4472-9fd2-69493a6c2b0f","url":"https://www.speedtest.net/result/c/b3e495d4-30b6-4472-9fd2-69493a6c2b0f"}}

このままだと、何が書いてあるのか理解するのが難しいです。

それでは、catコマンドとjqコマンドを利用して、jsonを見やすい形に整形して、見てみましょう。

{
  "type": "result",
  "timestamp": "2020-03-08T02:36:24Z",
  "ping": {
    "jitter": 3.305,
    "latency": 4.775
  },
  "download": {
    "bandwidth": 976859,
    "bytes": 13739838,
    "elapsed": 15015
  },
  "upload": {
    "bandwidth": 903839,
    "bytes": 4670503,
    "elapsed": 5174
  },
  "packetLoss": 0,
  "isp": "Asahi Net",
  "interface": {
    "internalIp": "10.0.0.15",
    "name": "en0",
    "macAddr": "******",
    "isVpn": false,
    "externalIp": "14.3.19.11"
  },
  "server": {
    "id": 14623,
    "name": "IPA CyberLab",
    "location": "Bunkyo",
    "country": "Japan",
    "host": "speed.coe.ad.jp",
    "port": 8080,
    "ip": "103.95.184.74"
  },
  "result": {
    "id": "b3e495d4-30b6-4472-9fd2-69493a6c2b0f",
    "url": "https://www.speedtest.net/result/c/b3e495d4-30b6-4472-9fd2-69493a6c2b0f"
  }
}

非常に見やすくなりましたね。

#jqコマンドで特定要素を取り出す
それでは、次にjqコマンドを利用して特定の要素だけを取り出してみましょう。
まずは、ダウンロードの速度を取り出してみたいと思います。

cat result.json | jq ".download.bandwidth"

と入力すると、

976859

と表示されました。

アップロードの速度だけを取り出すには、以下のコマンドを実行します。

cat result.json | jq ".upload.bandwidth"

すると、

903839

と表示されました。

これはあくまでも、バイト数なので、これをよく利用する「Mbps」に変換するには、

976859*8/1024/1024

または、

976859*8/1000/1000

としてください。
2進数で考えるのか、10進数で考えるのか、規格が微妙に異なるようです。
正式な規格としては、10進数で考えるのが正しいので、1000で割るのが正しいです。
ただ、業界としてはデファクトスタンダードとして2進数で考えて1024で割るのも、間違ってはいないようです。

コメントしてくださった方、ありがとうございます。

以上、おわおわり。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?