Я хочу напечатать среднее популярное резюме случайного сообщения определенной темы из Википедии, используя API Википедии, но я получаю совершенно случайную тему.
Я пробовал это:
import requests
def get_wikipedia(topic):
response = requests.get(f"https://en.wikipedia.org/api/rest_v1/page/summary/{topic}")
resp = response.json()
if response.status_code == 200:
summary = resp['extract']
image = resp['thumbnail']['source']
print(summary)
print(image)
else:
print("An error occurred while fetching the summary and image.")
BASE_URL = 'https://en.wikipedia.org/w/api.php'
params = {
'format': 'json',
'action': 'query',
'list': 'random',
'rnnamespace': 0,
'rnlimit': 1,
'rnprop': 'title',
'rnfilterredir': 'nonredirects',
'formatversion': 2,
'utf8': 1,
'utf8mb4': 1,
'titles': 'Quantum Mechanics'
}
response = requests.get(BASE_URL, params=params)
title = response.json()['query']['random'][0]['title']
get_wikipedia(title)
А также хочу напечатать среднепопулярную (статьи с просмотрами менее 10к в месяц) тему. Как это сделать?
Почему вы решили, что это сработает? Вы запрашиваете у API случайное название. Единственное, что он поддерживает, это фильтрация по пространству имен.
random.choice(response["query"]["categorymembers"])
должно работать отчасти, но вы, вероятно, получаете только небольшое (детерминированное) подмножество всех членов категории в одном ответе, поэтому вы будете опираться только на них.
Вы можете попробовать использовать en.wikipedia.org/wiki/Special:RandomInCategory/… хотя на самом деле это не API (и не совсем случайный в смысле равномерного распределения, хотя для большинства случаев использования это должно быть хорошо) .
Вероятно, лучший подход — использовать API поиска с чем-то вроде incategory:"Quantum mechanics"
( см. справку) и srsort
, установленным на random
.
Я получаю совершенно случайное сообщение из Википедии вместо случайного сообщения из определенной категории. Я также пытался использовать
"cmtitle": "Category:Physics"
в другом параметре и использовалpages = response["query"]["categorymembers"] page = random.choice(pages)
, чтобы сделать это, но я не получаю желаемого результата.