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

作者:wzjssssssssss 时间:2023-02-15 16:49:10 

考虑到女友的安全问题,就做了一个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定位发送到个人服务器再转发微信服务器接收位置信息 ,网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

来源:https://blog.csdn.net/wzjssssssssss/article/details/79867072

标签:python,微信,定位
0
投稿

猜你喜欢

  • JDBC连接mysql处理中文时乱码解决办法详解

    2024-01-17 21:35:35
  • SQL Server查询条件IN中能否使用变量的示例详解

    2024-01-15 17:55:55
  • 解决python问题 Traceback (most recent call last)

    2021-10-31 06:17:49
  • 一组常用的弹出窗口用法总结

    2007-10-08 13:04:00
  • python实现mask矩阵示例(根据列表所给元素)

    2022-04-19 19:37:16
  • flask框架路由常用定义方式总结

    2021-04-18 22:12:29
  • 在 Python 中如何将天数添加到日期

    2023-02-09 03:34:30
  • python3写的简单本地文件上传服务器实例

    2023-08-23 02:50:58
  • 利用pytorch实现对CIFAR-10数据集的分类

    2021-11-21 03:09:36
  • Windows下通过DOS命令登录MYSQL的方法

    2024-01-27 13:21:02
  • pyqt5圆形label显示打开的摄像头功能

    2022-09-16 04:10:21
  • 解决bootstrap导航栏navbar在IE8上存在缺陷的方法

    2023-09-03 10:55:07
  • 在MAC OS X上安装MYSQL

    2024-01-28 17:25:46
  • Vue-cli创建项目从单页面到多页面的方法

    2024-05-21 10:17:04
  • Vue2.0/3.0双向数据绑定的实现原理详解

    2024-05-21 10:17:58
  • Python3实现从文件中读取指定行的方法

    2021-01-06 04:18:17
  • python基础教程之常用运算符

    2021-09-07 00:11:47
  • Pandas 数据处理,数据清洗详解

    2022-05-23 16:04:23
  • python矩阵转换为一维数组的实例

    2023-09-13 18:34:10
  • Python+pytorch实现天气识别

    2021-09-23 18:49:13
  • asp之家 网络编程 m.aspxhome.com