私はあまりナンセンスを言うつもりはありません、誰もがコードを見るだけです!
# - *- coding:utf-8-*-
# File: ceshitianqi
import urllib2
import json
import time
import datetime
import serial
import random
import os
import sys
APIKEY ='ZPdLyl***=' #APIKEYに変更します
ser=serial.Serial("/dev/ttyUSB2",9600,timeout=1)
def read(key):
ser.write(key)print("output:"+key)
time.sleep(1)
response = ser.readall()print(response)print(type(response))return response
def http_put(key):
val =read(key) #Arduinoデータを取得する
CurTime = datetime.datetime.now()
url='http://api.heclouds.com/devices/**1/datapoints'
# values={'datastreams':[{"id":"temp","datapoints":[{"at":CurTime.isoformat(),"value":val}]}]}print(type(val))if key=="a":
values={'datastreams':[{"id":"humidity","datapoints":[{"at":CurTime.isoformat(),"value":val}]}]}if key=="b":
values={'datastreams':[{"id":"temperature","datapoints":[{"at":CurTime.isoformat(),"value":val}]}]}
jdata = json.dumps(values) #JSON形式とエンコードデータ
# jsonコンテンツを印刷する
print jdata
request = urllib2.Request(url, jdata)
request.add_header('api-key', APIKEY)
request.get_method = lambda:'POST' #HTTPアクセス方法を設定する
request = urllib2.urlopen(request)return request.read()
str =("a","b")while True:for i in str:
f =open('1.txt')
e = f.read()if e =="1\n":
ser.write("c")if e =="0\n":
ser.write("d")
f.close()
resp =http_put(i)
time.sleep(2)
ポーリング1.txt
1 ライトアップ
0 次に閉じます
補足知識:パイソンノート(ポーリング、ロングポーリング)
1つ、ポーリング
views.py
from flask import Flask,render_template,request,jsonify
app =Flask(__name__)
USERS ={'1':{'name':'ベイブ','count':1},'2':{'name':'小さな北東','count':0},'3':{'name':'彼はWeiming','count':0},}
@ app.route('/user/list')
def user_list():import time
returnrender_template('user_list.html',users=USERS)
@ app.route('/vote',methods=['POST'])
def vote():
uid = request.form.get('uid')
USERS[uid]['count']+=1return"成功した投票"
@ app.route('/get/vote',methods=['GET'])
def get_vote():returnjsonify(USERS)if __name__ =='__main__':
app.run(threaded=True)
html
<! DOCTYPE html
< html lang="zh-CN"<head
< meta charset="UTF-8"<title Title</title
< meta name="viewport" content="width=device-width, initial-scale=1"<style
li{
cursor: pointer;}</style
< /head
< body
< ul id="userList"{%for key,val in users.items()%}<li uid="{{key}}"{{val.name}}({{val.count}})</li
{ % endfor %}</ul
< script src="https://cdn.bootcss.com/jquery/3.3.0/jquery.min.js"</script
< script
$(function(){$('#userList').on('dblclick','li',function(){var uid =$(this).attr('uid');
$.ajax({
url:'/vote',
type:'POST',
data:{uid:uid},
success:function(arg){
console.log(arg);}})});});/*
投票情報を取得する
* /functionget_vote(){
$.ajax({
url:'/get/vote',
type:"GET",
dataType:'JSON',
success:function(arg){$('#userList').empty();
$.each(arg,function(k,v){var li = document.createElement('li');
li.setAttribute('uid',k);
li.innerText = v.name +"("+ v.count +')';$('#userList').append(li);})}})}setInterval(get_vote,3000);</script
< /body
< /html
2.長いポーリング
views.py
from flask import Flask,render_template,request,jsonify,session
import uuid
import queue
app =Flask(__name__)
app.secret_key ='asdfasdfasd'
USERS ={'1':{'name':'ベイブ','count':1},'2':{'name':'小さな北東','count':0},'3':{'name':'彼はWeiming','count':0},}
QUEQUE_DICT ={}
@ app.route('/user/list')
def user_list():
user_uuid =str(uuid.uuid4())
QUEQUE_DICT[user_uuid]= queue.Queue()
session['current_user_uuid']= user_uuid
returnrender_template('user_list.html',users=USERS)
@ app.route('/vote',methods=['POST'])
def vote():
uid = request.form.get('uid')
USERS[uid]['count']+=1for q in QUEQUE_DICT.values():
q.put(USERS)return"成功した投票"
@ app.route('/get/vote',methods=['GET'])
def get_vote():
user_uuid = session['current_user_uuid']
q = QUEQUE_DICT[user_uuid]
ret ={'status':True,'data':None}try:
users = q.get(timeout=5)
ret['data']= users
except queue.Empty:
ret['status']= False
returnjsonify(ret)if __name__ =='__main__':
app.run(threaded=True)
html
<! DOCTYPE html
< html lang="zh-CN"<head
< meta charset="UTF-8"<title Title</title
< meta name="viewport" content="width=device-width, initial-scale=1"<style
li{
cursor: pointer;}</style
< /head
< body
< ul id="userList"{%for key,val in users.items()%}<li uid="{{key}}"{{val.name}}({{val.count}})</li
{ % endfor %}</ul
< script src="https://cdn.bootcss.com/jquery/3.3.0/jquery.min.js"</script
< script
$(function(){$('#userList').on('click','li',function(){var uid =$(this).attr('uid');
$.ajax({
url:'/vote',
type:'POST',
data:{uid:uid},
success:function(arg){
console.log(arg);}})});get_vote();});/*
投票情報を取得する
* /functionget_vote(){
$.ajax({
url:'/get/vote',
type:"GET",
dataType:'JSON',
success:function(arg){if(arg.status){$('#userList').empty();
$.each(arg.data,function(k,v){var li = document.createElement('li');
li.setAttribute('uid',k);
li.innerText = v.name +"("+ v.count +')';$('#userList').append(li);})}get_vote();}})}</script
< /body
< /html
上記のPythonポーリングメカニズム制御の例は、エディターによって共有されるすべてのコンテンツです。参照を提供したいと思います。