2015-04-02 3 views
0

Я создаю сайт с флягой и хочу показать живые часы со временем в разных городах. У меня есть долгота и широта, хранящиеся в моей базе данных для каждого города. Использование плагина geonames Я могу получить timezoneid по координатам.Часы реального времени на сайте по координатам

Пример:

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

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

Теперь у меня другая проблема - я не могу получить идентификатор часового пояса по координатам. Линия «geonames.GeonamesClient (« имя пользователя »)« по какой-то причине не работает. Я прочитал результат ['Lat'] и результат ['Lng'] из моей базы данных.

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' 

Итак, я постоянно получаю за исключением значения.

Я использую Колба + virtualenv + uwsgi + Nginx

UPD2: мне удалось это сделать. Я читаю из базы данных mysql lat и lng часового пояса города и города, если часовой пояс не указан - я делаю запрос на geonames.org и получаю идентификатор часового пояса длинным и латским и записываю его в свою базу данных, поэтому я не В следующий раз нужно запросить. Затем я отправляю идентификатор часового пояса в шаблон Jinja2. И использование moment.js и момента-времени отображает текущее время в городе. Вы можете увидеть обновленную страницу (очистить кэш первого): [ссылка] test.fantazia-svit.com.ua/city/9

Для того, чтобы получить часовой пояс из GeoNames Я использую эту функцию:

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

+0

Можете ли вы предоставить больше контекста? У вас есть существующая страница? Вы используете jinja2? Как вы показываете свой список городов? –

+0

@ TimothéeJeannin Да, я использую Flask с Jinja 2, используйте mysql для хранения данных, например, ссылку на страницу: http://test.fantazia-svit.com.ua/city/9 Я хочу отображать время в каждом городе самостоятельно –

+1

Вы хотите сделать это на клиентском JavaScript или на стороне сервера Python? Для JS ознакомьтесь с плагином [момент-время] (http://momentjs.com/timezone/) для [moment.js] (http://momentjs.com). –

ответ

1

Разобрался как показать живое время зная, часовой пояс с яваскриптом благодаря: @ Matt

<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 и получаю идентификатор часового пояса длинным и латским и записываю его в свою базу данных, поэтому я не В следующий раз нужно запросить. Затем я отправляю идентификатор часового пояса в шаблон Jinja2. И использование moment.js и момента-времени отображает текущее время в городе.Вы можете увидеть обновленную страницу (очистить кэш первого): http://test.fantazia-svit.com.ua/city/9

Для того, чтобы получить часовой пояс из GeoNames Я использую эту функцию:

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 - ваш идентификатор часового пояса, который вы вставляете в свой интерфейс

+0

, если вы в любом случае кэшируете 'координаты -> tzid' пары в базе данных; то вы можете [получить tzid из широты, долготы, используя автономную базу данных (например, сгенерированную из данных efele.net)] (http://stackoverflow.com/a/16519004/4279) – jfs

+0

@JFSebastian Я попробовал это, но бессмысленно поддерживать эту базу данных, если вы можете сделать только один запрос на внешний сервер для каждого города. Это был бы вариант, если мне нужно будет проверить идентификатор часового пояса для каждого запроса, или я не ошибаюсь? –

+0

Исходные данные не были обновлены с 26 ноября 2013 года. Я не понимаю, зачем вам нужна онлайн-служба для статических данных. – jfs

Смежные вопросы