#!/usr/bin/env python # -*- coding: utf-8 -*- import sys import os import urllib import traceback import json import logging import types import re import csv logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s', datefmt='%a, %d %b %Y %H:%M:%S', filename='check.log', filemode='w+') logger = logging.getLogger(__name__) def load_url(url_ifn): list_url = [] with open(url_ifn) as url_file: for line in url_file: line = unicode(line.strip(), "utf-8", "ignore") list_url.append(line) return list_url def curl_url(url): content = u'' try: status = urllib.urlopen(url) if status.getcode() == 200: content = status.read() content = unicode(content.strip(), 'utf-8', 'ignore') else: logger.error('fetch error [%s]' % url) except: logger.error('fetch error %s' % traceback.format_exc()) return content def check_dict(dict_old, dict_new, url, ofh): global global_check_res set_old = set(dict_old.keys()) set_new = set(dict_new.keys()) set_same = set_old & set_new set_only_old = set_old - set_same set_only_new = set_new - set_same ofh.write("only_old:[%s] only_new:[%s]\n same:[%s]" % (",".join(set_only_old), ",".join(set_only_new), ",".join(set_same))) global_check_res = False def check_segmentlist(seg_old, seg_new, url, ofh, from_msg): global global_check_res str_old = '->'.join([item['busid'] for item in seg_old if 'busid' in item]) str_new = '->'.join([item['busid'] for item in seg_new if 'busid' in item]) if str_old != str_new: ofh.write("[%s] segment_list old:[%s] new[%s]\n" % (from_msg, str_old, str_new)) global_check_res = False return False else: return True def check_json(old_obj, new_obj, url, ofh, from_msg): global global_check_res if type(old_obj) != type(new_obj): global_check_res = False return False obj_type = type(old_obj) if obj_type == types.DictType: set_delete = set(["code", "version", "timestamp"]) for key in old_obj.keys(): if key in set_delete: continue if key == "color": old_obj[key] = old_obj[key].lower() new_obj[key] = new_obj[key].lower() if key not in new_obj: ofh.write("[%s]\t[%s]new not exist\n" % (from_msg, key)) global_check_res = False continue if key == "segmentlist": if not check_segmentlist(old_obj[key], new_obj[key], url, ofh, "%s->%s" % (from_msg, key)): continue if check_json(old_obj[key], new_obj[key], url, ofh, "%s->%s" % (from_msg, key)): continue else: ofh.write("[%s]\t[%s]\n" % (from_msg, key)) global_check_res = False for key in new_obj.keys(): if key not in old_obj: ofh.write("[%s]\t[%s]old not exist\n" % (from_msg, key)) global_check_res = False elif obj_type == types.ListType: if len(old_obj) != len(new_obj): ofh.write("[%s]\tarray len not equals old[%d] new[%d]\n" % (from_msg, len(old_obj), len(new_obj))) global_check_res = False for i in range(min(len(old_obj), len(new_obj))): if check_json(old_obj[i], new_obj[i], url, ofh, "%s->at[%s]" % (from_msg, i)): continue else: ofh.write("[%s]\tarray at [%s] \n" % (from_msg, i)) global_check_res = False else: if old_obj == new_obj: return True else: try: ofh.write("[%s]\t old:[%s] new:[%s]\n" % (from_msg, str(old_obj).encode("utf-8"), str(new_obj).encode("utf-8"))) global_check_res = False except: ofh.write("[%s] value not equal\n" % (from_msg)) global_check_res = False return False return True def main(url_ifn, check_ofn, old_url_prefix, new_url_prefix): global global_check_res list_url = load_url(url_ifn) print "load url line %d" % len(list_url) list_real_url = [] for url in list_url: pars = url.split("?") if len(pars) < 2: print "fail:[%s]" % url continue list_real_url.append(pars[1]) print "load real url line %d" % len(list_real_url) check_ofh = open(check_ofn, "w+") success_count = 0 total_count = 0 for i in range(len(list_real_url)): try: if i%100 == 0: logger.error("curl len[%d]" % i) url = list_real_url[i] old_url = "%s%s" % (old_url_prefix, url) new_url = "%s%s" % (new_url_prefix, url) old_content = curl_url(old_url) new_content = curl_url(new_url) if not old_content or not new_content: logger.error("[%s][content is null]" % url) continue try: old_obj = json.loads(old_content) except: logger.error("[%s] error [json parse error]" % (old_url)) continue try: new_obj = json.loads(new_content) except: logger.error("[%s] error [json parse error]" % (new_url)) continue global_check_res = True total_count += 1 check_ofh.write("%s\n" % old_url) check_ofh.write("%s\n" % new_url) check_json(old_obj, new_obj, url, check_ofh, "parent") if global_check_res: success_count += 1 check_ofh.write("[%s]\t[success]\n" % url) else: writer.writerow([old_url]) except: logger.error("[%s] error [%s]" % (url, traceback.format_exc())) check_ofh.write("---------------------------\n") check_ofh.write("total_count:%d\n" % total_count) check_ofh.write("success_count:%s\n" % success_count) check_ofh.write("fail_count:%s\n" % (total_count - success_count)) check_ofh.close() global_check_res = True if __name__ == '__main__': url_ifn = "" if len(sys.argv) <= 1: sys.exit(1) url_ifn = sys.argv[1] check_ofn = "./check_res.txt" csvfile = file('diff.csv', 'w') writer = csv.writer(csvfile, dialect='excel') old_url_prefix = "http://127.0.0.1:14669/busservice?" new_url_prefix = "http://127.0.0.1:14668/busservice?" main(url_ifn, check_ofn, old_url_prefix, new_url_prefix)
相关推荐
本文将深入探讨如何利用Python来对接新浪、网易、腾讯的实时tick接口,以便获取股票数据。Tick数据是指股票交易中最小的时间单位,包含了每笔交易的详细信息,如价格、数量、买卖方向等。这些接口对于进行高频交易、...
Python调用阿里云SDK接口实现域名解析记录更新与修改是一个重要的任务,特别是在自动化运维和动态DNS配置中。本文将深入探讨这一主题,介绍如何利用Python和阿里云SDK来完成相关操作,以及涉及到的相关技术。 首先...
- 开发工具选择:对比PythonIDLE、Sublime Text 3、PyCharm、Atom等开发工具的特点。 - 错误处理:讲解Python程序常见的缩进错误、引包错误、编码错误,并提供错误分析技巧。 2. Django Web开发: - Django环境...
1.1 Python版本选择:Python2.x与Python3.x的对比和选择,主要因为Python2.x已停止更新,推荐使用Python3.x。 1.2 Python安装:介绍在不同操作系统下Python环境的搭建,包括Windows系统下的安装以及多版本共存的...
在API(应用程序编程接口)开发中,为了确保数据的安全传输,通常会采用签名验证机制。本文将详细探讨Python中API签名验证的相关知识点,以"Python-Api签名验证样例"为例,结合`flask-apiSign-demo-master`这个...
7. **返回结果**:成功调用接口后,服务器会返回一个包含对比结果的JSON对象,可能包括相似度分数、人脸特征向量等信息。开发者需要解析这些数据并根据业务需求进行处理。 8. **安装与配置**:在使用`aip-face`前,...
JSON文件可以作为接口,与其他软件或服务进行集成,比如进行可视化渲染、碰撞检测、性能分析或者Web应用程序的开发。 测试数据如“testXZ.json”、“test.json”和“testwall.json”可能包含不同的Revit模型组件的...
Python-simdjson适用于需要频繁解析大量JSON数据的应用,如数据分析、日志处理、Web服务接口等。在大数据处理、实时流分析等场景中,使用simdjson可以显著降低CPU负载,提高整体系统效率。 **总结** Python-...
在本文中,我们将深入探讨JSON-RPC协议的C语言实现,并对比其与Python的实现方式。 ### JSON-RPC简介 JSON-RPC允许客户端通过HTTP或其他传输协议向服务器发送请求,执行服务器上的方法并接收响应。它支持单个请求/...
书中还对比了不同编程语言中的Interface概念,例如Java的Interface和Python中的Zope.interface。 最后,在第八章中,作者重点讲述了开发Web接口的知识。首先介绍了HTTP协议与JSON格式的基本知识,然后详细解释了Web...
Python的标准库是其强大的组成部分,包含了各种模块和包,涵盖网络通信、操作系统接口、文本处理、数据压缩等。例如,`urllib`用于网络请求,`os`和`sys`用于操作系统交互,`json`用于数据序列化。`[Python标准库...
`simplejson`库提供了一个高效的JSON编码和解码接口,符合ECMAScript (欧洲计算机协会制定的一套标准的脚本语言规范)标准。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时...
4. 调用`match`接口对比人脸。 5. 解析返回的JSON结果,判断相似度,确定是否为同一个人。 在实际应用中,可以根据需求调整相似度阈值,或者处理更多图片进行批量对比。同时,还可以探索其他百度API提供的功能,如...
7. JSON与其他数据格式的对比:例如XML,虽然两者都可以用于数据交换,但JSON通常因其简洁性和高效性而更受青睐。 通过学习"电子-JSON文件读写.zip"中的内容,你可以掌握在电子技术编程中如何有效地处理JSON数据,...
在进行接口自动化测试或类似工作时,正确地发送和接收JSON数据对于确保数据的完整性和可读性至关重要。这也意味着在抓包分析时,我们可以看到与我们预期相匹配的JSON格式数据,而不是损坏的数据。 最后,示例中还...
在这个案例中,可能是通过分析网络请求,找到用于获取QS排名数据的Ajax接口URL,然后使用Python的requests库发送GET或POST请求,以JSON或者其他格式获取数据。 接下来,我们关注Python爬虫代码。Python提供了丰富的...
**三、与 Flask 和 Django 的对比** 相比 Flask,Responder 更加专注于 API 开发,提供更现代的异步支持。而与 Django 相比,Responder 更轻量级,适合快速开发小到中型的 Web 应用。 **四、实际应用与案例** ...
- 在Python中,使用`json`模块进行JSON操作,如`json.loads()`解析JSON字符串,`json.dumps()`序列化对象为JSON字符串。 - 其他语言如Java、C#、PHP等也有相应的库支持JSON的解析和生成。 3. JSON数据解析与序列...