维基百科 API 在关键字搜索后给出错误页面

问题描述 投票:0回答:1

所以我为我的不和谐机器人创建了一个命令来基于字符串研究维基百科页面:

import requests
import json
import discord
from datetime import datetime, timezone

def getWiki(search):
    data = {
        'action': 'query',
        'format': 'json',
        'formatversion': 2,
        'inprop': 'url',
        'prop': 'extracts|pageimages|revisions|info',
        'exintro': True,
        'explaintext': True,
        'piprop': 'original',
        'rvprop': 'timestamp',
        'generator': 'search',
        'gsrsearch': search
    }
    response = requests.get('https://en.wikipedia.org/w/api.php', params=data)
    jsonData = json.loads(response.text)

    pageData = jsonData['query']['pages'][0]
    title = pageData['title']
    summary = pageData['extract']
    pageUrl = pageData.get('fullurl', '')
    timestamp = pageData['revisions'][0]['timestamp']
    timestamp = datetime.strptime(timestamp, "%Y-%m-%dT%H:%M:%SZ")
    timestamp = timestamp.replace(tzinfo=timezone.utc)
    embed = discord.Embed(description=summary, timestamp= timestamp, colour=0xeeeeee)
    embed.set_author(name=title, url=pageUrl, icon_url='https://upload.wikimedia.org/wikipedia/commons/thumb/a/a7/Wikipedia_logo_v3.svg/2048px-Wikipedia_logo_v3.svg.png')
    embed.set_footer(text='Dernière révision')

    wikiObject = {
        'title': title,
        'summary': summary,
        'embed': embed
    }

    if pageData.get('original'):
        pageImage = pageData['original']
        if pageImage.get('source'):
            imageUrl = pageImage['source']
            embed.set_thumbnail(url=imageUrl)
            wikiObject['imageUrl'] = imageUrl
    
    return wikiObject

然而,结果却很奇怪。例如,当搜索 Kim Kardashian(这是她页面的确切名称)时,它给了我 Robert Kardashian 的页面......我能做些什么吗?

您可以在网站上看到她是最高结果:

python wikipedia wikipedia-api
1个回答
0
投票

谢谢@AbhijitSarkar,通过查看网络调用,我发现它正在使用https://fr.wikipedia.org/w/rest.php/v1/search/title?q=Kim+Kardashian&limit=10 搜索结果。然后我这样编辑我的代码:

response = requests.get(f'https://fr.wikipedia.org/w/rest.php/v1/search/title?q={search}&limit=1')
jsonData = json.loads(response.text)
searchResult = jsonData['pages'][0]['title']

data = {
    'action': 'query',
    'format': 'json',
    'formatversion': 2,
    'inprop': 'url',
    'prop': 'extracts|pageimages|revisions|info',
    'exintro': True,
    'explaintext': True,
    'piprop': 'original',
    'rvprop': 'timestamp',
    'titles': searchResult
}

response = requests.get('https://fr.wikipedia.org/w/api.php', params=data)
jsonData = json.loads(response.text)

我首先找到第一个请求的标题,然后使用

searchResult
这次使用数据对象中的
'titles': searchResult
按标题进行查询。

© www.soinside.com 2019 - 2024. All rights reserved.