main
1#!/usr/bin/env python
2# -*- coding: utf-8 -*-
3
4from glom import glom
5from loguru import logger
6from pyrogram.client import Client
7from pyrogram.types import Message
8
9from config import GOOGLE_SEARCH_GL, NUM_GOOGLE_SEARCH_RESULTS, PREFIX, PROXY, TOKEN
10from messages.parser import parse_msg
11from messages.sender import send2tg
12from messages.utils import equal_prefix, startswith_prefix
13from networking import hx_req
14from utils import number_to_emoji
15
16HELP = f"""🔍**搜索Google**
17`{PREFIX.SEARCH_GOOGLE}` + 关键词
18"""
19
20
21async def search_google(client: Client, message: Message, **kwargs):
22 """Search Google."""
23 # send docs if message == "/ytb", without reply
24 if equal_prefix(message.text, prefix=[PREFIX.SEARCH_GOOGLE]) and not message.reply_to_message:
25 await send2tg(client, message, texts=HELP, **kwargs)
26 return
27
28 info = parse_msg(message, silent=True)
29 if not startswith_prefix(info["text"], prefix=[PREFIX.SEARCH_GOOGLE]):
30 return
31 query = info["text"].removeprefix(PREFIX.SEARCH_GOOGLE).strip()
32 if not query:
33 return
34
35 res = await query_google(query)
36 if not res:
37 await send2tg(client, message, texts="❌查询Google失败", **kwargs)
38 return
39 msg = ""
40 for idx, item in enumerate(res):
41 msg += f"{number_to_emoji(idx + 1)}[{item['title']}]({item['link']})\n"
42 msg += f"{item['snippet']}\n\n"
43 await send2tg(client, message, texts=msg, **kwargs)
44
45
46async def query_google(query: str) -> list[dict]:
47 if not (TOKEN.GOOGLE_SEARCH_API_KEY and TOKEN.GOOGLE_SEARCH_CX):
48 return []
49 try:
50 api = "https://www.googleapis.com/customsearch/v1"
51 params = {
52 "key": TOKEN.GOOGLE_SEARCH_API_KEY,
53 "cx": TOKEN.GOOGLE_SEARCH_CX,
54 "q": query,
55 "num": min(NUM_GOOGLE_SEARCH_RESULTS, 10),
56 "safe": "off",
57 "gl": GOOGLE_SEARCH_GL,
58 }
59 response = await hx_req(api, proxy=PROXY.GOOGLE, params=params, check_keys=["items"], max_retry=0)
60 return glom(response, "items", default=[]) or []
61 except Exception as e:
62 logger.error(e)
63 return []