跳转到主要内容

收集、存储并显示来自Foursquare、iCloud等平台的实时位置信息。

项目描述

https://travis-ci.org/latestrevision/django-location.png?branch=master

django-location

你在Foursquare上签到吗?你用Runmeter跟踪跑步或骑自行车通勤吗?你使用iOS设备吗?为什么让第三方接口成为你日常活动的唯一窗口呢?

这个Django应用程序将消费Foursquare、iCloud和Runmeter(如果你是它的用户)提供的位置信息,并将其存储在数据库中以供随意显示。

安装

你可以通过pip安装

pip install django-location

或者github仓库检出并安装源代码

git clone https://github.com/latestrevision/django-location.git
cd django-location
python setup.py install

你需要在项目的urls.py中添加django-social-auth和django-location;技术上你可以使用任何URL,但为了下面的说明,我们将期望你添加如下

url(r'^location/', include('location.urls')),
url(r'', include('social_auth.urls')),

位置来源

对于以下一些消费者,特别是iCloud和Runmeter,你需要设置一个cron作业来处理某些周期性任务,你可以通过添加运行以下cron作业来实现

python /path/to/your/manage.py location_consumer

我建议每五或十分钟运行一次,但选择更长的间隔只会产生轻微的影响;要么减少样本频率(在iCloud消费者的情况下),要么增加更新延迟(在Runmeter消费者的情况下)。

Foursquare

Foursquare 在其消费设置中提供了选项,可以将其签到信息即时发布到该应用程序提供的API端点。为了支持这一点,您需要执行以下操作:

  1. 访问 Foursquare 开发者网站 并创建一个新的消费者。

  2. 配置以下设置:

    FOURSQUARE_CONSUMER_KEY = "THECLIENTIDYOUJUSTGENERATED"
    FOURSQUARE_CONSUMER_SECRET  = "THECLIENTSECRETYOUJUSTGENERATED"
  3. 登录到管理员,访问 django-location 应用的配置 URL(通常为 http://yourdomain.com/admin/location/locationsource/configure-accounts/),然后单击“授权 Foursquare”按钮。这将带您进入 Foursquare 网站,并使用您配置的选项授权您的网络应用程序接收从 Foursquare 登录的用户发送的签到。

  4. 如果一切设置正确,您可能不需要做任何事情,但 Foursquare 在其消费者控制台中提供“发送测试推送”按钮,您可以使用它来验证一切是否连接正确。

Runmeter

Runmeter 不提供 API,但允许您配置应用程序在您开始(和结束等)跑步、骑自行车或任何其他活动时发送电子邮件通知。要从 Runmeter 消费信息,我们将配置它将电子邮件发送到另一个未使用的电子邮件收件箱(重要),并配置 django-location 消费这些电子邮件消息并从链接的 KML 文件中提取坐标。

  1. 配置 Runmeter 应用程序以将开始和完成通知发送到可通过 POP3 或 IMAP 访问的邮箱。

  2. 设置 Django Mailbox 以从此类邮箱中消费邮件(请参阅 django-mailbox 的文档)。

  3. 更新用户的“位置消费者设置”记录,将字段 runmeter_email 设置为用户设备将发送 Runmeter 更新的电子邮件地址。

iCloud

iCloud 提供了一个名为“查找我的 iPhone”的服务,允许您随时请求您的设备位置。这个库为您提供了一种简单的方法,可以将此服务的位置信息作为您的一个位置来源。

  1. 通过使用 list_icloud_devices 管理命令识别与您的账户关联的设备

    python /path/to/your/manage.py list_icloud_devices <icloud username> <icloud password>

    <icloud username><icloud password> 替换为您的 iCloud 用户名和密码。

    这将打印设备及其 ID 的列表;在我的情况下,它打印的内容如下

    Name: MacBook Air 11": sinclair -- ID: reGYDh9XwqNWTGIhNBuEwP1ds0F/Lg5t/fxNbZ3V939hhXawByErk+HYVNSUzmWV
    Name: iPhone 4S: Adam Coddingtons iPhone -- ID: i9vbKRGIcLYqJnXMc1b257kUWnoyEBcEh6yM+IfmiMLh7BmOpALU+w==
  2. 更新用户的“位置消费者设置”记录,包括用户希望收集位置信息的 iCloud 用户名iCloud 密码iCloud 设备 ID

使用模板标签显示位置

您可以使用 current_location 模板标签来获取给定用户的最新位置。

简单示例

{% load current_location %}
{% current_location of 'adam' as location_of_adam %}

<p>
    {{ location_of_adam.user.username }} is at {{ location_of_adam.location.coords.1 }}, {{ location_of_adam.location.coords.0 }}
</p>

如果您已安装“django-neighborhoods”和“django-census-places”,您还可以打印城市和社区信息

{% load current_location %}
{% current_location of 'adam' as location_of_adam %}

<p>
    {{ location_of_adam.user.username }} is in the {{ location_of_adam.neighborhood.name }} neighborhood of {{ location_of_adam.city.name }}, {{ location_of_adam.city.get_state_display }}.
</p>

对于给定的点,您可能没有社区或城市信息,并且可能希望使用 Google Maps API 显示地图;以下是一个完整的示例

{% load current_location %}
<script src="http://maps.google.com/maps/api/js?sensor=true" type="text/javascript"></script>

{% current_location of 'somebody' as location %}
{{ location.user.username }} is
{% if location.neighborhood %}
    in the {{ location.neighborhood.name }} neighborhood of {{ location.neighborhood.city }},
    {{ location.neighborhood.state }}:
{% elif location.city %}
    in {{ location.city.name }}, {{ location.city.get_state_display }}:
{% else %}
    ({{ location.get_nearest_city.distance.mi }} miles from {{ location.get_nearest_city.name }}):
{% endif %}
<div id="my_location_map" style="width: 100%; height: 400px;"></div>
<script type="text/javascript">
    var myLocation = document.getElementById('my_location_map');
    myLocation.gmap({
        'center': '{{ location.location.coords.1 }},{{ location.location.coords.0 }}',
        'zoom': 10,
        'mapTypeId': google.maps.MapTypeId.HYBRID
    });
    myLocation.gmap('addMarker', {
        'position': '{{ location.location.coords.1 }},{{ location.location.coords.0 }}',
    });
</script>
Bitdeli badge

项目详细信息


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

django-location-2.1.1.tar.gz (46.6 kB 查看哈希值)

上传时间 源代码

支持者