早就想写一个微信墙了,毕竟这玩意儿很好用嘛。

一直计划计划计划了一个学期,结果一事无成。有一次跟廖总聊天时候还说,赶紧积累点东西吧,大三了,再不做点什么就真的一事无成一无所有毕业以后废人一个。

写一个微信墙倒也不是什么大事。但好歹做点什么吧。

思路

动手写代码之前当然要先理清思路。

第一个思路:其实没做过任何微信公众平台的功能开发,基于自己简单的了解,最初的想法是将接收消息接口给接上。大概是以前用过的一个免费微信墙的模式,接收特定消息内容,进入微信墙模式。接收之后的所有信息显示到墙上,直到输入特定退出消息内容。

好像这么做是比较正常的。但是缺点是,把消息全部导到自己的数据库之后,自己就得做完完整的一套工具来完成微信正常的其他功能(是这样吧?我也没确认过……)。工作量太大了。事实上并不需要什么自己写的工具去代替微信本身的后台,它的功能很好用,而且在越来越好用。

恰好廖总(又是廖总=。=)在另外一次聊天中提到:我们可不可以写一个可以很轻易复用的东西?不要那么多功能,就是一个网页,有输入框,你进来就可以输入内容,然后给你显示在墙上。于是顺着这个思路想下去,最后产生了第二个思路。

第二个思路:用微信公众号的网页服务,给网页授权获取用户基本信息,将基本信息存入数据库,并设定cookie,让授权成功的用户获得发消息的权限。用户提交表单,微信墙页面用ajax异步更新数据,将最新的用户消息显示在墙上。这样突然就感觉好很多,只需要在公众号后台设置一个授权回调页面域名,以及将AppIDAppSecret作为参数修改入网站源码中,然后便可以随便复用了。

那么最终确定的思路就是思路二了。

结构

思路理了之后,需要大概列一下要做的事情。

决定还是用 Python + Tornado + MongoDB 来写。已经迷上了非关系型数据库。

Handlers:MainHandler/微信墙页面-渲染微信墙页面AuthHandler/获取授权信息-接受用户授权参数 code-使用 code 换取 access_token(解析json数据)-使用 access_token 获取用户信息-将用户信息保存到数据库-set_cookieFormHandler/发送消息用表单-渲染发送消息表单-接受表单数据,并存入数据库ApiHandler/微信墙消息数据接口-以json数据格式输出微信墙页面请求的数据Templates:index.html微信墙页面-未授权用户-显示数据库内容-即时更新并显示最新内容-从服务器获取json数据-解析json数据-格式化消息并添加至消息列表中-授权用户-包括未授权用户功能-发送消息(此处的方案是在底部增加一个内联框架,专门用于表单提交,同时不干扰其他内容)form.html表单页面-将表单提交给FormHandlerapi.html数据接口页面

这篇记录就不写得那么详细了,我把我觉得可能值得记录分享一下的东西总结总结。

1.getJSON()从服务器获取json数据

<script type="text/javascript">
var len=0;//已获取的消息的总数
var cur=0;//当前位置
var data=new Array();//用于存放获取的消息
var lastid=0;//最近获取的消息的idfunction messageAdd(){//新增消息函数if(cur==len){messageData();return false;}var str='<div class=\"event\" id=\"event-'+data[cur][0]+'\" onclick=\"viewOne('+cur+',this);\" style=\"display:none\"><div class=\"label\"><img src=\"'+data[cur][1]+'\"><label>'+data[cur][2]+'</label></div><div class=\"content\"><div class=\"summary\">'+data[cur][3]+'</div></div></div>';//格式化消息$("#list").prepend(str);//将消息增加到列表中$("#event-"+data[cur][0]).slideDown();//调用jquery函数,显示新消息cur++;messageData();
}
function messageData(){var url='/api';//设置数据接口地址$.getJSON(url,{lastid:lastid},function(d) {//此处通过get方法传递参数lastid获取最新数据if(d['ret']==1){//当获取到数据$.each(d['data'], function(i,v){data.push(new Array(v['id'],v['avatar'],v['nickname'],v['content']));//将获取的json数据添加入data数组lastid=v['id'];len++;});}else{window.setTimeout('messageData();', 2000);//等待2000毫秒后重新执行该函数} });
}
window.onload=function(){setInterval(messageAdd,500);//每隔500毫秒执行一次
}
</script>

此处代码可复用于”js获取json数据“,”评论即时更新“

2.异步请求获取信息

class AuthHandler(tornado.web.RequestHandler):@tornado.web.asynchronous//记得加上这一句def get(self):http = tornado.httpclient.AsyncHTTPClient()http.fetch("http://127.0.0.1:8002/api?lastid=0",callback=self.on_response)//fetch(参数一,参数二),参数一为获取页面的地址,参数二为回调函数def on_response(self, response):import jsonif response.error:raise tornado.web.HTTPError(500)result = json.loads(response.body)self.write(result["data"][0]["content"])self.finish()

这是使用 Tornado 内置的异步请求 HTTP 客户端来获取数据的例子。

经测试,数据获取功能正常,json数据解析正常。可复用。

3.转化并输出json数据

import json //引入json包
if response.error://当发生错误时,请求出现错误提示500raise tornado.web.HTTPError(500)
result = json.loads(response.body)
self.write(result["data"][0]["content"])
json.loads(json数据):将数据从json类型向python原始类型转化。

不需要进行特殊处理的话,没必要对json数据做“解析”。

转化好的数据可以直接通过下标进行操作,例如:

result = [[1, 2, 3], 123, u'abc', {u'key2': [4, 5, 6], u'key1': [1, 2, 3]}]

我们要输出key2列表中的第二个元素5:result[3][“key2″][1]。(要记得下标从0开始)

先写到这里,待续吧。

睡觉了。

早上修改了些许内容。就等拿一个公众账号测试了=。=。现在去把请求构造好,@杨老板求给力。

我在写一个微信墙(一)相关推荐

  1. 手把手教你写一个微信小程序日历组件

    今天我们一起写一个微信小程序日历组件 微信小程序日历组件 github.com/749264345/w- 好,我们先看一下要实现的模样,如下图 由以上截图我们可以看到 1.日历可以通过按钮[切换展示效 ...

  2. 动手写一个微信聊天页,有文字,有语音,有图片

    今天给大家分享用网页实现移动端微信聊天记录的功能,效果图如下: 页面布局中,聊天框使用flex布局,聊天气泡通过伪元素实现(前面文章有记录如何实现一个微信聊天气泡框) 语音播放时写的一个css动画,通 ...

  3. 微信小程序+PHP 从零写一个微信小程序

    微信小程序是越来越火,参与其中的开发者也越来越多,但是很多朋友都是只懂小程序前端开发,或者是只懂 PHP 开发,本 Chat 就是想让这部分人能够自己一个人把前后端串起来,做一个专属自己的微信小程序. ...

  4. 写一个微信小程序,加拿大移民分数计算器

    如果你想写一个加拿大移民分数计算器的微信小程序,你需要遵循以下步骤: 首先,你需要了解如何使用微信小程序开发工具,包括如何创建小程序项目.如何编写代码和如何调试小程序. 然后,你需要了解加拿大移民分数 ...

  5. python wx包_今天玩点啥:python真香系列之利用wxpy包写一个微信消息自动回复插件...

    阅读本文假设你本地已经安装了Python3基础环境. 安装wxpy模块: pip3 install wxpy 添加以下代码即可实现扫码登录 # 导入模块 from wxpy import * # 初始 ...

  6. 教你如何自己写一个微信小游戏「跳一跳」外挂

    [回复"1024",送你一个特别推送] 其实也不能说算是外挂吧,算是个游戏小助手吧,毕竟不能抓包,也不能直接修改分数(据说之前可以直接抓包修改分数,不过这漏洞已经被微信官方修复), ...

  7. 用Python写一个微信防撤回神器

    手写辛苦,希望给赞 #!/usr/local/bin/python3 # coding=utf-8import os import re import time import _thread impo ...

  8. 帮我用js写一个微信聊天那种气泡效果

    当然可以! 下面是一个使用 JavaScript 实现微信聊天气泡效果的示例代码: .bubble {position: relative;background: #f1f1f1;border-rad ...

  9. 写一个微信小程序的代码

    微信小程序是使用小程序框架开发的,主要使用 WXML 和 WXSS 两种语言构建用户界面,使用 JavaScript 来编写逻辑. 以下是一个简单的微信小程序示例代码: <!-- index.w ...

最新文章

  1. 时代亿信 认证墙-SID强身份认证产品
  2. 重构-改善既有代码的设计读书笔记
  3. DataGridView删除、修改方法封装
  4. Qt编译过程中出现的问题
  5. postman 400 bad request 原因_盐城400电话
  6. LeetCode每日一题 143. 重排链表
  7. Codeforces Round #624 (Div. 3) E. Construct the Binary Tree 思维 + 构造
  8. 使Netty 4中的HTTP内容压缩工作
  9. 2021新交规超速处罚规定
  10. [渝粤教育] 三江学院 软件测试 参考 资料
  11. 1.读入待分析的字符串 2.分解提取单词 3.计数字典 4.排除语法型词汇 5.排序 6.输出TOP(20)...
  12. 计算机网络双向传输,计算机网络:传输层(2)
  13. ES6 中的 Symbol 是什么?
  14. 使用 jsfl 发布flash IDE 插件
  15. python下载百度文库文档
  16. java jxls_java使用jxls导出Excel
  17. 项目经理应该具备的技能和素质是什么?
  18. golang GC机制
  19. C语言进阶——指针笔试题图解
  20. 坏男人是丈夫的最佳人选

热门文章

  1. 小学计算机应用ppt,人教版小学信息技术教材.PPT.pdf
  2. mysql 主键删除数据库_【数据库】mysql如何删除主键?
  3. 前端页面业务中的埋点统计数据
  4. qlaber 中放置图片_「装配式施工技术」第34期 独立支撑架在使用过程中忽视的那些事...
  5. 【DIY】简单又便宜的方法自制温湿度计,arduino温湿度计
  6. Minecraft Fabric模组开发 (四) 添加物品合成表
  7. QQ2008 自动关闭问题
  8. wireshark开启校验和
  9. iOS音频播放 (七):播放iPod Library中的歌曲
  10. python文件按时间排序_python按修改时间顺序排列文件的实例代码