2022-01-08 14:58:08 +00:00
|
|
|
import traceback
|
2022-01-20 12:13:03 +00:00
|
|
|
|
2022-01-03 09:13:42 +00:00
|
|
|
import ujson as json
|
|
|
|
|
2022-01-08 14:03:09 +00:00
|
|
|
from config import Config
|
2023-02-05 14:33:33 +00:00
|
|
|
from core.builtins import Url
|
2023-01-12 07:51:03 +00:00
|
|
|
from core.logger import Logger
|
2023-02-05 14:33:33 +00:00
|
|
|
from core.utils.http import get_url
|
2023-04-15 08:18:51 +00:00
|
|
|
from core.utils.i18n import Locale
|
2022-01-03 09:13:42 +00:00
|
|
|
|
2022-01-20 12:13:03 +00:00
|
|
|
|
2023-04-15 08:18:51 +00:00
|
|
|
async def urban(term: str, locale: Locale):
|
2022-01-03 09:13:42 +00:00
|
|
|
'''查询urban dictionary。
|
|
|
|
|
|
|
|
:param term: 需要查询的term。
|
|
|
|
:returns: 查询结果。'''
|
|
|
|
try:
|
|
|
|
url = 'http://api.urbandictionary.com/v0/define?term=' + term
|
2022-01-08 14:03:09 +00:00
|
|
|
webrender = Config('web_render')
|
2022-06-15 00:29:20 +00:00
|
|
|
if not webrender:
|
2023-01-12 07:51:03 +00:00
|
|
|
return ''
|
2023-07-29 12:49:47 +00:00
|
|
|
url = webrender + '/source?url=' + url
|
2022-08-01 15:33:35 +00:00
|
|
|
text = await get_url(url, 200, headers={'accept': '*/*',
|
|
|
|
'accept-encoding': 'gzip, deflate',
|
|
|
|
'accept-language': 'zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7,en-GB;q=0.6',
|
|
|
|
'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Safari/537.36 Edg/96.0.1054.62'})
|
2023-01-12 07:51:03 +00:00
|
|
|
Logger.debug(text)
|
2022-01-03 09:13:42 +00:00
|
|
|
data = json.loads(text)['list']
|
|
|
|
if data == []:
|
2023-04-15 09:28:18 +00:00
|
|
|
return f'[{locale.t("meme.message.urban")}] {locale.t("meme.message.not_found")}'
|
2022-01-03 09:13:42 +00:00
|
|
|
else:
|
|
|
|
count = data.__len__()
|
|
|
|
word = data[0]['word']
|
2022-01-08 14:47:24 +00:00
|
|
|
definition = limit_length(data[0]['definition'])
|
|
|
|
example = limit_length(data[0]['example'])
|
2022-01-03 09:13:42 +00:00
|
|
|
link = data[0]['permalink']
|
2023-04-15 09:28:18 +00:00
|
|
|
return f'[{locale.t("meme.message.urban")}] {locale.t("meme.message.result", result=count)}\n{word}\n{definition}\nExample: {example}\n{str(Url(link))}'
|
2022-01-08 14:58:08 +00:00
|
|
|
except Exception:
|
|
|
|
traceback.print_exc()
|
2023-04-15 09:28:18 +00:00
|
|
|
return f'[{locale.t("meme.message.urban")}] {locale.t("meme.message.error")}'
|
2022-01-08 14:47:24 +00:00
|
|
|
|
|
|
|
|
|
|
|
def limit_length(text, limit=50):
|
2022-01-08 14:58:08 +00:00
|
|
|
new = text
|
|
|
|
length = new.split(' ').__len__()
|
2022-01-08 14:47:24 +00:00
|
|
|
if length > limit:
|
2022-01-08 14:58:08 +00:00
|
|
|
new = ' '.join(new.split(' ')[0:limit]) + '…'
|
|
|
|
return new
|