Участник:AKBot/Рейтинг клубов КОНМЕБОЛ

Материал из Википедии — свободной энциклопедии

Данная программа осуществляет автоматическое обновление рейтинга клубов КОНМЕБОЛ в шаблоне {{Рейтинг клубов КОНМЕБОЛ}} на основе данных, доступных по адресу http://df1.conmebol.com/ranking/ranking_completo.html

Лицензия

Код

Функция GetDate

Функция GetDate() просто возвращает текущую дату в формате datetime (см. http://docs.python.org/library/datetime.html)

def GetDate():
	import datetime
	
	return datetime.date.today()

Функция GetTable

Функция GetTable() считывает рейтинговую таблицу со страницы http://df1.conmebol.com/ranking/ranking_completo.html и возвращает необходимые для дальнейшего использования данные в виде списка, каждый элемент которого имеет формат [позиция, название клуба, страна, очки].

def GetTable():
	import urllib2
	
	from BeautifulSoup import BeautifulSoup
	
	url = u'http://df1.conmebol.com/ranking/ranking_completo.html'
	
	print u"Retrieving " + url
	webpage = urllib2.urlopen(url) # Чтение веб-страницы
	print u"\nDone!"
	
	soup = BeautifulSoup(webpage)
	
	tbody = soup.find(attrs={'class': 'tbody'}).findAll('tr') # Выделение «тела» интересующей нас таблицы
	
	table = []
	for tr in tbody:
		tds = tr.findAll('td')
		table.append([tds[0].span.contents[0].replace('º',''), tds[1].span.contents[0], tds[1].span.span.contents[0], tds[2].span.contents[0]]) # формирование элемента списка
	return table

Функция RuWikification

Функция RuWikification() возвращает словарь (dict), ключами которого являются названия клубов на латинице, а возвращаемыми значениями — викифицированные названия на русском языке. Список замен берётся со страницы Шаблон:Рейтинг клубов КОНМЕБОЛ/Замена.

def RuWikification():
	import re
	site = wikipedia.getSite('ru', 'wikipedia')
	
	page = wikipedia.Page(site, u'Шаблон:Рейтинг клубов КОНМЕБОЛ/Замена')
	text = page.get()
	
	wikipedia.stopme()
	
	d = {}
	for line in text.splitlines():
		en_name = re.findall('(?<=:).*(?=[=])', line)[0]
		ru_name = re.findall('(?<=[=]).*', line)[0]
		d[en_name] = ru_name
		
	return d

Функция MakeContent

Функция MakeContent() формирует содержимое страницы, которое впоследствии сохраняется в Википедии. Аргументами данной функции являются таблица, формируемая функцией GetTable() и дата в формате datetime, имеющая смысл даты обновления страницы.

def MakeContent(table, date):
	content = u"{{Рейтинг клубов КОНМЕБОЛ/Шапка}}\n"
	for item in table:
		content += u"{{Рейтинг клубов КОНМЕБОЛ/Строка|" + item[0] + "|"
		if item[1] in ru_wikification:
			content	+= ru_wikification[item[1]]
		else:
			content	+= item[1]
		content += "|" + item[2].replace('(','{{').replace(')','}}') + "|" + item[3].replace('.', ',') + "}}\n"
	content += u"{{Рейтинг клубов КОНМЕБОЛ/Подвал|" + str(date.strftime('{{date|%d|%m|%Y|2}}')).decode('utf8') + "}}"
	
	content += u"<noinclude>\n{{doc}}\n[[Категория:Википедия:Шаблоны:Футбол]]</noinclude>"
	
	return content

Функция WriteToWP

Функция WriteToWP() осуществляет запись на страницу шаблона в Википедии.

def WriteToWP(content):
	site = wikipedia.getSite('ru', 'wikipedia')
	
	page = wikipedia.Page(site, u'Шаблон:Рейтинг клубов КОНМЕБОЛ')
	page.put(content, comment=u'Обновление рейтинга клубов КОНМЕБОЛ')

	wikipedia.stopme()

Основной код программы

import wikipedia

date = GetDate()

table = GetTable()
content = MakeContent(table, date)

WriteToWP(content)