Популярное сообщение ASVShade Опубликовано: 8 июля 2019 Популярное сообщение Поделиться Опубликовано: 8 июля 2019 Циркулярку и фрезер в сторону.https://topdeck.ru/forums/topic/159279-запилил-клетку-04/ Попрограммим! Наверное есть тут форумчане кто что-то для себя пишет по магии. И один из самых тонких моментов это база карт и цены. Я что-то для себя пишу еще с 2008 года и где я только эту базу не вытаскивал. И постоянно меняющийся SCG парсил на Дельфях Затем на Явеhttp://asvshade.blogspot.com/2011/09/[[SSG = Star Sisi Games] = Star Sisi Games].html И официальный кривой gatherer утюжил. Году в 2011 вроде вышел замечательный сайт magiccards.info гда парсинг html был одним удовольствием, там же api c TGC юзал для вытаскивания цен. Потом один знакомый подсказал использовать gatherer extractor https://www.mtgsalvation.com/forums/magic-fundamentals/other-magic-products/third-party-products/337224-mtg-gatherer-extractor-v6-3-database-pics Как же я ему был рад, но прога невероятно глючная. Постоянно обновлять нужно и вылеты, вылеты, вылеты. Скачать целиком хотя бы штук 20 сетов практически нереально. Все данные после него обрабатывать чуть ли не через exlel нужно. Вроде в программе можно переводить данные в sql код, но это вообще забей идея, это все просто не работает! Но тем не менее это было лучшее на то время решение. То что magiccards.info на scryfall.com переехал я давно знал, но парсить еще и его я вообще никак не хотел и ради интереса глянул на его api. https://scryfall.com/docs/api И понеслась... Данные выдаются в виде JSON объектов, с которыми при прямых руках можно делать все что угодно. После реформата данные выглядят примерно вот так: И так задача для определенной программы (визуальное оформление базы карт) выдать входные данные в виде таблицы с шапкой Пару слов по этой самой программе. написана мною еще году в 2010. Особо нигде не афиширую, пишу лично для себя. Храню там свои деки коллекции, обновляю цены. Но сейчас не о ней речь. Пишем на Яве, используем com.google.gson Это потрясающая вещь, которая делает сама все (разве что кофе не приносит). Идея такая: Создаем объект "ScryfallCards" с массивом объектов "ScryfallCard" Качаем в строку страницу с scryfall.com Пихаем эту страницу в наш объект Выводим данные. Далее привожу скрины кода с небольшими пояснениями. Сам код если кому нужен, вышлю в личку. Главный метод. Scryfall выдает данные в виде набора карт: {"object":"list","total_cards":344,"has_more":true,"next_page":"https://api.scryfall.com/cards/search?format=json&include_extras=false&include_multilingual=false&order=name&page=2&q=e%3Am20&unique=prints","data":[ ... ]} Нас интересует это next_page и непосредственно data Я выше писал про кофе... вернее что google.gson делает все сам. Так вот создадим класс этой страницы: Видим что те самые данные страницы (которые нам не особо пока нужны) и ArrayList самих карт Важно при работе с google.gson что бы название полей в классе совпадало с полями в модели json, а то никакого кофе) 3 1 2 3 3 9 Наверх Ссылка на комментарий Поделиться на других сайтах More sharing options...
ASVShade Опубликовано: 8 июля 2019 Автор Поделиться Опубликовано: 8 июля 2019 Карта json это тоже объект и ему тоже нужен класс Аналогично классу страницы создаем класс карты. С документации api на сайте scryfall https://scryfall.com/docs/api/cards создаем нужные нам поля. Мне лично пока хватает 18 полей на скрине, но понятно их гораздо больше. Ну и пишем сами нужный нам вывод. (printline) Тут кому что надо, и в строку, и столбец, и если нужно в sql код и в xml. Мне нужно строка с TAB`ами Image_Uris Prices Это тоже отдельные классы и их тоже нужно создать. Там много таких классов (у всех есть описания) После запуска видим в консоли вот это. Остается определить начальный запрос (на скрине это сет m20) и качаем хоть всю базу. Больше всего радует это возможности google.gson Нам вообще не нужно думать про парсинг. Просто кидаем строку в класс и все данные сами вносятся. ScryfallCards cards = gson.fromJson(s, ScryfallCards.class); Когда то я даже и мечтать о таком не мог. Я на самом деле то и не особо программист уже. Так для себя, что то по мелочи делаю. Ясно, бывалые Яверы найдут в моем коде кучу всего не правильно. Уж извините, как могу( Повторюсь кому нужны исходники скину. Может кому то и было это интересно, дерзайте. 1 1 1 1 Наверх Ссылка на комментарий Поделиться на других сайтах More sharing options...
gurugray Опубликовано: 8 июля 2019 Поделиться Опубликовано: 8 июля 2019 Я не очень понял зачем :) Всё же от задачи зависит. Я, например забираю балк https://scryfall.com/docs/api/bulk-data варю из него небольшой индекс для поиска по нужным мне сетам. Затем граблю сити для матчинга цен и складываю в кеш на час. Ссылка на комментарий Поделиться на других сайтах More sharing options...
gurugray Опубликовано: 8 июля 2019 Поделиться Опубликовано: 8 июля 2019 UPD: пост как-то в процессе обновился. Вижу что база для своей проги. ПС почему не выкачивать балк разово? Ссылка на комментарий Поделиться на других сайтах More sharing options...
ASVShade Опубликовано: 8 июля 2019 Автор Поделиться Опубликовано: 8 июля 2019 Можно и разово, основную идею это использование Google.gson это не меняет. Правда 140 мегов сунуть в объект я не пробовал. И тащить запросами определённые карты: сеты или просто синглы для оперативности иногда гораздо проще и нужнее Сам же выше писал все зависит от задачи. В первый раз булк, полное обновление тоже, а точечное обновление лучше запросами 1 Наверх Ссылка на комментарий Поделиться на других сайтах More sharing options...
casual as unicorn Опубликовано: 8 июля 2019 Поделиться Опубликовано: 8 июля 2019 Вообще ничего не понял, но на всякий случай плюсанул 1 6 Наверх Ссылка на комментарий Поделиться на других сайтах More sharing options...
hatred Опубликовано: 8 июля 2019 Поделиться Опубликовано: 8 июля 2019 А зачем? Можно же на самом скрайфолле цены смотреть 1 Наверх Ссылка на комментарий Поделиться на других сайтах More sharing options...
TeOr Опубликовано: 9 июля 2019 Поделиться Опубликовано: 9 июля 2019 Филиал Хабра на топдеке 1 Наверх Ссылка на комментарий Поделиться на других сайтах More sharing options...
kiba Опубликовано: 9 июля 2019 Поделиться Опубликовано: 9 июля 2019 https://mtgjson.com а почему эту базу не юзаете? Ссылка на комментарий Поделиться на других сайтах More sharing options...
gloomezis Опубликовано: 9 июля 2019 Поделиться Опубликовано: 9 июля 2019 (изменено) Мы для местных ребят сделали такой небольшой обменник c поиском карт в https://api.magicthegathering.io/ ( мультеверсID) и получением картинок напрямую из https://gatherer.wizards.com/ Скрайфол апи позволяет скармливать лист id и получать лист карт в ответ https://api.scryfall.com/cards/collection что очень удобно =) Изменено 9 июля 2019 пользователем gloomezis Ссылка на комментарий Поделиться на других сайтах More sharing options...
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВойти
Уже зарегистрированы? Войдите здесь.
Войти сейчас