iPhone上使用Hamster仓输入法配置Bing搜索脚本

🐹仓输入法增加了一个“脚本”功能,可以给这款开源输入法增加自定义的功能。之前一直需要的输入法内搜索的功能,总算可以实现了😄

具体实现的步骤如下:

1.在Hamster输入法的管理界面中,「剪贴板」-> 「脚本」,点击右上角 ... 图标,选择「变量」功能。

然后将Bing搜索的api token配置为一个自定义变量:

在这里我设置的变量名称为 bingToken,如果设置了其他名称,需要在后续的代码中修改

$bingToken 这个变量的名称。

2.进入代码编辑界面:

「剪贴板」-> 「脚本」--> 添加脚本:

// name: Bing搜索.js
// date: 2024-11-07
// author: jw
// desc: 使用 Bing Web Search API 获取搜索结果

// 配置你的 Bing API Key
const BING_API_KEY = $bingToken; // 替换为完整的 API Key

// 搜索查询
const SEARCH_QUERY = $searchText || "AI"; // 提供默认搜索词

// 缓存控制 (针对每个搜索词单独缓存)
const cache = {
    data: {},
    timestamp: {},
    ttl: 5 * 60 * 1000  // 5分钟缓存
};

// 从Bing获取搜索结果
async function getBingResults() {
    try {
        const response = await $http({
            url: `https://api.bing.microsoft.com/v7.0/search?q=${encodeURIComponent(SEARCH_QUERY)}&count=50&mkt=zh-CN&responseFilter=Webpages`,
            method: 'GET',
            header: {
                'Ocp-Apim-Subscription-Key': BING_API_KEY,
                'Accept': 'application/json'
            },
            timeout: 10
        });

        let data = JSON.parse(response.data);
        if (!data?.webPages?.value) {
            $log("无效的 Bing API 响应");
            return [];
        }

        return data.webPages.value
            .filter(item => item.name && item.snippet)
            .map(item => ({
                title: item.name,
                snippet: item.snippet,
                url: item.url
            }));

    } catch (error) {
        $log("Bing API 请求失败: " + error);
        return [];
    }
}

// 结果去重
function removeDuplicates(results) {
    const seen = new Set();
    return results.filter(result => {
        const normalized = result.title
            .toLowerCase()
            .replace(/[^a-z0-9\u4e00-\u9fa5]/g, '');
        if (seen.has(normalized)) return false;
        seen.add(normalized);
        return true;
    });
}

// 格式化展示内容
function formatResult(result) {
    // 移除URL中的协议部分
    const cleanUrl = result.url.replace(/^https?:\/\//, '');
    // 截取适当长度的URL
    const shortUrl = cleanUrl.length > 40 ? cleanUrl.substring(0, 40) + '...' : cleanUrl;
    
    // 返回格式化的结果
    return `${result.title}\n${result.snippet}\n${shortUrl}\n`;
}

// 主函数
async function output() {
    if (!$searchText) {
        return ['请输入搜索关键词'];
    }

    // 检查缓存
    const cacheKey = SEARCH_QUERY;
    if (
        cache.data[cacheKey] && 
        cache.timestamp[cacheKey] && 
        Date.now() - cache.timestamp[cacheKey] < cache.ttl
    ) {
        return cache.data[cacheKey];
    }

    try {
        // 获取搜索结果
        const results = await getBingResults();
        
        if (results.length === 0) {
            return ['暂无相关结果'];
        }
        
        // 去重
        const uniqueResults = removeDuplicates(results);
        
        // 格式化输出(只取前10条)
        const formattedResults = uniqueResults
            .slice(0, 10)
            .map(formatResult);
        
        // 更新缓存
        cache.data[cacheKey] = formattedResults;
        cache.timestamp[cacheKey] = Date.now();
        
        return formattedResults;
        
    } catch (error) {
        $log('获取搜索结果失败: ' + error);
        return ['获取搜索结果失败,请稍后再试'];
    }
}

保存后,可以点击下方的「运行」进行测试,应该能够看到输出搜索的结果:

* Bing的Web搜索API需要注册一个Azure的账号来申请:

具体链接如下,需要的读者可以试着注册一个:

Web Search API | Microsoft Bing

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值