当前位置: 首页 > news >正文

python 分钟数 获取当天_我背着女朋友,用 Python 偷偷抓取了她的行踪

来自公众号:AirPython

阅读文本大概需要 5 分钟。

1

目 标 场 景

有时候女朋友一个人在外面玩耍,问她在哪个地方,就是不告诉我。但是,你又很想知道女朋友的「位置」,这该如何是好?

9f93eb5697e9bd633ec4edfd482458e2.png

其实你可以这样套路女朋友,假装自己在家很无聊,可以帮她修图,让她微信发原图给你,拿到「微信原图」后,你就可以利用 Python 快速获取到女友的具体位置了。

2

准 备 工 作

首先,在虚拟环境中安装识别图片元数据的库。

pip3 install exifread

然后,进入高德开放平台,申请一个 Web 服务的应用,获取到一个 「Key」用于逆地理编码 API。

d6b3f0a1834847f63fcbd4326675aa0e.png

3

编  写  脚  本

整个操作分为 3 步骤,分别是获取图片的经度和纬度、对经度和纬度进行数据矫正、调用高德逆地理编码 API 获取具体位置。

第 1 步,获取图片的「经度和纬度」。

使用 exifread 库可以直接读取图片文件,获取到图片的元数据,包含经度、纬度、南北纬方向、东西经方向和拍摄时间。

# 使用 exifread 获取图片的元数据
img_exif = exifread.process_file(open(self.img_path, 'rb'))

# 能够读取到属性
if img_exif:
     # 纬度数
     latitude_gps = img_exif['GPS GPSLatitude']

     # N,S 南北纬方向
     latitude_direction = img_exif['GPS GPSLatitudeRef']

     # 经度数
     longitude_gps = img_exif['GPS GPSLongitude']

     # E,W 东西经方向
     longitude_direction = img_exif['GPS GPSLongitudeRef']

     # 拍摄时间
     take_time = img_exif['EXIF DateTimeOriginal']

如果元数据存在,然后判断拍摄时间是否合理。如果拍摄时间不在今天,那只能很遗憾地通知你,你的女朋友在向你撒谎「撒谎」。

def judge_time_met(self, take_time):
    """
    判断拍摄时间是否是在今天
    :param take_time:
    :return:
    """
    # 拍摄时间
    format_time = str(take_time).split(" ")[0].replace(":", "-")

    # 当天日期
    today = str(datetime.date.today())

    if format_time == today:
        return True
    else:
        return False

if is_lie:
        print('很遗憾的通知你,你的女朋友在撒谎!!!')
        return

如果女友没有撒谎,那么可以进行第 2 步的操作。

因为通过 GPS 获取的经度、纬度和高德地图的坐标存在一定的误差,这里需要把坐标转换为「火星坐标系」。

x_pi = 3.14159265358979324 * 3000.0 / 180.0
pi = 3.1415926535897932384626  # π
a = 6378245.0  # 长半轴
ee = 0.00669342162296594323  # 扁率

def wgs84togcj02(lng, lat):
    """
    WGS84转GCJ02(火星坐标系)
    :param lng:WGS84坐标系的经度
    :param lat:WGS84坐标系的纬度
    :return:
    """
    if out_of_china(lng, lat):  # 判断是否在国内
        return lng, lat
    dlat = transformlat(lng - 105.0, lat - 35.0)
    dlng = transformlng(lng - 105.0, lat - 35.0)
    radlat = lat / 180.0 * pi
    magic = math.sin(radlat)
    magic = 1 - ee * magic * magic
    sqrtmagic = math.sqrt(magic)
    dlat = (dlat * 180.0) / ((a * (1 - ee)) / (magic * sqrtmagic) * pi)
    dlng = (dlng * 180.0) / (a / sqrtmagic * math.cos(radlat) * pi)
    mglat = lat + dlat
    mglng = lng + dlng
    return [mglng, mglat]

另外需要注意的是,接口中经度、纬度参数只能识别小数点后 6 位,需要对经纬度中的度、分、秒做一定的数据处理,然后再进行四舍五入。

def __format_lati_long_data(self, data):
    """
    对经度和纬度数据做处理,保留6位小数
    :param data: 原始经度和纬度值
    :return:
    """
    # 删除左右括号和空格
    data_list_tmp = str(data).replace('[', '').replace(']', '').split(',')
    data_list = [data.strip() for data in data_list_tmp]

    # 替换秒的值
    data_tmp = data_list[-1].split('/')

    # 秒的值
    data_sec = int(data_tmp[0]) / int(data_tmp[1]) / 3600

    # 替换分的值
    data_tmp = data_list[-2]

    # 分的值
    data_minute = int(data_tmp) / 60

    # 度的值
    data_degree = int(data_list[0])

    # 由于高德API只能识别到小数点后的6位
    # 需要转换为浮点数,并保留为6位小数
    result = "%.6f" % (data_degree + data_minute + data_sec)
    return float(result)

第 3 步,调用高德的反地理编码 API,传入申请的应用 Key,就能拿到女朋友的详细地址。

def __get_address(self, location):
    """
    根据坐标得到详细地址
    :param location: 经纬度值
    :return:
    """
    resp = requests.get(self.url_get_position.format(self.api_key, location))

    location_data = json.loads(resp.text)

    address = location_data.get('regeocode').get('formatted_address')

    return address

4

结 果 结 论

确保图片是原图的基础上,可以快速帮你判断女朋友是否在撒谎;如果女朋友没有撒谎,就返回女朋友具体的位置。

源码:https://github.com/xingag/spider_python/tree/master/获取女友的位置


感谢阅读 412028c7f9a15cb2ab987708161b8732.png

推荐阅读:

1:真实的上海IT圈:张江男vs漕河泾男

2:为什么你的提问没人解答?

3:我活着从柬埔寨技术“魔窟”逃出来了…

4:2018年Python爱好者社区历史文章合集(作者篇)

5:2018年终精心整理|Python爱好者社区历史文章合集(类型篇)

5ed391074c1a93a85344b7bde006747c.png

9644629d564ee48de0c4d251204e4410.png好看请点这里~

相关文章:

  • -m commit git_「软帝学院」:十年总结常用 Git 命令清单
  • web无序列表去掉点_Python高级基础教程:Day21-30:Web前端概述
  • php缩小png质量变差_php缩小png图片不损失透明色的解决方法
  • 饱和气压与温度的关系_【动手做】制作简易气压计
  • rocketmq怎么保证消息一致性_SpringCloud集成RocketMQ实现可靠消息最终一致性分布式事务方案...
  • 朵朵糖故事机器人怎么更新_我家红薯从不熬粥,加点面,拌点糖,秒变抢手小零食,酥香软糯...
  • 感情沟通出了问题要怎么解决_感情问题咨询:男朋友想分手要怎么调整?
  • java位运算符取反_Java的和,||和|,位运算详解
  • 处理血压信号_打破智能可穿戴设备 “功能鸡肋”,ADI体征信号监测技术助力实现 “健康监测”...
  • e300氛围灯哪里调节_价位差不多,宝马530和奔驰E300,你选谁?
  • 代码批量加引号_字符串包含单引号和双引号写进数据库出错
  • python简单温度转换_python实现简单温度转换的方法
  • 收回dba权限_CloudQuery v1.3.0发布:DBA 的效率加速器
  • 可以新建文本的管理器_Excel结构化表与名称管理器
  • linux pid t 头文件_linux中常用的头文件
  • 【笔记】你不知道的JS读书笔记——Promise
  • 2018以太坊智能合约编程语言solidity的最佳IDEs
  • gcc介绍及安装
  • golang中接口赋值与方法集
  • Idea+maven+scala构建包并在spark on yarn 运行
  • IDEA常用插件整理
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • miaov-React 最佳入门
  • MyEclipse 8.0 GA 搭建 Struts2 + Spring2 + Hibernate3 (测试)
  • nginx 负载服务器优化
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • python 装饰器(一)
  • Python代码面试必读 - Data Structures and Algorithms in Python
  • Vue学习第二天
  • vue中实现单选
  • 动态魔术使用DBMS_SQL
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 删除表内多余的重复数据
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • FaaS 的简单实践
  • TPG领衔财团投资轻奢珠宝品牌APM Monaco
  • $forceUpdate()函数
  • (32位汇编 五)mov/add/sub/and/or/xor/not
  • (C++17) std算法之执行策略 execution
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (二)学习JVM —— 垃圾回收机制
  • (二十一)devops持续集成开发——使用jenkins的Docker Pipeline插件完成docker项目的pipeline流水线发布
  • (附源码)springboot猪场管理系统 毕业设计 160901
  • (附源码)计算机毕业设计ssm高校《大学语文》课程作业在线管理系统
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (南京观海微电子)——I3C协议介绍
  • (十)T检验-第一部分
  • (一)appium-desktop定位元素原理
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • .form文件_一篇文章学会文件上传
  • .net 程序发生了一个不可捕获的异常
  • .NET 药厂业务系统 CPU爆高分析
  • .net开发引用程序集提示没有强名称的解决办法
  • .NET中的Exception处理(C#)
  • @PreAuthorize注解