package net.demilich.metastone.gui.deckbuilder.importer; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.jsoup.Connection.Response; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.select.Elements; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import net.demilich.metastone.game.cards.Card; import net.demilich.metastone.game.cards.CardCatalogue; import net.demilich.metastone.game.decks.Deck; import net.demilich.metastone.game.entities.heroes.HeroClass; public class HearthHeadImporter implements IDeckImporter { private static Logger logger = LoggerFactory.getLogger(IcyVeinsImporter.class); @Override public Deck importFrom(String url) { String exportUrl = url; try { return parse(exportUrl); } catch (IOException e) { e.printStackTrace(); } return null; } private List<String> getCardIds(Document doc){ Elements metas = doc.getElementsByTag("meta"); String title = ""; String cards = ""; for (int i = 0; i < metas.size(); i++) { if (metas.get(i).attr("property").equals("x-hearthstone:deck:cards")) { cards = metas.get(i).attr("content"); } if (metas.get(i).attr("property").equals("x-hearthstone:deck")) { title = metas.get(i).attr("content"); } } List<String> cs = new ArrayList<String>(); cs.add(0, title); List<String> cids = Arrays.asList(cards.split(",")); for (String c: cids){ cs.add(c); } return cs; } private Deck parse(String url) throws IOException { List<Card> cards = new ArrayList<Card>(); HeroClass heroClass = HeroClass.ANY; Response response= Jsoup.connect(url) .ignoreContentType(true) .userAgent("Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:25.0) Gecko/20100101 Firefox/25.0") .referrer("http://www.google.com") .timeout(12000) .followRedirects(true) .execute(); Document doc = response.parse(); for (String cid: getCardIds(doc).subList(1, getCardIds(doc).size())) { Card card = CardCatalogue.getCardByBlizzardId(cid); if (card != null) { cards.add(card); if (card.getHeroClass() != HeroClass.ANY) { heroClass = card.getHeroClass(); } } else { logger.error("Card with id {} could not be found", cid); } } Deck deck = new Deck(heroClass); deck.setName(getCardIds(doc).get(0)); for (Card card : cards) { deck.getCards().add(card); } if (!deck.isComplete()) { return null; } return deck; } }