def test_get_gzh_by_search(self): file_name = os.path.join(fake_data_path, 'search-gaokao-gzh.html') with io.open(file_name, encoding='utf-8') as f: search_gaokao_gzh = f.read() gzh_list = WechatSogouStructuring.get_gzh_by_search(search_gaokao_gzh) names = [] wechat_ids = [] post_perms = [] introductions = [] authentications = [] open_ids = [] assert_equal(10, len(gzh_list)) for gzh in gzh_list: names.append(gzh['wechat_name']) wechat_ids.append(gzh['wechat_id']) post_perms.append(gzh['post_perm']) introductions.append(gzh['introduction']) authentications.append(gzh['authentication']) open_ids.append(gzh['open_id']) assert_in('mp.weixin.qq.com/profile?src=3×tamp=', gzh['profile_url']) assert_in('mp.weixin.qq.com/rr?src=', gzh['qrcode']) assert_in('img01.sogoucdn.com/', gzh['headimage']) assert_equal([ 'oIWsFt6fv4FH0OBNCyoonNoAp2OM', 'oIWsFtzwnqHRVPsRY-eEzPo344jQ', 'oIWsFt_PvlvuqFxQFPbOO26_GQh4', 'oIWsFtzpOSqygkGiyzj1vVGi2zM4', 'oIWsFt-lCZYAtfVXRykjgsWZMoJA', 'oIWsFtzJBFA82fTPb7xU-gkPiyqA', 'oIWsFt_wgF0dHou131y47qIMcuM0', 'oIWsFt67sO47_fHfOFQC0rBHhxcY', 'oIWsFt5Kltl1uXsy8fhj96eIVen8', 'oIWsFt-2JeqhMEEVQuFw_geRzmbY' ], open_ids) assert_equal([ '山东高考指南', '高考家长圈', '河南高考指南', '高考360', '云天高考', '腾讯高考', '高考快讯', '专业中高考教育', '晟嘉高考', '新东方在线高考辅导' ], names) assert_equal([ u'sdgkzn', u'sinagkjzq', u'hngaokao', u'sctvgaokao360', u'yuntiangaokao', u'qq_gaokao', u'gkkx678', u'gh_591a43050b5f', u'tjsjgk', u'koogaokao' ], wechat_ids) assert_equal([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1], post_perms) assert_equal([ '这里是山东最权威最专业的高考交流平台,由山东商报徐玉芹教育工作室独家运作.本平台与山东商报高考交流群互为依托,为山东考生和家长提供最及时、最准确的高考政策及信息解读,以及一流的填报志愿咨询服务.合作...', '定期推送高三家长关注的优秀家长经验交流、志愿填报技巧、考生心理辅导方法、考前营养搭配等诸多优质内容;为家长搭建交流互动平台.', '发布最新高考政策,分享高效学习方法,制定高考应试策略.考点总结政策分析名校介绍高考大纲试卷解析艺考文化课,权威专业的高考资讯一手掌握.', '360天,360度,用心伴您升学路.四川电视台科教频道每晚7:45播出.', '高端教育品牌,高分考生的加油站,重点中学的合作伙伴.开阔考生视野、提升认知,在以“研究”为主线的基础上,将考生培养成一个全面型的人才.课程特色,全科协调、单科精讲.云天高考一直深受高分考生和家长的追...', '腾讯高考频道是中国最具互动性高考门户网站.主要为中国高考生及家长提供有价值的资讯和辅导.内容包括:新闻、评论、视频、各科辅导、志愿填报、家长指南等多方面.', '高考快讯平台专为考生家长提供最新高考资讯、志愿填报指南、名校排行榜、状元经验、学习方法、高分秘籍等等,我们的努力将伴随着您圆大学梦,欢迎关注阅读!', '旨在做最专业的中高考教育交流平台,第一时间传递权威的中高考资讯,为孩子的未来保驾护航!', '关于天津高考,你关注我们一个就够啦!', '提供高考资讯、高考院校库、在线答疑、政策解读及试题发布.' ], introductions) assert_equal([ '《山东商报》社', '新浪网技术(中国)有限公司', '郑州新东方培训学校', '四川省电化教育馆(四川教育电视台)', '北京云天共业教育科技有限公司', '深圳市腾讯计算机系统有限公司', '广州卓越教育培训中心', '大连沙河口科苑文化培训学校', '天津市南开区晟嘉培训中心', '北京新东方迅程网络科技股份有限公司' ], authentications)
def search_gzh(self, keyword, page=1, unlock_callback=None, identify_image_callback=None, decode_url=True): """搜索 公众号 对于出现验证码的情况,可以由使用者自己提供: 1、函数 unlock_callback ,这个函数 handle 出现验证码到解决的整个流程 2、也可以 只提供函数 identify_image_callback,这个函数输入验证码二进制数据,输出验证码文字,剩下的由 wechatsogou 包来解决 注意: 函数 unlock_callback 和 identify_image_callback 只需要提供一个,如果都提供了,那么 identify_image_callback 不起作用 Parameters ---------- keyword : str or unicode 搜索文字 page : int, optional 页数 the default is 1 unlock_callback : callable 处理出现验证码页面的函数,参见 unlock_callback_example identify_image_callback : callable 处理验证码函数,输入验证码二进制数据,输出文字,参见 identify_image_callback_example decode_url : bool 是否解析 url Returns ------- list[dict] { 'open_id': '', # 微信号唯一ID 'profile_url': '', # 最近10条群发页链接 'headimage': '', # 头像 'wechat_name': '', # 名称 'wechat_id': '', # 微信id 'post_perm': '', # 最近一月群发数 'qrcode': '', # 二维码 'introduction': '', # 介绍 'authentication': '' # 认证 } Raises ------ WechatSogouRequestsException requests error """ url = WechatSogouRequest.gen_search_gzh_url(keyword, page) session = requests.session() resp = self.__get_by_unlock(url, unlock_platform=self.__unlock_sogou, unlock_callback=unlock_callback, identify_image_callback=identify_image_callback, session=session) gzh_list = WechatSogouStructuring.get_gzh_by_search(resp.text) for i in gzh_list: if decode_url: i['profile_url'] = self.__format_url(i['profile_url'], url, resp.text, unlock_callback=unlock_callback, identify_image_callback=identify_image_callback, session=session) yield i
def test_get_gzh_by_search(self): file_name = os.path.join(fake_data_path, 'search-gaokao-gzh.html') with io.open(file_name, encoding='utf-8') as f: search_gaokao_gzh = f.read() gzh_list = WechatSogouStructuring.get_gzh_by_search(search_gaokao_gzh) names = [] wechat_ids = [] post_perms = [] introductions = [] authentications = [] open_ids = [] assert_equal(10, len(gzh_list)) for gzh in gzh_list: names.append(gzh['wechat_name']) wechat_ids.append(gzh['wechat_id']) post_perms.append(gzh['post_perm']) introductions.append(gzh['introduction']) authentications.append(gzh['authentication']) open_ids.append(gzh['open_id']) assert_in('mp.weixin.qq.com/profile?src=3×tamp=', gzh['profile_url']) assert_in('mp.weixin.qq.com/rr?src=', gzh['qrcode']) assert_in('img01.sogoucdn.com/', gzh['headimage']) assert_equal(['oIWsFt6fv4FH0OBNCyoonNoAp2OM', 'oIWsFtzwnqHRVPsRY-eEzPo344jQ', 'oIWsFt_PvlvuqFxQFPbOO26_GQh4', 'oIWsFtzpOSqygkGiyzj1vVGi2zM4', 'oIWsFt-lCZYAtfVXRykjgsWZMoJA', 'oIWsFtzJBFA82fTPb7xU-gkPiyqA', 'oIWsFt_wgF0dHou131y47qIMcuM0', 'oIWsFt67sO47_fHfOFQC0rBHhxcY', 'oIWsFt5Kltl1uXsy8fhj96eIVen8', 'oIWsFt-2JeqhMEEVQuFw_geRzmbY'], open_ids) assert_equal(['山东高考指南', '高考家长圈', '河南高考指南', '高考360', '云天高考', '腾讯高考', '高考快讯', '专业中高考教育', '晟嘉高考', '新东方在线高考辅导'], names) assert_equal([u'sdgkzn', u'sinagkjzq', u'hngaokao', u'sctvgaokao360', u'yuntiangaokao', u'qq_gaokao', u'gkkx678', u'gh_591a43050b5f', u'tjsjgk', u'koogaokao'], wechat_ids) assert_equal([-1, -1, -1, -1, -1, -1, -1, -1, -1, -1], post_perms) assert_equal( ['这里是山东最权威最专业的高考交流平台,由山东商报徐玉芹教育工作室独家运作.本平台与山东商报高考交流群互为依托,为山东考生和家长提供最及时、最准确的高考政策及信息解读,以及一流的填报志愿咨询服务.合作...', '定期推送高三家长关注的优秀家长经验交流、志愿填报技巧、考生心理辅导方法、考前营养搭配等诸多优质内容;为家长搭建交流互动平台.', '发布最新高考政策,分享高效学习方法,制定高考应试策略.考点总结政策分析名校介绍高考大纲试卷解析艺考文化课,权威专业的高考资讯一手掌握.', '360天,360度,用心伴您升学路.四川电视台科教频道每晚7:45播出.', '高端教育品牌,高分考生的加油站,重点中学的合作伙伴.开阔考生视野、提升认知,在以“研究”为主线的基础上,将考生培养成一个全面型的人才.课程特色,全科协调、单科精讲.云天高考一直深受高分考生和家长的追...', '腾讯高考频道是中国最具互动性高考门户网站.主要为中国高考生及家长提供有价值的资讯和辅导.内容包括:新闻、评论、视频、各科辅导、志愿填报、家长指南等多方面.', '高考快讯平台专为考生家长提供最新高考资讯、志愿填报指南、名校排行榜、状元经验、学习方法、高分秘籍等等,我们的努力将伴随着您圆大学梦,欢迎关注阅读!', '旨在做最专业的中高考教育交流平台,第一时间传递权威的中高考资讯,为孩子的未来保驾护航!', '关于天津高考,你关注我们一个就够啦!', '提供高考资讯、高考院校库、在线答疑、政策解读及试题发布.'], introductions) assert_equal(['《山东商报》社', '新浪网技术(中国)有限公司', '郑州新东方培训学校', '四川省电化教育馆(四川教育电视台)', '北京云天共业教育科技有限公司', '深圳市腾讯计算机系统有限公司', '广州卓越教育培训中心', '大连沙河口科苑文化培训学校', '天津市南开区晟嘉培训中心', '北京新东方迅程网络科技股份有限公司'], authentications)
def search_gzh(self, keyword, page=1, deblocking_callback=None, identify_image_callback=None): """搜索 公众号 对于出现验证码的情况,可以由使用者自己提供: 1、函数 deblocking_callback ,这个函数 handle 出现验证码到解决的整个流程 2、也可以 只提供函数 identify_image_callback,这个函数输入验证码二进制数据,输出验证码文字,剩下的由 wechatsogou 包来解决 注意: 函数 deblocking_callback 和 identify_image_callback 只需要提供一个,如果都提供了,那么 identify_image_callback 不起作用 Parameters ---------- keyword : str or unicode 搜索文字 page : int, optional 页数 the default is 1 deblocking_callback : callable 处理出现验证码页面的函数,参见 deblocking_callback_example identify_image_callback : callable 处理验证码函数,输入验证码二进制数据,输出文字,参见 identify_image_callback_example Returns ------- list[dict] { 'url': '', 'img': '', 'name': '', 'wechat_id': '', 'post_perm': '', 'qrcode': '', 'introduction': '', 'authentication': '' } Raises ------ WechatSogouRequestsException requests error """ req = requests.session() url = WechatSogouRequest.gen_search_gzh_url(keyword, page) resp = WechatSogouRequest.get(url, req=req, headers=self.__set_cookie()) if not resp.ok: raise WechatSogouRequestsException('WechatSogouAPI search_gzh', resp) if 'antispider' in resp.url: self.__deblocking_search(url, resp, req, deblocking_callback, identify_image_callback) resp = WechatSogouRequest.get( url, req=req, headers=self.__set_cookie()) # req=req return WechatSogouStructuring.get_gzh_by_search(resp.text)