有没有命令或方法可以确定 Geoclue 演示代理的好坏?

有没有命令或方法可以确定 Geoclue 演示代理的好坏?

在 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

我创建了脚本地理定位.pypython

#!/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我可以将其转换为dictionaryin 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 请求使用,或者您可以下载包含信息的数据库并在本地使用它(但您必须不时更新数据库)

相关内容