通过坐标在网站上的活时钟

时间:2015-04-02 09:55:29

标签: javascript python flask timezone geonames

我正在使用Flask创建一个网站,并希望在不同的城市显示一个活着的时钟。 我在每个城市的数据库中都存储了经度和纬度。 使用geonames插件,我可以通过坐标获得时区。

示例:

import geonames
geonames_client = geonames.GeonamesClient('demo')
geonames_result = geonames_client.find_timezone({'lat': 48.871236, 'lng': 2.77928})
print geonames_result['timezoneId']

输出:

'欧/巴黎'

如何在我的页面上显示实时时钟?

示例:

该市当前时间:12:59

UPD: 通过@Matt来了解如何通过javascript知道时区来显示实时时间:

<script type='text/javascript'>
        function update() {
          $('#clock').html(moment().tz("{{timezone}}").format('H:mm:ss'));
        }
        setInterval(update, 1000);
</script>

现在,我有另一个问题 - 我无法通过coordinates.Line&#34; geonames.GeonamesClient(&#39;用户名&#39;)&#34;获取时区ID。由于某种原因不起作用。我从我的数据库中读取了结果[&#39; Lat&#39;]和结果[&#39; Lng&#39;]。

import geonames
try:
    location = {}
    location['lat'] = result['Lat']
    location['lng'] = result['Lng']
    geonames_client = geonames.GeonamesClient('username')
    print "test"
    geonames_result = geonames_client.find_timezone(location)
    print geonames_result['timezoneId']
    result['Timezone'] = geonames_result['timezoneId']
except:
    result['Timezone'] = 'America/Los_Angeles'

所以,我经常得到除了值。

我正在使用Flask + virtualenv + uwsgi + Nginx

UPD2: 我设法做到了。我正在读取城市和城市时区的mysql数据库lat和lng,如果没有指定时区 - 我向geonames.org发出请求并通过long和lat获取时区ID并将其写入我的数据库,所以我不需要下次请求。然后我将时区ID发送到Jinja2模板。并使用moment.js和moment-timezone显示城市中的当前时间。您可以看到更新的页面(首先清除缓存):[link] test.fantazia-svit.com.ua/city/9

为了从地名中获取时区,我使用了这个函数:

import urllib
import json
try:
    url = "http://api.geonames.org/timezoneJSON?lat=%s&lng=%s&username=%s" % (Lat, Lng, username)
    response = urllib.urlopen(url);
    data = json.loads(response.read())
    Timezone = data['timezoneId']
except:
    Timezone = ''

其中Lat =您的纬度,Lng =经度和用户名=您在genomes.org中的用户名

1 个答案:

答案 0 :(得分:2)

通过@Matt来了解如何通过javascript显示知道时区的实时时间:

<script src="moment.js"></script>
<script src="moment-timezone-with-data-2010-2020.js"></script>
<script type='text/javascript'>
    function update() {
      $('#clock').html(moment().tz("{{timezone}}").format('H:mm:ss'));
    }
    setInterval(update, 1000);
</script>

对于后端。我正在读取城市和城市时区的mysql数据库lat和lng,如果没有指定时区 - 我向geonames.org发出请求并通过long和lat获取时区ID并将其写入我的数据库,所以我不知道下次需要请求。然后我将时区ID发送到Jinja2模板。并使用moment.js和moment-timezone显示城市中的当前时间。您可以看到更新的页面(首先清除缓存):http://test.fantazia-svit.com.ua/city/9

为了从地名中获取时区,我使用了这个函数:

import urllib
import json
try:
    url = "http://api.geonames.org/timezoneJSON?lat=%s&lng=%s&username=%s" % (Lat, Lng, username)
    response = urllib.urlopen(url);
    data = json.loads(response.read())
    Timezone = data['timezoneId']
except:
    Timezone = ''

其中Lat =您的纬度,Lng =经度和用户名=您在gonames.org和Timezone中的用户名 - 是您在前端插入的时区ID