所以我为我的不和谐机器人创建了一个命令来基于字符串研究维基百科页面:
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 的页面......我能做些什么吗?
谢谢@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
按标题进行查询。