参考サイト
https://qiita.com/azipinsyan/items/1f70bc66c2ff23a0a411
iphoneを使って自分のGPS記録を取得する(アプリ未使用) – Qiita
ライブラリのインストール
まずは「pyicloud」を使うためにインストール
pip3 install pyicloud
pyicloudを使って接続テスト
早速、インストールした「pyicolud」を使って接続テストを行います。
「check_gps_device.py」を作成して、「アカウントID」と「パスワード」をご自身のものを入力してください。
#!/usr/bin/env python
#-*- coding:utf-8 -*-
from pyicloud import PyiCloudService
#以下は接続するicloudのアカウントとパスワードを記載します。
api = PyiCloudService('xxxxxx@xxxx.com', 'xxxxxxxx')
def get_oauth():
auth = api.devices
return auth
if __name__ == '__main__':
auth=get_oauth()
print('\n')
print(auth)
これを実行させます。
python3 check_gps_device.py
アカウントとパスワードが正しいと、手持ちのiPhone・Macにサインインの認証通知が届きます。
「許可する」をクリックし、次の画面はコードが表示されますがスルーして「完了」をクリックしてください。
すると、実行したコマンドラインの画面に、入力したAppleアカウントに紐づくデバイスの情報が表示されます。
(私の場合は、「Mac Mini」と「Macbook Air」「iPhone12 mini」の3台がちゃんと表示されていました。)
この表示がされていれば、正常に完了していることがわかります。
pyicloudで位置情報を取得する
続いてが本番。
デバイスの位置情報を取得します。
先ほどのコードに加えて少し増えています。
ちなみに、「デバイスナンバー」の部分は、基本「0」ですが、デバイスの管理状況と、位置情報を取得したいデバイスに応じて、変更が必要です。筆者の場合は、先ほどテストで表示された順番で、
「0」=「Mac Mini」
「1」=「Macbook Air」
「2」=「iPhone12 mini」
のようになります。
#!/usr/bin/env python
#-*- coding:utf-8 -*-
from pyicloud import PyiCloudService
#以下は接続するicloudのアカウントとパスワードを記載します。
api = PyiCloudService('xxxxxx@xxxx.com', 'xxxxxxxx')
def get_oauth():
# デバイスナンバーは、icloudに登録しているデバイスに応じて数が異なる。
auth = api.devices[0].location()
return auth
if __name__ == '__main__':
auth = str(get_oauth())
eval_auth = eval(auth)
is0 = auth.find('isOld')
pst = auth.find('positionType')
lat = eval_auth['latitude']
lon = eval_auth['longitude']
print(lat, lon)
2ファクタ認証を利用している場合は少し変わってきます。
#!/usr/bin/env python
#-*- coding:utf-8 -*-
from pyicloud import PyiCloudService
import sys
#以下は接続するicloudのアカウントとパスワードを記載します。
api = PyiCloudService('xxxxxx@xxxx.com', 'xxxxxxxx')
#ここから2段認証を実施する。
if api.requires_2fa:
import click
print ("Two-factor authentication required. Your trusted devices are:")
devices = api.trusted_devices
for i, device in enumerate(devices):
print (" %s: %s" % (i, device.get('deviceName',
"SMS to %s" % device.get('phoneNumber'))))
device = click.prompt('Which device would you like to use?', default=0)
device = devices[device]
if not api.send_verification_code(device):
print ("Failed to send verification code")
sys.exit(1)
code = click.prompt('Please enter validation code')
if not api.validate_verification_code(device, code):
print ("Failed to verify verification code")
sys.exit(1)
def get_oauth():
# デバイスナンバーは、icloudに登録しているデバイスに応じて数が異なる。
auth = api.devices[0].location()
return auth
if __name__ == '__main__':
auth = str(get_oauth())
eval_auth = eval(auth)
is0 = auth.find('isOld')
pst = auth.find('positionType')
lat = eval_auth['latitude']
lon = eval_auth['longitude']
print(lat"," lon)
早速、実行してみましょう。
まずはどちらかを実行。
# 通常の認証の場合
python3 get_gps.py
# 2ファクタ認証の場合
python3 get_gps_2Auth.py
通常の認証の方を使用して、正常に動作すれば、
デバイスの所在の「緯度」「軽度」が数字で表示されます。
「Google Map」などにこの数字を入力して現在地かどうかを確認してみましょう。
#!/bin/sh
ther=$(python /home/pi/get_gps.py)
day=$(date +%Y,%m,%d,%H,%M,%S)
echo "$day,$ther" >> /home/pi/gps.csv
あとは、GPSの位置情報の取得日時を合わせて吐き出すようにしておくと便利そうです。
pythonの知識も全然ない筆者でしたが、結構わかりやすくて勉強になりました。