今回はPCの位置情報取得についてまとめたいと思います!!
方法はPythonとgolang両方載せておこうと思います!!
在宅ワークする人と出社する人がいて、現在誰が出社してて誰が出社していないのかパッと分からないんですよね。。。
で、PCの位置情報が分かれば、出社しているのか判定できるのでは??と思い、調べてみた感じです。
今回実装した実行コードをPC起動時 or 定期実行させればユーザが出社しているのか判定できますね。
余り細かく判定してしまうとプライベート侵害!!、使いたくない!!っていう人が出てくるので、あくまで出社 or 在宅のみの判定にとどめておきたいですね。
では、解説してきます!!
■使用API
位置情報取得にあたり、こちらのAPIを用いました。
https://get.geojs.io/v1/ip/geo.json
こちらにGet Requestを行うと、緯度や経度などが格納されたjsonデータがResponseされます。
jsonデータには緯度や経度以外にも国や都道府県、市名までが格納されております。
要するに、pythonとgo言語両方載せますが、どちらもGet Request投げて、Responseされたjsonデータを加工して、
緯度、経度を取得するのみです!!
■pythonでのPC位置情報取得
では先ほどのAPIを用いてpythonで位置情報を取得します。
コードはこちら。
import requests geo_request_url = 'https://get.geojs.io/v1/ip/geo.json' data = requests.get(geo_request_url).json() print(data['latitude']) print(data['longitude'])
こちらでjsonデータを取得し、<|python|
data = requests.get(geo_request_url).json()
|
こちらで緯度と経度をログ出力しています。
print(data['latitude']) print(data['longitude'])
実行すると、実行したPCの緯度と経度が取得できます。
そこまで正確ではないのが難点ですが。
また、
print(data['country']) print(data['region']) print(data['city'])
とすると、上から国名、都道府県名、市名が取得できます。
■Go言語での位置情報取得
次にGo言語です。
コードはこちら。
package main import ( "fmt" "net/http" "io/ioutil" "github.com/antonholmquist/jason" ) func main() { url := "https://get.geojs.io/v1/ip/geo.json" resp, _ := http.Get(url) defer resp.Body.Close() byteArray, _ := ioutil.ReadAll(resp.Body) str := string(byteArray) v, err := jason.NewObjectFromBytes([]byte(str)) if err != nil{ panic(err) } latitude, _ := v.GetString("latitude") longitude, _ := v.GetString("longitude") fmt.Println("latitude:" + latitude) fmt.Println("longitude:" + longitude) }
実施していることは、、
resp, _ := http.Get(url)
にて、Get Requestを送信し、
byteArray, _ := ioutil.ReadAll(resp.Body)
str := string(byteArray)
取得したResponseデータを文字列に変換。
そして、
v, err := jason.NewObjectFromBytes([]byte(str)) if err != nil{ panic(err) } ||<j jasonというライブラリを用いてjsonオブジェクトとしてデータを加工。 jasonライブラリは、こちらにて管理されております。 [https://github.com/antonholmquist/jason] 最後にこちらのコードにて緯度、経度データのみ抽出してデータをログ出力しています。 >|go| latitude, _ := v.GetString("latitude") longitude, _ := v.GetString("longitude") fmt.Println("latitude:" + latitude) fmt.Println("longitude:" + longitude)
先ほどのpythonと同様に、
country, _ := v.GetString("country") region, _ := v.GetString("region") city, _ := v.GetString("city") fmt.Println("country:" + country) fmt.Println("region:" + region) fmt.Println("city:" + city)
とすれば国名、都道府県名、市名が取集できます。