mage/Utils/GathererCrawler/src/main/java/north/gatherercrawler/Main.java

193 lines
6.8 KiB
Java

package north.gatherercrawler;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
/**
*
* @author robert.biter
*/
public class Main {
private static void readCardsFromFile() {
try {
// Open the file
FileInputStream fstream = new FileInputStream("cards-data.txt");
// Get the object of DataInputStream
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String strLine;
//Read File Line By Line
while ((strLine = br.readLine()) != null) {
if (strLine.length() > 0) {
Card card = new Card(strLine);
CardsList.add(card);
ParsedList.add(card.getMultiverseId());
}
}
//Close the input stream
in.close();
} catch (Exception e) {//Catch exception if any
System.err.println("Error: " + e.getMessage());
}
}
public static void main(String[] args) throws IOException, InterruptedException {
List<String> sets = new ArrayList<String>();
// sets.add("Alara Reborn");
// sets.add("Alliances");
// sets.add("Antiquities");
// sets.add("Apocalypse");
// sets.add("Arabian Nights");
// sets.add("Archenemy");
// sets.add("Battle Royale Box Set");
// sets.add("Beatdown Box Set");
// sets.add("Betrayers of Kamigawa");
// sets.add("Champions of Kamigawa");
// sets.add("Chronicles");
// sets.add("Classic Sixth Edition");
// sets.add("Coldsnap");
// sets.add("Conflux");
// sets.add("Darksteel");
// sets.add("Dissension");
// sets.add("Duel Decks: Divine vs. Demonic");
// sets.add("Duel Decks: Elspeth vs. Tezzeret");
// sets.add("Duel Decks: Elves vs. Goblins");
// sets.add("Duel Decks: Garruk vs. Liliana");
// sets.add("Duel Decks: Jace vs. Chandra");
// sets.add("Duel Decks: Knights vs. Dragons");
// sets.add("Duel Decks: Phyrexia vs. the Coalition");
// sets.add("Eighth Edition");
// sets.add("Eventide");
// sets.add("Exodus");
// sets.add("Fallen Empires");
// sets.add("Fifth Dawn");
// sets.add("Fifth Edition");
// sets.add("Fourth Edition");
// sets.add("From the Vault: Dragons");
// sets.add("From the Vault: Exiled");
// sets.add("From the Vault: Relics");
// sets.add("Future Sight");
// sets.add("Guildpact");
// sets.add("Homelands");
// sets.add("Ice Age");
// sets.add("Invasion");
// sets.add("Judgment");
// sets.add("Legends");
// sets.add("Legions");
// sets.add("Limited Edition Alpha");
// sets.add("Limited Edition Beta");
// sets.add("Lorwyn");
// sets.add("Magic 2010");
// sets.add("Magic 2011");
// sets.add("Magic 2012");
// sets.add("Masters Edition");
// sets.add("Masters Edition II");
// sets.add("Masters Edition III");
// sets.add("Masters Edition IV");
// sets.add("Mercadian Masques");
// sets.add("Mirage");
// sets.add("Mirrodin");
// sets.add("Mirrodin Besieged");
// sets.add("Morningtide");
// sets.add("Nemesis");
// sets.add("New Phyrexia");
// sets.add("Ninth Edition");
// sets.add("Odyssey");
// sets.add("Onslaught");
// sets.add("Planar Chaos");
// sets.add("Planechase");
// sets.add("Planeshift");
// sets.add("Portal");
// sets.add("Portal Second Age");
// sets.add("Portal Three Kingdoms");
// sets.add("Premium Deck Series: Fire and Lightning");
// sets.add("Premium Deck Series: Slivers");
// sets.add("Promo set for Gatherer");
// sets.add("Prophecy");
// sets.add("Ravnica: City of Guilds");
// sets.add("Revised Edition");
// sets.add("Rise of the Eldrazi");
// sets.add("Saviors of Kamigawa");
// sets.add("Scars of Mirrodin");
// sets.add("Scourge");
// sets.add("Seventh Edition");
// sets.add("Shadowmoor");
// sets.add("Shards of Alara");
// sets.add("Starter 1999");
// sets.add("Starter 2000");
// sets.add("Stronghold");
// sets.add("Tempest");
// sets.add("Tenth Edition");
// sets.add("The Dark");
// sets.add("Time Spiral");
// sets.add("Time Spiral \"Timeshifted\"");
// sets.add("Torment");
// sets.add("Unlimited Edition");
// sets.add("Urza's Destiny");
// sets.add("Urza's Legacy");
// sets.add("Urza's Saga");
// sets.add("Vanguard");
// sets.add("Visions");
// sets.add("Weatherlight");
// sets.add("Worldwake");
// sets.add("Zendikar");
// sets.add("Magic: The Gathering-Commander");
// sets.add("Unglued");
// sets.add("Unhinged");
readCardsFromFile();
StringBuilder sb = new StringBuilder();
int added = 0;
for (String set : sets) {
sb.append("|[\"").append(set.replace(" ", "+")).append("\"]");
added++;
if (added % 20 == 0 || added == sets.size()) {
int retries = 30;
boolean done = false;
while (retries > 0 && !done) {
String url = "http://gatherer.wizards.com/Pages/Search/Default.aspx?action=advanced&output=checklist&set=" + sb.toString();
Connection connection = Jsoup.connect(url);
connection.timeout(300000);
Document doc = connection.get();
System.out.println(url);
Elements select = doc.select(".checklist .name a");
if (!select.isEmpty()) {
for (Element element : select) {
Integer multiverseId = Integer.parseInt(element.attr("href").replace("../Card/Details.aspx?multiverseid=", ""));
if (!ParsedList.contains(multiverseId)) {
ParseQueue.add(multiverseId);
}
}
}
done = true;
}
if (!done) {
System.out.println("Error accured");
}
sb = new StringBuilder();
Thread.sleep(1000);
}
}
Thread t = new ThreadStarter();
t.start();
}
}