Могущественным программистам посвящается

Orccc написал 13 лет назад: # скрыть ответы
результаты

На первом месте оказалась одна из самых не любимых мною игр, Цитадели %)

Michael написал 13 лет назад: # скрыть ответы

А у меня:
на первом месте Корова 006 - игра, в которую мы играли все отпуска,
на 2-м месте Memoir - с ежегодными партиями и турнирами,
на 3-м No Retreat - игра, в которую я играл половину 2012 года.

На а уже на 4-м Цитадели :)

CerbeRUS написал 13 лет назад: # скрыть ответы

А еще, как вариант, учитывать не только общее отыгранное время, но еще удовольствие, полученное от игры.
Конечно, вещь это субъективная, но все можно примерно вычислить, умножая часы еще на рейтинг игры: личный или средний, если личный незаполнен.

Michael написал 13 лет назад: # скрыть ответы

Интересная идея.

Graywind, можно ли добавить на выход еще один рейтинг, где коэффициент еще умножается на оценку игры пользователем?

Graywind написал 13 лет назад: # скрыть ответы

Почему-то не могу найти, как через API получить личные рейтинги. Могу помножить на рейтинги BGG, но это будет несколько не то.

Michael написал 13 лет назад: #

http://www.boardgamegeek.com/xmlapi/collection/zefquaavius?played=1

Там есть Rating

ArMikael написал 13 лет назад: #
Результаты теста

Boardgame Hours/$
Puerto Rico 0.318733
Kingdom Builder 0.275535
7 Wonders 0.211732
The Settlers of Catan 0.200971
Carcassonne 0.173558
Stone Age 0.151549
Arkham Horror 0.121360
Dominion 0.119465
San Juan 0.097572
Dixit 0.081238

Puerto Rico и Kingdom Builder заслуженно заняли первые два места, действительно по-моему мнению, это одни из самых удачных приобретений. А вот 7 Wonders я уже успел продать и пробыл он у меня всего полгода. Продавать решил как раз по той причине, что все только в него и хотели играть, а другие коробки простаивали.

ArMikael написал 13 лет назад: # скрыть ответы

Установил Python, но скрипт так и не заработал:

SyntaxError: invalid syntax
>>> python hours_price.py armikael
File "<stdin>", line 1
python hours_price.py armikael

Graywind написал 13 лет назад: # скрыть ответы

Уже писал. Там тот человек, который заливал скриптик (хозяин дневника), вставил русский комментарий, не указав кодировки.

Я сейчас веб-версию поднял, смотрите там, так проще.
http://109.163.239.8:6030/

Только учтите, что система считает только те игры, где отмечены сыгранные партии, плюс игра должна быть на BGG-Marketplace хотя бы в одном экземпляре.

Graywind написал 13 лет назад: #

А, насчёт вашей ошибки понял. Вы набрали команду из самого Питона, а надо было из командной строки Windows. В общем, действительно, проще по вебу вам будем.

oranged написал 13 лет назад: # скрыть ответы

Я же уже перезалил вашу версию скрипта. (:

P.S. Я не автор этого дневника.

Michael написал 13 лет назад: #

Мопед не мой... :)

ArMikael написал 13 лет назад: #

Спасибо, совсем другое дело! Я изначально вбивал команду в command line винды, но там постоянно выдавалась ошибка, поэтому подумал, что может из самого Python запусакть нужно.

Graywind написал 13 лет назад: # скрыть ответы
Веб версия

Стабильную работу не гарантирую. Если сервер вдруг перегрузят - упадёт. :)

http://109.163.239.8:6030/

Tanone написал 13 лет назад: # скрыть ответы

Выдаёт ошибку. Не может открыть страницу.

Вы когда время партии в целое переводите, закладываетесь что там может быть пусто?

Graywind написал 13 лет назад: #

Это я сперва не учёл, что в BGG на разных языках бывают названия, и надо всё делать с учётом UTF-8. Оно вывалилось, но я уже поправил, теперь работает.

P.S. Первый раз пытаюсь с API BGG работать, ну и медленный он... Очень долго игры перебирает.

Michael написал 13 лет назад: # скрыть ответы

Internal Server Error

Graywind написал 13 лет назад: # скрыть ответы

Один раз в лог выдало, что от BGG пришёл неверно сформированный XML. Какой у вас логин на BGG? Попробую разобраться.
Проверял на Tanone и armikael - отработало отлично. Только очень уж долго. У них много игр отмечено.

Michael написал 13 лет назад: # скрыть ответы

light7

Graywind написал 13 лет назад: # скрыть ответы

Нашёл. Какая-то из ваших игр имеет глючную информацию на BGG. Сделал, чтобы такие игры пропускались. Теперь надеюсь заработает. Предупреждаю только, что с вашим количеством игр ждать результата придётся очень долго.

Graywind написал 13 лет назад: #

Да, теперь ваша страница выдалась нормально. Обратите внимание, что в конце списка у пары десятков игр стоит нулевой рейтинг. Это означает, что они отсутствуют на рынке BGG и стстеме поэтому попросту неизвестно, какая на них цена.

Michael написал 13 лет назад: #

Спасибо! Отличная работа, вы реально круты!

Orccc написал 13 лет назад: #

Спасибо. Интересная информация. Только часть игр пропустилась. Например, в моем списке не оказалось рфтг.

3e6p написал 13 лет назад: # скрыть ответы

А можно вариант для тех, у кого нет питона? :)

Graywind написал 13 лет назад: # скрыть ответы

Вообще по здравому размышлению мне этот скрипт странен самому. Ведь практически никто не отмечает каждую сыгранную партию на BGG. Есть вообще во всём этом особый смысл?

3e6p написал 13 лет назад: # скрыть ответы

Ну если не полениться отметить все партии и добавить все игры на BGG, то можно определить какая игра является вашей самой эффективной покупкой :)

Graywind написал 13 лет назад: #

Чуть попозже добавлю тогда Web-вариант.

diablotm написал 13 лет назад: #

Почему никто? Мне в основном для этого бгг и нужен.

Michael написал 13 лет назад: #

Я отмечаю... на глаз... поэтому скрипт и интересен.

Graywind написал 13 лет назад: # скрыть ответы

Эх, табуляции съехали, не заработает. Сейчас залью куда-нибудь и выложу ссылкой.

Michael написал 13 лет назад: #

Спасибо, о Великий и Могучий! Всегда восхищался Кудесниками своего дела!

Orccc написал 13 лет назад: # скрыть ответы

SyntaxError: Non-ASCII character '\xc7' in file C:\hours_price.py on line 14, bu
t no encoding declared; see http://www.python.org/peps/pep-0263.html for details

Graywind написал 13 лет назад: # скрыть ответы

Это потому что кто-то при выкладывании приписал комментарий по-русски внутри кода.

Graywind написал 13 лет назад: #

Чтобы избавиться от такой ошибки либо сотрите русский комментарий из кода, либо вставьте самой верхней строкой:
# -*- coding: cp1251 -*-

Orccc написал 13 лет назад: #

C:\Users\Otd141-5>python C:\hours_price.py Orccc
Traceback (most recent call last):
File "C:\hours_price.py", line 17, in <module>
for item in items.iter('item'):
AttributeError: ElementTree instance has no attribute 'iter'

Graywind написал 13 лет назад: # скрыть ответы

Простой скриптик на Питоне на быструю руку. По необходимости добавить валюты или исправить их стоимости.

currencies = {
"EUR":40,
"USD":31,
"GBP":47,
"CAD":30,
"RUR":1
}
import urllib2
import xml.etree.ElementTree as ET
baseurl = "http://www.boardgamegeek.com/xmlapi2"
games = []

url = "%s/collection?username=Matthew_Eklund&played=1" % baseurl
items = ET.parse(urllib2.urlopen(url))
for item in items.iter('item'):
objectid = item.attrib['objectid']
numplays = int(item.find('numplays').text)
url = "%s/thing?id=%s&marketplace=1" % (baseurl, objectid)
item = ET.parse(urllib2.urlopen(url)).find('item')
name = item.find('name').attrib['value']
playingtime = int(item.find('playingtime').attrib['value']) / 60.0
marketplace = item.find('marketplacelistings')
total_price = 0
listings_num = 0
for listing in marketplace.iter('listing'):
price = listing.find('price')
total_price += currencies[price.attrib['currency']] * float(price.attrib['value'])
listings_num += 1
if price > 0: eff = numplays * playingtime * listings_num / total_price
else: eff = 0
games.append((eff, name))

games.sort(reverse=1)

for eff, name in games:
print "%s: %f" % (name, eff)

Graywind написал 13 лет назад: #

Эх, съехали табуляции... Не будет работать. Как тут файликом добавить? :)

Michael написал 13 лет назад: # скрыть ответы

Круто!!!
А как бы это, например, в Тесеру вставить?

Graywind написал 13 лет назад: #

В Тесеру? А на чём она написана? Думаю, на чём бы ни была, переписать на нужный язык вопрос 10 минут.

Graywind написал 13 лет назад: # скрыть ответы

Админу, который выкладывал файлик сюда:
положите последнюю версию с моей ссылки, у меня прав нет. Исправил там одну ошибку (вылетало на играх, которых нет в BGG-маркете) плюс поменял цены валют. Раньше было часов за рубль, теперь часов за доллар.

И поудаляйте пожалуйста мои сообщения, а то удаления нет, а намусорил я много. :)

oranged написал 13 лет назад: # скрыть ответы

Всё равно окно сразу закрывается. (: Может, проще в текстовый файл вывод сделать?

Graywind написал 13 лет назад: #

Если надо в файл, то можно вот так:

python hours_price.py username > outfile.txt

Graywind написал 13 лет назад: # скрыть ответы

http://dsga.me/tmp/hours_price.py

Сорри, что требует установленного Питона.
Файлик скачать себе на комп. Запускать из командной строки:

python hours_price.py Some_username

oranged написал 13 лет назад: #

А он работает? (: У меня окно после запуска просто закрывается.

Anthropod написал 13 лет назад: # скрыть ответы

Миша, если тебе больше нравится покупать, чем играть, то имеет ли значение эффективность? ;))

Michael написал 13 лет назад: #

Ну я вроде поборол эту болезнь, у меня всего 3 неигранные коробки дома лежат. Теперь пришло время переосмыслить свою жизнь :) А для этого нужна аналитика...

Tanone написал 13 лет назад: #

БГГ для такой статистики слабо подходит. Только для тех кто скрупулёзно записывает туда все партии.
Думаю это исчезающее меньшинство.
Я выкладывал программы для ведения личной статистики. При чём они сделаны так чтобы можно было объединять разные личные статистики. На этой основе можно было бы подсчитать различные коэффициенты. И среднее время партий было бы реальное, потому что в программе можно засекать точное время. Но никто особо не заинтересовался.
Если вы скрупулёзно все заносили на БГГ, то вашу формулу очень легко реализовать.