easybib / app.py
yellowtown's picture
🎉 init(v0.2):
d13100b
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import requests
import gradio as gr
def get_bibtext_from_title(title, retry_times=100):
# URL编码查询参数
encoded_query = requests.utils.quote(title)
print(f'query: {encoded_query}')
# 假设API的endpoint为'https://api.example.com/search'
url = f"https://api.semanticscholar.org/graph/v1/paper/search?query={encoded_query}&offset=0&limit=3&fields=title,citationStyles"
for i in range(retry_times):
# 发送GET请求
response = requests.get(url)
# 检查请求是否成功
if response.status_code == 200:
# 如果请求成功,返回JSON格式的数据
try:
data = response.json()['data']
bibtex = data[0]['citationStyles']['bibtex']
return bibtex
except:
msg = f"Failed to parse response: {response.json()}"
return msg
elif response.status_code == 429:
print(f'retry {i} times')
continue
else:
# 如果请求失败,打印错误信息
msg = "Failed to retrieve data: {response.json()}"
return msg
def process_text(input_text):
titles = input_text.split('\n')
# 在这个例子中,我们仅仅将输入的文本原样返回。
# 你可以在这个函数中加入任何你想要的文本处理逻辑。
output = []
for title in titles:
if not title:
continue
bibtex = get_bibtext_from_title(title)
print(bibtex)
if bibtex is not None:
output.append(bibtex)
else:
output.append("Failed to process: " + title + '\n')
return '\n'.join(output)
# 创建Gradio界面
iface = gr.Interface(
fn=process_text, # 要调用的处理函数
inputs=gr.Textbox(lines=10, placeholder="请在此输入论文标题..."), # 输入组件:文本框,设置多行输入
outputs=gr.Textbox(lines=20, placeholder="输出BibTex信息将会在此显示..."), # 输出组件:文本框,设置多行输出
)
if __name__ == "__main__":
# 启动界面
iface.launch()