在 Debian 的启动应用程序(可能还有其他基于 Debian 和 ubuntu 的发行版)中,有一个名为 Geoclue Demo 代理的库,实际的库路径是
/usr/libexec/geoclue-2.0/demos/agent
这是 geoclue-2.0 的一部分 https://gitlab.freedesktop.org/geoclue/geoclue/wikis/home。
到目前为止,我所知道的唯一问题是删除应用程序/服务。查看问题从unix.stackexchange.com 。
如果我能理解它显示的内容以及它如何显示,我会发现它更有趣。关于 man geoclue 的联机帮助页不适用于普通用户。
有人可以帮我吗?我正在查看一些简单的线路,然后curl wttr.in/$location
您就可以获得该位置的天气输出。有些东西是交互式的,而且很可能是交互式的,只是需要弄清楚如何进行。
答案1
在 Stackoverflow 上我发现了一个问题:如何在 Python 中获取 Geoclue 地理定位?
安装模块后即可使用GeoGlue
apt install gir1.2-geoclue-2.0
我创建了脚本地理定位.py在python
#!/usr/bin/env python
import gi
gi.require_version('Geoclue', '2.0')
from gi.repository import Geoclue
clue = Geoclue.Simple.new_sync('something', Geoclue.AccuracyLevel.NEIGHBORHOOD, None)
location = clue.get_location()
latitude = location.get_property('latitude')
longitude = location.get_property('longitude')
print('{},{}'.format(latitude, longitude))
这latitude,longtiture
让步bash
python getlocation.py
我可以直接使用它wttr.in
curl wttr.in/$(python getlocation.py)
如果我设置属性executable
chmod u+x geolocation.py
那么我什至可以在没有情况下运行它python
- 它将使用shebang
( #!/usr/bin/env python
)的值
我什至可以删除扩展名.py
并保留名称geolocation
,然后它看起来像
curl wttr.in/$(getlocation)
(必须将$( )
其作为单独的进程执行)
我也可以直接使用python
从服务器获取值
#!/usr/bin/env python
import gi
gi.require_version('Geoclue', '2.0')
from gi.repository import Geoclue
clue = Geoclue.Simple.new_sync('something', Geoclue.AccuracyLevel.NEIGHBORHOOD, None)
location = clue.get_location()
latitude = location.get_property('latitude')
longitude = location.get_property('longitude')
#print('latitude :', latitude)
#print('longitude:', longitude)
import requests
url = 'https://wttr.in/{},{}'.format(latitude, longitude)
# to get it as HTML instead of TEXT (see PLAIN_TEXT_AGENTS in https://github.com/chubin/wttr.in/blob/master/lib/globals.py#L75)
#response = requests.get(url, headers={'User-Agent': ''}) #{'User-Agent': 'Mozilla/5.0'}
response = requests.get(url)
print(response.text)
?format=j1
如果我在网址末尾添加
https://wttr.in/{},{}?format=j1
然后我会得到它,JSON
我可以将其转换为dictionary
in python
,并以不同的方式格式化数据。
测试于Linix Mint 20
, Python 3.8
,Python 2.7
顺便一提:
看来wttr.in
要用程序我们去它在终端中运行。
它似乎geoclue
使用不同的方法来识别位置,但在我的情况下,它可能用来IP
识别它 - 但我Internet Provider
可以IP
每 24 小时更改一次,这IP
可以由不同地方的用户使用,所以有时它会给出不正确的位置。此时,它给了我距离我家近 30 公里的位置 - 随后又wttr.in
给出了不同的天气。
一些网络服务器使用MaxMind 的 GeoIP转换为位置 - 但当用户每隔几个小时更改一次IP
时,它会遇到同样的问题。IP
我记得它可以通过 HTTP 请求使用,或者您可以下载包含信息的数据库并在本地使用它(但您必须不时更新数据库)