Python 通过微信控制实现app定位发送到个人服务器再转发微信服务器接收位置信息

 更新时间:2019年08月05日 10:29:27   作者:wzjssssssssss  
这篇文章主要介绍了Python 通过微信控制实现app定位发送到个人服务器,再转发微信服务器接收位置信息,本文给出了实例代码,代码简单易懂,非常不错具有一定的参考借鉴价值,需要的朋友可以参考下

考虑到女友的安全问题,就做了一个app实现定位和服务器实现转发的东西。刚学python,竟没想到用对象编程会更加方便,全程过程式开发,代码有点臃肿,就当学习下python吧.

效果就是:在微信公众号中输入指定字符比如:”我要知道你的位置”,手机那端的位置就弹出来了.主要是讲一下思路:先是app实现定位,当微信发送消息时,消息从微信服务器转发到开发者服务器然后用socket发送指定消息来通知app,I need your location,app接收到消息之后再发送给开发服务器(app 开service实现后台全程运行),由于定位信息是经纬度,所以用了高德API,但是发现谷歌地球的定位是准的,可能和android内置的定位有关系吧,然后就转换了一下不同地图的经纬度,然后转成位置信息发送给微信服务器.

import socket
import threading
import os
import requests
from flask import Flask
from flask import request
from bs4 import BeautifulSoup
import json
global sock
#实现通过微信控制手机app定位发送给服务器显示位置信息
loca = "welcome"
app = Flask(__name__)
#搭建web服务器通过socket发送消息给app索取定位信息,然后转发给微信服务器
@app.route("/wx_check",methods=["POST","GET"]) #这里用了一个Web框架  "/wx_check" 是你在微信中填的开发者服务器路径
def application():
  openID = request.args['openid'] # 微信发的,详见开发者文档
  soup = BeautifulSoup(request.data,"html.parser")
  content = soup.find("content") # content 是微信用户发的消息,可用来验证用户
  sock.send(b"getlocation") # 发送信息通知android
  global loca
  while True: #手动阻塞
    if loca != "welcome":
      break
  back = loca
  loca = "welcome"
  return """
  <xml> 
  <ToUserName>%s</ToUserName> 
  <FromUserName>qqmsssssssss</FromUserName>
  <CreateTime>12345678</CreateTime> 
  <MsgType>text</MsgType> 
  <Content>%s</Content> 
  </xml>"""%(openID,back)
def start():
  app.run('0.0.0.0',80)
threading.Thread(target=start,args=()).start()
# 与app进行socket连接 接受定位信息 另外用到经纬度兼容转换API 和经纬度转位置API
def tcplink(sock,addr):
  try:
    print('Accept new connection from %s:%s...' % addr)
    while True:
      sock.setblocking(True)
      data = sock.recv(1024)
      location = data.decode('utf-8')
      print("client:"+location)
      # 以下进行经纬度 地图信息的转换 loca为app所在地址接上面的 堵塞
      if location != "":
        global loca
        print(location)
        lis = location.split(",")
        location = "%s,%s"%(lis[1],lis[0])
        print(location)
        xml = requests.get("http://api.gpsspg.com/convert/coord/?oid=xxxx&key=xxxxxxxxxxxxxxxxxx&from=0&to=3&latlng=%s&output=xml"%location)
        soup = BeautifulSoup(xml.text,"html.parser")
        print(soup.text)
        lat= soup.find("lat").string
        lng= soup.find("lng").string
        location = "%s,%s"%(lng,lat)
        print("after"+location)
        a = requests.get("http://restapi.amap.com/v3/geocode/regeo?key=xxxxxxxxxxxxxxxxx&location="+location)
        loca = a.text
        obj = json.loads(loca)
        loca = obj["regeocode"]["formatted_address"]
      else:
        print("socket is close,waiting new accept")
        sock.close()
        break
  except Exception as e:
    location = "raise error"
  finally:
    pass

try:
  s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  s.bind(('0.0.0.0',9999))
  s.listen(10)
  print('waiting to connect')
  while True:
    sock,addr = s.accept()  #等待app来连接
    t = threading.Thread(target=tcplink,args=(sock,addr))
    t.start()
finally:
  print("ending")
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
以下是android端代码:

# 获取定位,其实就是获取经纬度
private Location getLastKnownLocation() {
    LocationManager mLocationManager = (LocationManager)getApplicationContext().getSystemService(LOCATION_SERVICE);
    List<String> providers = mLocationManager.getProviders(true);
    Location bestLocation = null;
    for (String provider : providers) {
      Location l = mLocationManager.getLastKnownLocation(provider);
      if (l == null) {
        continue;
      }
      if (bestLocation == null || l.getAccuracy() < bestLocation.getAccuracy()) {
        // Found best last known location: %s", l);
        bestLocation = l;
      }
    }
    return bestLocation;
  }

  String provider;
  public void GetLocation(){
    LocationManager mLocationManager;
    Location location = getLastKnownLocation();

//    Log.d("TAG", provider.toString());
    Log.d("TAG", location.toString());
    if (location != null) {
      //获取当前位置,这里只用到了经纬度
      String string =location.getLongitude() + ","+ location.getLatitude();
      try {
        OutputStream outputStream = socket.getOutputStream();
        PrintWriter writer = new PrintWriter(outputStream);
        writer.write(string);
        writer.flush();
//       writer.close();
//       socket.shutdownOutput();
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
      }
    }
  }
  @SuppressLint("ShowToast") public void Connect(){
    try {
      socket = new Socket();
      socket.connect(new InetSocketAddress("xxx.xxx.xxx.xxx",9999));
      while (true) {
        Log.d("TAG", socket.isConnected()+"");
        InputStream stream = socket.getInputStream(); 
        byte[] b = new byte[11];
        stream.read(b);
        String sb = new String(b);
        if(sb.equalsIgnoreCase("getlocation")){
          GetLocation();
        }else
        {
          OutputStream outoStream = socket.getOutputStream();
          outoStream.write("error code".getBytes());
          socket.shutdownOutput();
        }
      }
    } catch (IOException e) {
      // TODO Auto-generated catch block
      Log.d("TAG", "error");
      e.printStackTrace();
    }
  }

总结

以上所述是小编给大家介绍的Python 通过微信控制实现app定位发送到个人服务器再转发微信服务器接收位置信息 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

相关文章

  • Python初学者必备的文件读写指南

    Python初学者必备的文件读写指南

    今天给大家带来的是关于Python基础的相关知识,文章围绕着Python文件读写展开,文中有非常详细的介绍及代码示例,需要的朋友可以参考下
    2021-06-06
  • 详解python3 + Scrapy爬虫学习之创建项目

    详解python3 + Scrapy爬虫学习之创建项目

    这篇文章主要介绍了python3 Scrapy爬虫创建项目,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • 如何用Python 实现景区安防系统

    如何用Python 实现景区安防系统

    本设计中,利用YOLO目标检测算法、Openpose姿态识别算法、deepsort跟踪算法、MSCNN人群密度估计算法实现了火灾监测、吸烟监测、行为安全监测、人群密度监测、口罩率监测、人员定位监测六大功能,对Python 实现景区安防系统感兴趣的朋友一起看看吧
    2022-07-07
  • Python简单I/O操作示例

    Python简单I/O操作示例

    这篇文章主要介绍了Python简单I/O操作,结合实例形式分析了Python针对文件的I/O读写及cPickle模块相关使用操作技巧,需要的朋友可以参考下
    2019-03-03
  • Python使用Matplotlib实现雨点图动画效果的方法

    Python使用Matplotlib实现雨点图动画效果的方法

    这篇文章主要介绍了Python使用Matplotlib实现雨点图动画效果的方法,结合实例形式分析了win10安装ffmpeg及animation函数的使用相关操作技巧,需要的朋友可以参考下
    2017-12-12
  • Django自定义分页与bootstrap分页结合

    Django自定义分页与bootstrap分页结合

    这篇文章主要为大家详细介绍了Django自定义分页与bootstrap分页结合使用的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-05-05
  • Python实现把utf-8格式的文件转换成gbk格式的文件

    Python实现把utf-8格式的文件转换成gbk格式的文件

    这篇文章主要介绍了Python实现把utf-8格式的文件转换成gbk格式的文件,本文给出了实现代码并同时剖析了代码的作用,需要的朋友可以参考下
    2015-01-01
  • 一文带你解密Python迭代器的实现原理

    一文带你解密Python迭代器的实现原理

    这篇文章主要为大家详细介绍了Python中迭代器的实现原理,文中的示例代码讲解详细,对我们学习Python有一定的帮助,需要的可以参考一下
    2022-12-12
  • Python文本统计功能之西游记用字统计操作示例

    Python文本统计功能之西游记用字统计操作示例

    这篇文章主要介绍了Python文本统计功能之西游记用字统计操作,结合实例形式分析了Python文本读取、遍历、统计等相关操作技巧,需要的朋友可以参考下
    2018-05-05
  • Python中日期和时间的用法超强总结

    Python中日期和时间的用法超强总结

    时间无疑是生活各个方面中最关键的因素之一,因此,记录和跟踪时间变得非常重要。在 Python 中,可以通过其内置库跟踪日期和时间。今天我们来介绍关于 Python 中的日期和时间,一起来了解如何使用time和datetime模块查找和修改日期和时间
    2022-10-10

最新评论