Elsaの技術日記(徒然なるままに)

主に自分で作ったアプリとかの報告・日記を記載

MENU

python/Go言語でのPCの位置情報取得(緯度・経度取得)

今回はPCの位置情報取得についてまとめたいと思います!!
方法はPythongolang両方載せておこうと思います!!
f:id:Elsammit:20210119221025p:plain

在宅ワークする人と出社する人がいて、現在誰が出社してて誰が出社していないのかパッと分からないんですよね。。。
で、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)

とすれば国名、都道府県名、市名が取集できます。

■最後に

簡単に位置情報取得できました。
これを使用して在宅ワーク中か、出社しているかを判定するアプリ作成してみようかな?
前半記載した通り、あまり細かく位置情報を表示してしまうと抵抗感出るので、
出力は、
 ・在宅ワーク
 ・出社
のみに使用かな。