網際網路世界有許多免費的開放資料可供查詢,在大部份的情形下,只要透過網頁瀏覽就非常方便了,但是對於所有事都想要用程式來解決的人來說,能透過程式來取得這些資料有一些特定的意義存在。而更重要的是,適當使用Python語言的一些程式庫,下載並分析資料變成一件非常簡單的事情。以本文的目的為例,只要短短的數行程式,就可以到USGS擷取目前全球的地震訊息,而且他們是每5分鐘更新一次,資料非常地即時喔。

# _*_ coding: utf-8 *_*

import json, requests, datetime

url = 'http://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/4.5_week.geojson'
earthquakes = json.loads(requests.get(url).text)

for eq in earthquakes['features']:
    if(float(eq['properties']['mag'])>5.0):
        eptime = float(eq['properties']['time']) /1000.0
        d = datetime.datetime.fromtimestamp(eptime). strftime('%Y-%m-%d %H:%M:%S')
        print("{}, 震度:{}, 地點:{}".format(d, eq['properties']['mag'], eq['properties']['place']))

以下是程式的執行結果:

$ python eq.py

2016-02-01 07:23:46, 震度:5.3, 地點:79km SSW of Panguna, Papua New Guinea

2016-02-01 01:39:00, 震度:6, 地點:Balleny Islands region

2016-01-31 10:50:05, 震度:5.6, 地點:95km S of Lorengau, Papua New Guinea

2016-01-31 07:46:44, 震度:5.3, 地點:94km S of Lorengau, Papua New Guinea

2016-01-31 06:23:53, 震度:5.1, 地點:84km SSW of Panguna, Papua New Guinea

2016-01-30 11:42:23, 震度:5.1, 地點:90km N of Yelizovo, Russia

2016-01-30 11:25:10, 震度:7.2, 地點:91km N of Yelizovo, Russia

2016-01-30 08:16:40, 震度:5.3, 地點:Kuril Islands

2016-01-30 08:08:50, 震度:5.1, 地點:144km SSW of Elato, Micronesia

2016-01-30 01:32:31, 震度:5.2, 地點:116km ESE of Bitung, Indonesia

2016-01-29 12:30:47, 震度:5.1, 地點:43km E of Bristol Island, South Sandwich Islands

2016-01-29 08:02:39, 震度:5.2, 地點:86km SSE of Lata, Solomon Islands

2016-01-29 04:03:02, 震度:5.1, 地點:Pacific-Antarctic Ridge

2016-01-27 23:11:17, 震度:5.3, 地點:Central Mid-Atlantic Ridge

2016-01-27 09:24:30, 震度:5.1, 地點:38km ESE of Ngulu, Micronesia

2016-01-27 07:19:08, 震度:5.2, 地點:20km N of Farkhar, Afghanistan

2016-01-27 05:59:57, 震度:5.1, 地點:69km S of Padedewatu, Indonesia

2016-01-27 05:34:11, 震度:5.1, 地點:90km S of Taron, Papua New Guinea

2016-01-27 04:03:43, 震度:5.3, 地點:90km S of Taron, Papua New Guinea

2016-01-27 01:51:29, 震度:5.2, 地點:181km SW of Dadali, Solomon Islands

2016-01-26 11:46:36, 震度:5.2, 地點:119km E of Ndoi Island, Fiji

2016-01-26 11:10:23, 震度:5.8, 地點:96km S of Taron, Papua New Guinea

2016-01-26 10:31:48, 震度:5.3, 地點:Fiji region

2016-01-25 17:17:50, 震度:5.7, 地點:166km NNE of Tobelo, Indonesia

2016-01-25 14:10:42, 震度:5.3, 地點:38km N of Al Hoceima, Morocco

2016-01-25 13:54:06, 震度:5.1, 地點:41km NNE of Al Hoceima, Morocco

2016-01-25 12:34:19, 震度:5.3, 地點:53km NNE of Al Hoceima, Morocco

2016-01-25 12:22:02, 震度:6.3, 地點:54km NNE of Al Hoceima, Morocco

還滿有趣的。

(97)