| import subprocess | |
| import re | |
| def run_shortcuts_cli(): | |
| """執行 macOS 捷徑並傳回輸出的文字""" | |
| try: | |
| result = subprocess.run(["shortcuts", "run", "GetMyLocation"], capture_output=True, text=True, timeout=10) | |
| if result.returncode == 0 and result.stdout.strip(): | |
| return result.stdout.strip() | |
| except Exception: | |
| pass | |
| return None | |
| def get_mac_gps(): | |
| """主要定位入口,透過捷徑取得定位資訊,並在這邊進行列印與解析""" | |
| output = run_shortcuts_cli() | |
| if not output: | |
| print("無法透過 macOS 捷徑取得定位資訊(請確認捷徑 \"GetMyLocation\" 是否存在)。") | |
| return None | |
| # 在此處列印捷徑回傳的原始文字 | |
| print("\n[macOS 捷徑輸出]:") | |
| print(output) | |
| # 嘗試解析經緯度 | |
| numbers = re.findall(r'[-+]?\d+\.\d+', output) | |
| if len(numbers) >= 2: | |
| try: | |
| lat = float(numbers[0]) | |
| lon = float(numbers[1]) | |
| if -90 <= lat <= 90 and -180 <= lon <= 180: | |
| # 台灣經緯度合理範圍調整(若經度在前面則對調) | |
| if 100 <= lat <= 130 and 10 <= lon <= 40: | |
| lat, lon = lon, lat | |
| print("\n[成功解析經緯度]") | |
| print(f"緯度 (Latitude) : {lat}") | |
| print(f"經度 (Longitude): {lon}") | |
| return {"lat": lat, "lon": lon} | |
| except ValueError: | |
| pass | |
| return output | |
| if __name__ == "__main__": | |
| get_mac_gps() | |