[已和谐]学小易PC版(支持以图搜题)

 佚名文
发布时间:2025-10-15 22:34

本帖最后由 Anekys 于 2020-10-31 21:52 编辑

最早看到学小易接口抓取的帖子时,就萌生了自己弄个PC版的想法
抓取接口帖子链接:https://www.52pojie.cn/thread-1205193-1-1.html
但是后来看到有人先我一步发出来了之后就没发了.
但是看到之前发布的成品都带上了和谐的标题,我就试了一下我的
目前还没有出现账号异常问题
我看了一下那些贴上和谐的源码,大部分都简化了调用接口时发包的消息头
个人感觉可能是因为这个原因导致的账号异常,因为我为了测试接口专门注册了一个账号
但是直到现在都没有出现异常的问题


纯小白一个,写法简单,大佬们勿喷.以图搜题是通过调用百度云的文字识别API实现的
因为自己懒,就没有删除百度云的APIkey等等东西,想用的可以直接用,我平常基本上不会去用它干什么.
最后贴上代码:

[Python] 纯文本查看 复制代码

import requests import os from aip import AipOcr #这里调用了百度云智能大脑的图像识别API,以下三个Key均为调用API需要,可在你自己的百度云管理界面查询到 token="" #申明一个全局变量Token APP_ID='16593668' #你的百度云APP_ID APP_KEY='FhqfbBANUQ9H1Q1pj8tS97QH' #你的百度云Key SECRET_KEY='VtPljGlCiXym52xRmiZCoUNX4Z4dsmWT' #你的百度云Secret_Key(老版本百度云的 Access Key) client=AipOcr(APP_ID,APP_KEY,SECRET_KEY) def getanswer(text,token): #一个简单的post请求获取答案内容 if (token==False): return False headers={ "Host":"app.51xuexiaoyi.com", "token":token, "device":"Auhqehd3s6Ml6mXky_5dV-Uv4zsdXeUYY7wKFktkH1ag", "platform":"android", "app-version": "1.0.6", "t":"1592904062239", "s":"e6a47dea8298225b1e9a9366bead8083", "content-type":"application/json;charset=utf-8", "accept-encoding":"gzip", "user-agent":"okhttp/3.11.0" } url="https://app.51xuexiaoyi.com/api/v1/searchQuestion?keyword="+text # data={"keyword":text} res = requests.post(url,headers=headers) # r=res.text.replace('%u',r'\\u').encode('utf-8').decode('unicode_escape') #如果将返回值以文本形式显示本条语句可将usc2转为ansi编码进而正常显示文本内容 r=res.json() #返回的内容本身就是json if(r['code']==200): #判断获取到的内容状态码是不是200(200代表着成功) #print(type(r['data'])) return r['data'] #若成功则返回获取到的问题和答案(返回的类型是列表) else: return r['msg'] #若失败则返回错误信息 def outanswer(li): if isinstance(li,list): #由于获取成功返回的是列表,所以这里先判断是不是列表进而得知是否成功 for i in li: #若成功,则可通过迭代的方式遍历列表 print(" ") print('问题:') #列表中的每个元素都是一个字典,这里通过格式化输出把字典里需要的内容输出 print(i['q']) print(" ") #输出空行为了看起来更方便 print('答案:') print(i['a']) print(" ") print('*'*50) else: print(li) #若参数不为列表,则返回的是错误信息,所以这里可以打印错误信息 def login(): #调用API获取账号的token username=input("请输入账号:") password=input("请输入密码:") url="https://app.51xuexiaoyi.com/api/v1/login?username="+username+"&password="+password headers={ "Host":"app.51xuexiaoyi.com", "device":"Auhqehd3s6Ml6mXky_5dV-Uv4zsdXeUYY7wKFktkH1ag", "platform":"android", "app-version":"1.0.6", "t":"1593008524987", "s":"53029a76022a2f4a52c11f08a84759c0", "Content-Type":"application/json; charset=utf-8", "Accept-Encoding":"gzip", "User-Agent":"okhttp/3.11.0" } res=requests.post(url,headers=headers).json() if (res['code']==200): f=open('token.txt','w+') f.write(res['data']['api_token']) f.close() print("登陆成功!") return res['data']['api_token'] else: return res['msg'] def OCR(imagename): #参数为图片文件路径,函数的功能为获取图片数据,并通过百度云的OCR文字识别提取出图片中的文字. with open(imagename, 'rb') as fp: image=fp.read() retlist=client.basicGeneral(image) text="" #由于百度云的OCR识别将结果作为一个列表进行返回,所以这里通过for循环将列表迭代为一个文本 for i in retlist['words_result']: text=text+i['words'] return text def Ocrmode(): #OCR文字识别模式,可将题目截图到任意目录,输入图片绝对路径一键进行题目提取及答案获取的操作 while True: print("请输入图片路径:") path=input("ocrmode>>>") if(os.path.exists(path)): #检测图片是否存在,若存在,则进行文字识别并查询答案 text=OCR(path) res=getanswer(text,token) outanswer(res) elif path=="exocr" or "EXOCR": return else: print("图片不存在或没有访问权限!") def main(): print('Welcome to "学不易" 输入"exit"或点"x"即可退出') print('直接输入题目即可获取答案,也可输入"OCR"进入图片识别模式') try: f=open('token.txt','r+') token=f.read() f.close() if(token==""): token=login() except: token=login() while True: questions=input(">>>") if len(questions)>=6: res = getanswer(questions,token) outanswer(res) elif questions == 'exit': break elif questions=="ocr" or "OCR": Ocrmode() else: print("题目必须大于6个字符") exit() if __name__ == "__main__": main()





代码我还贴到了GitHub上,第一次玩儿GitHub,方方面面都是现学现卖的

不过还是要厚着脸皮求个Star的
GitHub地址:https://github.com/Finalweapons/Xuexiaoyi


最后的最后,我也不知道别人的和谐了我再发算不算重复贴.....如果算的话管理员就帮忙删了吧





看到好多人要编译的exe版,就弄了一个上传到抗揍云,方便不玩儿Python的童鞋们使用
蓝蓝的链接:https://niub.lanzouj.com/iJ7uNe9dscb


首页
评论
分享
Top