好友
阅读权限20
听众
最后登录1970-1-1
|
本帖最后由 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
已和谐了,忙于工作没时间更新,不过最近用夸克浏览器的搜题还挺好用的,有兴趣的可以去尝试搜一下题
|
免费评分
-
查看全部评分
|