微信小程序通过ip获取用户所在城市

在微信小程序中, 获取用户的地理位置是需要权限的, 如果只是获取用户所在的城市信息, 那只需查看用户ip所在的城市就好了, 下面我们就完成获取用户ip的小程序逻辑~

根据用户ip获取地理位置

  • 根据用户ip获取用户地理位置, 用爬虫实现!
  • 博主所用的api:
"http://www.ip138.com/ips138.asp?ip="+ ip_addr
  • 查询ip的函数
import requests
from lxml import etree

# 查询ip归属地
def query_ip_attribution(ip_addr):
    # 设置用户代理头
    headers = {
        # 设置用户代理头(为狼披上羊皮)
        "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36",
    }
    target_url = "http://www.ip138.com/ips138.asp?ip="+ ip_addr
    response = requests.get(target_url, headers = headers).content
    data_etree = etree.HTML(response)
    ip_attr = data_etree.xpath('//tr[3]/td/ul/li[1]//text()')
    ip_attr = ip_attr[0].strip("本站数据:")
    return {"ip_attr": ip_attr, "ip": ip_addr}

nginx配置

  • nginx负责将请求转发到django(django在9000端口开启了服务)
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
  • Host包含客户端真实的域名和端口号;
  • X-Real-IP表示客户端真实的IP;
  • X-Forwarded-For这个Header和X-Real-IP类似,但它在多层代理时会包含真实客户端及中间每个代理服务器的IP。
  • X-Forwarded-Proto表示客户端真实的协议(http还是https);

Django读取用户ip, 查询并返回结果

from django.http import JsonResponse
# 获取用户ip
def get_ip(request):
    if 'HTTP_X_FORWARDED_FOR' in request.META:
        ip =  request.META['HTTP_X_FORWARDED_FOR']
    else:
        ip = request.META['REMOTE_ADDR']

    return JsonResponse(query_ip_attribution(ip))

微信小程序获取返回的数据

可以作为开源接口调用 (支持http, https, 无需参数)

小结:

网页云音乐, 非常注重分析自己的用户, 并对用户的歌单进行个性化定制, 收获了大量好评, 对于个人开发者, 用复杂的算法分析用户, 不太现实,但通过分析用户所在城市, 对软件定位做一些优化, 还是很容易实现的

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏代码世界

Python中的logger和handler到底是个什么鬼

最近的任务经常涉及到日志的记录,特意去又学了一遍logging的记录方法。跟java一样,python的日志记录也是比较繁琐的一件事,在写一条记录之前,要写好多...

3349
来自专栏Kiba518

C#——Nhibernate探索

该版本可能是最新版,我下载的4.0.4.GA。其中GA意思我没搞清楚。不过应该不重要。

1163
来自专栏企鹅号快讯

JDBC编程

前面我们已经讨论了数据库的安装和简单的使用,还没完成的可以先去Mysql的安装和Mysql数据库的简单操作回顾一下哦!今天我们来简单学习JDBC编程的准备和链...

3428
来自专栏数据小魔方

R语言爬虫实战——知乎live课程数据爬取实战

本文是一篇R语言爬虫实战练习篇,同样使用httr包来完成,结合cookies登录、表单提交、json数据包来完成整个数据爬取过程,无需书写复杂的xpath、cs...

4596
来自专栏智能大石头

NewLife.Net——构建可靠的网络服务

老规矩,先上源码:https://github.com/nnhy/NewLife.Net.Tests

1240
来自专栏Java成神之路

Web 通信 之 长连接、长轮询(long polling)

基于HTTP的长连接,是一种通过长轮询方式实现"服务器推"的技术,它弥补了HTTP简单的请求应答模式的不足,极大地增强了程序的实时性和交互性。

4873
来自专栏Web项目聚集地

Javascript中的异步

832
来自专栏*坤的Blog

redis性能测试

1K2
来自专栏Java职业技术分享

分布式 | Dubbo 架构设计详解

Dubbo是Alibaba开源的分布式服务框架,它最大的特点是按照分层的方式来架构,使用这种方式可以使各个层之间解耦合(或者最大限度地松耦合)。从服务模型的角度...

2670
来自专栏数据之美

Zookeeper 原理与实践

1、Zookeeper 的由来 在Hadoop生态系统中,许多项目的Logo都采用了动物,比如 Hadoop 和 Hive 采用了大象的形象,HBase 采用了...

8358

扫码关注云+社区

领取腾讯云代金券