feat: adds c64com as selectable when scraping game info
This commit is contained in:
parent
b286dd8e5e
commit
840fa79d10
|
@ -0,0 +1,387 @@
|
||||||
|
package se.lantz.gui.scraper;
|
||||||
|
|
||||||
|
import java.awt.Cursor;
|
||||||
|
import java.awt.Desktop;
|
||||||
|
import java.awt.Font;
|
||||||
|
import java.awt.GridBagConstraints;
|
||||||
|
import java.awt.GridBagLayout;
|
||||||
|
import java.awt.Insets;
|
||||||
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.awt.event.ActionListener;
|
||||||
|
import java.awt.event.KeyAdapter;
|
||||||
|
import java.awt.event.KeyEvent;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.net.URISyntaxException;
|
||||||
|
|
||||||
|
import javax.swing.ImageIcon;
|
||||||
|
import javax.swing.JButton;
|
||||||
|
import javax.swing.JCheckBox;
|
||||||
|
import javax.swing.JEditorPane;
|
||||||
|
import javax.swing.JLabel;
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
import javax.swing.JTextField;
|
||||||
|
import javax.swing.SwingConstants;
|
||||||
|
import javax.swing.SwingUtilities;
|
||||||
|
import javax.swing.UIManager;
|
||||||
|
import javax.swing.event.HyperlinkEvent;
|
||||||
|
|
||||||
|
import se.lantz.manager.ScraperManager;
|
||||||
|
import se.lantz.model.data.ScraperFields;
|
||||||
|
import se.lantz.util.ExceptionHandler;
|
||||||
|
|
||||||
|
public class C64comOptionsPanel extends JPanel
|
||||||
|
{
|
||||||
|
private JEditorPane infoEditorPane;
|
||||||
|
private JTextField urlTextField;
|
||||||
|
private JPanel fieldsPanel;
|
||||||
|
private JLabel fieldsInfoLabel;
|
||||||
|
private JCheckBox titleCheckBox;
|
||||||
|
private JCheckBox authorCheckBox;
|
||||||
|
private JCheckBox yearCheckBox;
|
||||||
|
private JCheckBox descriptionCheckBox;
|
||||||
|
private JCheckBox coverCheckBox;
|
||||||
|
private JCheckBox screensCheckBox;
|
||||||
|
private ScraperManager scraper;
|
||||||
|
private JButton connectButton;
|
||||||
|
private JLabel connectionStatusLabel;
|
||||||
|
|
||||||
|
private Cursor waitCursor = new Cursor(Cursor.WAIT_CURSOR);
|
||||||
|
private Cursor defaultCursor = new Cursor(Cursor.DEFAULT_CURSOR);
|
||||||
|
private JButton okButton;
|
||||||
|
private JCheckBox genreCheckBox;
|
||||||
|
private JCheckBox composerCheckBox;
|
||||||
|
|
||||||
|
public C64comOptionsPanel(ScraperManager scraper, JButton okButton)
|
||||||
|
{
|
||||||
|
this.scraper = scraper;
|
||||||
|
this.okButton = okButton;
|
||||||
|
GridBagLayout gridBagLayout = new GridBagLayout();
|
||||||
|
setLayout(gridBagLayout);
|
||||||
|
GridBagConstraints gbc_infoLabel = new GridBagConstraints();
|
||||||
|
gbc_infoLabel.gridwidth = 2;
|
||||||
|
gbc_infoLabel.weightx = 1.0;
|
||||||
|
gbc_infoLabel.fill = GridBagConstraints.HORIZONTAL;
|
||||||
|
gbc_infoLabel.insets = new Insets(10, 10, 5, 10);
|
||||||
|
gbc_infoLabel.gridx = 0;
|
||||||
|
gbc_infoLabel.gridy = 0;
|
||||||
|
add(getInfoEditorPane(), gbc_infoLabel);
|
||||||
|
GridBagConstraints gbc_urlTextField = new GridBagConstraints();
|
||||||
|
gbc_urlTextField.weightx = 1.0;
|
||||||
|
gbc_urlTextField.insets = new Insets(0, 10, 10, 5);
|
||||||
|
gbc_urlTextField.fill = GridBagConstraints.HORIZONTAL;
|
||||||
|
gbc_urlTextField.gridx = 0;
|
||||||
|
gbc_urlTextField.gridy = 1;
|
||||||
|
add(getUrlTextField(), gbc_urlTextField);
|
||||||
|
GridBagConstraints gbc_connectButton = new GridBagConstraints();
|
||||||
|
gbc_connectButton.anchor = GridBagConstraints.NORTHWEST;
|
||||||
|
gbc_connectButton.insets = new Insets(0, 0, 10, 10);
|
||||||
|
gbc_connectButton.gridx = 1;
|
||||||
|
gbc_connectButton.gridy = 1;
|
||||||
|
add(getConnectButton(), gbc_connectButton);
|
||||||
|
GridBagConstraints gbc_connectionStatusLabel = new GridBagConstraints();
|
||||||
|
gbc_connectionStatusLabel.gridwidth = 2;
|
||||||
|
gbc_connectionStatusLabel.insets = new Insets(0, 10, 10, 5);
|
||||||
|
gbc_connectionStatusLabel.gridx = 0;
|
||||||
|
gbc_connectionStatusLabel.gridy = 2;
|
||||||
|
add(getConnectionStatusLabel(), gbc_connectionStatusLabel);
|
||||||
|
GridBagConstraints gbc_fieldsPanel = new GridBagConstraints();
|
||||||
|
gbc_fieldsPanel.insets = new Insets(0, 0, 10, 0);
|
||||||
|
gbc_fieldsPanel.gridwidth = 2;
|
||||||
|
gbc_fieldsPanel.anchor = GridBagConstraints.NORTH;
|
||||||
|
gbc_fieldsPanel.weighty = 1.0;
|
||||||
|
gbc_fieldsPanel.weightx = 1.0;
|
||||||
|
gbc_fieldsPanel.gridx = 0;
|
||||||
|
gbc_fieldsPanel.gridy = 3;
|
||||||
|
add(getFieldsPanel(), gbc_fieldsPanel);
|
||||||
|
okButton.setEnabled(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
private JEditorPane getInfoEditorPane()
|
||||||
|
{
|
||||||
|
if (infoEditorPane == null)
|
||||||
|
{
|
||||||
|
String info = "<html>To scrape information from c64.com you need to specify the URL for a specific game." +
|
||||||
|
"<ol><li>Go to <a href='http:/www.c64.com/'>http:/www.c64.com/</a> and search for the game you want to<br>scrape information for.</li>" +
|
||||||
|
"<li>Select the game and click on the \"direct link\" for it. Copy the URL to the<br>field below." +
|
||||||
|
"(Example: http://www.c64.com/games/53)</li></ol></html>";
|
||||||
|
|
||||||
|
infoEditorPane = new JEditorPane("text/html", info);
|
||||||
|
infoEditorPane.putClientProperty(JEditorPane.HONOR_DISPLAY_PROPERTIES, Boolean.TRUE);
|
||||||
|
infoEditorPane.setFont(UIManager.getDefaults().getFont("Label.font"));
|
||||||
|
infoEditorPane.setEditable(false);
|
||||||
|
infoEditorPane.setOpaque(false);
|
||||||
|
infoEditorPane.addHyperlinkListener((hle) -> {
|
||||||
|
if (HyperlinkEvent.EventType.ACTIVATED.equals(hle.getEventType()) && Desktop.isDesktopSupported() &&
|
||||||
|
Desktop.getDesktop().isSupported(Desktop.Action.BROWSE))
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Desktop.getDesktop().browse(hle.getURL().toURI());
|
||||||
|
}
|
||||||
|
catch (IOException | URISyntaxException e)
|
||||||
|
{
|
||||||
|
ExceptionHandler.handleException(e, "Could not open default browser");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return infoEditorPane;
|
||||||
|
}
|
||||||
|
|
||||||
|
JTextField getUrlTextField()
|
||||||
|
{
|
||||||
|
if (urlTextField == null)
|
||||||
|
{
|
||||||
|
urlTextField = new JTextField();
|
||||||
|
urlTextField.setText("http://www.c64.com/games/");
|
||||||
|
urlTextField.addKeyListener(new KeyAdapter()
|
||||||
|
{
|
||||||
|
@Override
|
||||||
|
public void keyPressed(KeyEvent e)
|
||||||
|
{
|
||||||
|
if (e.getKeyCode() == KeyEvent.VK_ENTER)
|
||||||
|
{
|
||||||
|
getConnectButton().doClick();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return urlTextField;
|
||||||
|
}
|
||||||
|
|
||||||
|
private JPanel getFieldsPanel()
|
||||||
|
{
|
||||||
|
if (fieldsPanel == null)
|
||||||
|
{
|
||||||
|
fieldsPanel = new JPanel();
|
||||||
|
GridBagLayout gbl_fieldsPanel = new GridBagLayout();
|
||||||
|
fieldsPanel.setLayout(gbl_fieldsPanel);
|
||||||
|
GridBagConstraints gbc_fieldsInfoLabel = new GridBagConstraints();
|
||||||
|
gbc_fieldsInfoLabel.gridwidth = 3;
|
||||||
|
gbc_fieldsInfoLabel.weightx = 1.0;
|
||||||
|
gbc_fieldsInfoLabel.insets = new Insets(0, 0, 5, 0);
|
||||||
|
gbc_fieldsInfoLabel.anchor = GridBagConstraints.NORTH;
|
||||||
|
gbc_fieldsInfoLabel.gridx = 0;
|
||||||
|
gbc_fieldsInfoLabel.gridy = 0;
|
||||||
|
fieldsPanel.add(getFieldsInfoLabel(), gbc_fieldsInfoLabel);
|
||||||
|
GridBagConstraints gbc_titleCheckBox = new GridBagConstraints();
|
||||||
|
gbc_titleCheckBox.insets = new Insets(0, 0, 5, 5);
|
||||||
|
gbc_titleCheckBox.anchor = GridBagConstraints.WEST;
|
||||||
|
gbc_titleCheckBox.gridx = 0;
|
||||||
|
gbc_titleCheckBox.gridy = 1;
|
||||||
|
fieldsPanel.add(getTitleCheckBox(), gbc_titleCheckBox);
|
||||||
|
GridBagConstraints gbc_authorCheckBox = new GridBagConstraints();
|
||||||
|
gbc_authorCheckBox.insets = new Insets(0, 0, 5, 5);
|
||||||
|
gbc_authorCheckBox.anchor = GridBagConstraints.WEST;
|
||||||
|
gbc_authorCheckBox.gridx = 0;
|
||||||
|
gbc_authorCheckBox.gridy = 2;
|
||||||
|
fieldsPanel.add(getAuthorCheckBox(), gbc_authorCheckBox);
|
||||||
|
GridBagConstraints gbc_composerCheckBox = new GridBagConstraints();
|
||||||
|
gbc_composerCheckBox.anchor = GridBagConstraints.WEST;
|
||||||
|
gbc_composerCheckBox.insets = new Insets(0, 0, 5, 5);
|
||||||
|
gbc_composerCheckBox.gridx = 1;
|
||||||
|
gbc_composerCheckBox.gridy = 2;
|
||||||
|
fieldsPanel.add(getComposerCheckBox(), gbc_composerCheckBox);
|
||||||
|
GridBagConstraints gbc_coverCheckBox = new GridBagConstraints();
|
||||||
|
gbc_coverCheckBox.anchor = GridBagConstraints.WEST;
|
||||||
|
gbc_coverCheckBox.insets = new Insets(0, 0, 5, 5);
|
||||||
|
gbc_coverCheckBox.gridx = 1;
|
||||||
|
gbc_coverCheckBox.gridy = 3;
|
||||||
|
fieldsPanel.add(getCoverCheckBox(), gbc_coverCheckBox);
|
||||||
|
GridBagConstraints gbc_yearCheckBox = new GridBagConstraints();
|
||||||
|
gbc_yearCheckBox.insets = new Insets(0, 0, 5, 5);
|
||||||
|
gbc_yearCheckBox.anchor = GridBagConstraints.WEST;
|
||||||
|
gbc_yearCheckBox.gridx = 0;
|
||||||
|
gbc_yearCheckBox.gridy = 3;
|
||||||
|
fieldsPanel.add(getYearCheckBox(), gbc_yearCheckBox);
|
||||||
|
GridBagConstraints gbc_descriptionCheckBox = new GridBagConstraints();
|
||||||
|
gbc_descriptionCheckBox.insets = new Insets(0, 0, 5, 5);
|
||||||
|
gbc_descriptionCheckBox.anchor = GridBagConstraints.WEST;
|
||||||
|
gbc_descriptionCheckBox.gridx = 1;
|
||||||
|
gbc_descriptionCheckBox.gridy = 1;
|
||||||
|
fieldsPanel.add(getDescriptionCheckBox(), gbc_descriptionCheckBox);
|
||||||
|
GridBagConstraints gbc_genreCheckBox = new GridBagConstraints();
|
||||||
|
gbc_genreCheckBox.insets = new Insets(0, 0, 0, 5);
|
||||||
|
gbc_genreCheckBox.anchor = GridBagConstraints.WEST;
|
||||||
|
gbc_genreCheckBox.gridx = 0;
|
||||||
|
gbc_genreCheckBox.gridy = 4;
|
||||||
|
fieldsPanel.add(getGenreCheckBox(), gbc_genreCheckBox);
|
||||||
|
GridBagConstraints gbc_screensCheckBox = new GridBagConstraints();
|
||||||
|
gbc_screensCheckBox.insets = new Insets(0, 0, 0, 5);
|
||||||
|
gbc_screensCheckBox.anchor = GridBagConstraints.WEST;
|
||||||
|
gbc_screensCheckBox.gridx = 1;
|
||||||
|
gbc_screensCheckBox.gridy = 4;
|
||||||
|
fieldsPanel.add(getScreensCheckBox(), gbc_screensCheckBox);
|
||||||
|
}
|
||||||
|
return fieldsPanel;
|
||||||
|
}
|
||||||
|
|
||||||
|
private JLabel getFieldsInfoLabel()
|
||||||
|
{
|
||||||
|
if (fieldsInfoLabel == null)
|
||||||
|
{
|
||||||
|
fieldsInfoLabel = new JLabel("Select fields to scrape:");
|
||||||
|
}
|
||||||
|
return fieldsInfoLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
private JCheckBox getTitleCheckBox()
|
||||||
|
{
|
||||||
|
if (titleCheckBox == null)
|
||||||
|
{
|
||||||
|
titleCheckBox = new JCheckBox("Title");
|
||||||
|
titleCheckBox.setSelected(true);
|
||||||
|
titleCheckBox.setEnabled(false);
|
||||||
|
}
|
||||||
|
return titleCheckBox;
|
||||||
|
}
|
||||||
|
|
||||||
|
private JCheckBox getAuthorCheckBox()
|
||||||
|
{
|
||||||
|
if (authorCheckBox == null)
|
||||||
|
{
|
||||||
|
authorCheckBox = new JCheckBox("Author");
|
||||||
|
authorCheckBox.setSelected(true);
|
||||||
|
authorCheckBox.setEnabled(false);
|
||||||
|
}
|
||||||
|
return authorCheckBox;
|
||||||
|
}
|
||||||
|
|
||||||
|
private JCheckBox getYearCheckBox()
|
||||||
|
{
|
||||||
|
if (yearCheckBox == null)
|
||||||
|
{
|
||||||
|
yearCheckBox = new JCheckBox("Year");
|
||||||
|
yearCheckBox.setSelected(true);
|
||||||
|
yearCheckBox.setEnabled(false);
|
||||||
|
}
|
||||||
|
return yearCheckBox;
|
||||||
|
}
|
||||||
|
|
||||||
|
private JCheckBox getDescriptionCheckBox()
|
||||||
|
{
|
||||||
|
if (descriptionCheckBox == null)
|
||||||
|
{
|
||||||
|
descriptionCheckBox = new JCheckBox("Description");
|
||||||
|
descriptionCheckBox.setSelected(false);
|
||||||
|
descriptionCheckBox.setEnabled(false);
|
||||||
|
}
|
||||||
|
return descriptionCheckBox;
|
||||||
|
}
|
||||||
|
|
||||||
|
private JCheckBox getCoverCheckBox()
|
||||||
|
{
|
||||||
|
if (coverCheckBox == null)
|
||||||
|
{
|
||||||
|
coverCheckBox = new JCheckBox("Cover");
|
||||||
|
coverCheckBox.setSelected(true);
|
||||||
|
coverCheckBox.setEnabled(false);
|
||||||
|
}
|
||||||
|
return coverCheckBox;
|
||||||
|
}
|
||||||
|
|
||||||
|
private JCheckBox getScreensCheckBox()
|
||||||
|
{
|
||||||
|
if (screensCheckBox == null)
|
||||||
|
{
|
||||||
|
screensCheckBox = new JCheckBox("Screenshots");
|
||||||
|
screensCheckBox.setSelected(true);
|
||||||
|
screensCheckBox.setEnabled(false);
|
||||||
|
}
|
||||||
|
return screensCheckBox;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void enableCheckBoxes(boolean enable)
|
||||||
|
{
|
||||||
|
titleCheckBox.setEnabled(enable);
|
||||||
|
authorCheckBox.setEnabled(enable);
|
||||||
|
yearCheckBox.setEnabled(enable);
|
||||||
|
// descriptionCheckBox.setEnabled(enable);
|
||||||
|
coverCheckBox.setEnabled(enable);
|
||||||
|
screensCheckBox.setEnabled(enable);
|
||||||
|
genreCheckBox.setEnabled(enable);
|
||||||
|
composerCheckBox.setEnabled(enable);
|
||||||
|
}
|
||||||
|
|
||||||
|
public ScraperFields getScraperFields()
|
||||||
|
{
|
||||||
|
ScraperFields returnValue = new ScraperFields();
|
||||||
|
returnValue.setTitle(titleCheckBox.isSelected());
|
||||||
|
returnValue.setAuthor(authorCheckBox.isSelected());
|
||||||
|
returnValue.setYear(yearCheckBox.isSelected());
|
||||||
|
returnValue.setGenre(genreCheckBox.isSelected());
|
||||||
|
returnValue.setDescription(false);
|
||||||
|
returnValue.setCover(coverCheckBox.isSelected());
|
||||||
|
returnValue.setScreenshots(screensCheckBox.isSelected());
|
||||||
|
returnValue.setComposer(composerCheckBox.isSelected());
|
||||||
|
return returnValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
JButton getConnectButton()
|
||||||
|
{
|
||||||
|
if (connectButton == null)
|
||||||
|
{
|
||||||
|
connectButton = new JButton("Connect");
|
||||||
|
connectButton.addActionListener(new ActionListener()
|
||||||
|
{
|
||||||
|
public void actionPerformed(ActionEvent e)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
C64comOptionsPanel.this.setCursor(waitCursor);
|
||||||
|
scraper.connectScraper(urlTextField.getText());
|
||||||
|
getConnectionStatusLabel().setText("Connection status: OK");
|
||||||
|
getConnectionStatusLabel().setIcon(new ImageIcon(this.getClass().getResource("/se/lantz/check.png")));
|
||||||
|
enableCheckBoxes(true);
|
||||||
|
okButton.setEnabled(true);
|
||||||
|
C64comOptionsPanel.this.setCursor(defaultCursor);
|
||||||
|
SwingUtilities.invokeLater(() -> SwingUtilities.getRootPane(connectButton).setDefaultButton(okButton));
|
||||||
|
}
|
||||||
|
catch (Exception e2)
|
||||||
|
{
|
||||||
|
getConnectionStatusLabel().setText("Connection status: Error. Invalid URL?");
|
||||||
|
getConnectionStatusLabel().setIcon(new ImageIcon(this.getClass().getResource("/se/lantz/failure.png")));
|
||||||
|
enableCheckBoxes(false);
|
||||||
|
okButton.setEnabled(false);
|
||||||
|
C64comOptionsPanel.this.setCursor(defaultCursor);
|
||||||
|
SwingUtilities.invokeLater(() -> SwingUtilities.getRootPane(connectButton).setDefaultButton(connectButton));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
return connectButton;
|
||||||
|
}
|
||||||
|
|
||||||
|
private JLabel getConnectionStatusLabel()
|
||||||
|
{
|
||||||
|
if (connectionStatusLabel == null)
|
||||||
|
{
|
||||||
|
connectionStatusLabel = new JLabel(" ");
|
||||||
|
connectionStatusLabel.setFont(connectionStatusLabel.getFont().deriveFont(Font.BOLD));
|
||||||
|
connectionStatusLabel.setHorizontalTextPosition(SwingConstants.LEADING);
|
||||||
|
}
|
||||||
|
return connectionStatusLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
private JCheckBox getGenreCheckBox()
|
||||||
|
{
|
||||||
|
if (genreCheckBox == null)
|
||||||
|
{
|
||||||
|
genreCheckBox = new JCheckBox("Genre");
|
||||||
|
genreCheckBox.setSelected(true);
|
||||||
|
genreCheckBox.setEnabled(false);
|
||||||
|
}
|
||||||
|
return genreCheckBox;
|
||||||
|
}
|
||||||
|
|
||||||
|
private JCheckBox getComposerCheckBox()
|
||||||
|
{
|
||||||
|
if (composerCheckBox == null)
|
||||||
|
{
|
||||||
|
composerCheckBox = new JCheckBox("Composer");
|
||||||
|
composerCheckBox.setSelected(true);
|
||||||
|
composerCheckBox.setEnabled(false);
|
||||||
|
}
|
||||||
|
return composerCheckBox;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,50 +1,139 @@
|
||||||
package se.lantz.gui.scraper;
|
package se.lantz.gui.scraper;
|
||||||
|
|
||||||
import java.awt.BorderLayout;
|
import java.awt.BorderLayout;
|
||||||
|
import java.awt.CardLayout;
|
||||||
import java.awt.Frame;
|
import java.awt.Frame;
|
||||||
|
import java.awt.GridBagConstraints;
|
||||||
|
import java.awt.GridBagLayout;
|
||||||
|
import java.awt.Insets;
|
||||||
|
import java.awt.event.ActionEvent;
|
||||||
|
import java.awt.event.ActionListener;
|
||||||
|
|
||||||
|
import javax.swing.JComboBox;
|
||||||
|
import javax.swing.JLabel;
|
||||||
import javax.swing.JPanel;
|
import javax.swing.JPanel;
|
||||||
|
|
||||||
import se.lantz.gui.BaseDialog;
|
import se.lantz.gui.BaseDialog;
|
||||||
import se.lantz.manager.ScraperManager;
|
import se.lantz.manager.ScraperManager;
|
||||||
|
import se.lantz.manager.ScraperManager.SCRAPER;
|
||||||
import se.lantz.model.data.ScraperFields;
|
import se.lantz.model.data.ScraperFields;
|
||||||
|
|
||||||
public class ScraperDialog extends BaseDialog
|
public class ScraperDialog extends BaseDialog
|
||||||
{
|
{
|
||||||
private MobyGamesOptionsPanel mbyGamesPanel;
|
private MobyGamesOptionsPanel mobyGamesPanel;
|
||||||
|
private C64comOptionsPanel c64comPanel;
|
||||||
private final ScraperManager scraper;
|
private final ScraperManager scraper;
|
||||||
|
private CardLayout cardLayout = new CardLayout();
|
||||||
|
private JPanel scraperSelectionPanel;
|
||||||
|
private JLabel scraperInfoLabel;
|
||||||
|
private JComboBox scraperComboBox;
|
||||||
|
private JPanel cardPanel;
|
||||||
|
|
||||||
public ScraperDialog(Frame owner, ScraperManager scraper)
|
public ScraperDialog(Frame owner, ScraperManager scraper)
|
||||||
{
|
{
|
||||||
super(owner);
|
super(owner);
|
||||||
|
setTitle("Scrape game information");
|
||||||
this.scraper = scraper;
|
this.scraper = scraper;
|
||||||
JPanel content = new JPanel();
|
JPanel content = new JPanel();
|
||||||
content.setLayout(new BorderLayout());
|
content.setLayout(new BorderLayout());
|
||||||
content.add(getMobyGamesPanel(), BorderLayout.CENTER);
|
cardPanel = new JPanel();
|
||||||
|
cardPanel.setLayout(cardLayout);
|
||||||
|
cardPanel.add(getMobyGamesPanel(), "moby");
|
||||||
|
cardPanel.add(getC64comPanel(), "c64com");
|
||||||
|
content.add(cardPanel, BorderLayout.CENTER);
|
||||||
addContent(content);
|
addContent(content);
|
||||||
setTitle("Scrape game information");
|
content.add(getScraperSelectionPanel(), BorderLayout.NORTH);
|
||||||
this.setResizable(false);
|
this.setResizable(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
private MobyGamesOptionsPanel getMobyGamesPanel()
|
private MobyGamesOptionsPanel getMobyGamesPanel()
|
||||||
{
|
{
|
||||||
if (mbyGamesPanel == null)
|
if (mobyGamesPanel == null)
|
||||||
{
|
{
|
||||||
mbyGamesPanel = new MobyGamesOptionsPanel(scraper, getOkButton());
|
mobyGamesPanel = new MobyGamesOptionsPanel(scraper, getOkButton());
|
||||||
}
|
}
|
||||||
return mbyGamesPanel;
|
return mobyGamesPanel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private C64comOptionsPanel getC64comPanel()
|
||||||
|
{
|
||||||
|
if (c64comPanel == null)
|
||||||
|
{
|
||||||
|
c64comPanel = new C64comOptionsPanel(scraper, getOkButton());
|
||||||
|
}
|
||||||
|
return c64comPanel;
|
||||||
|
}
|
||||||
|
|
||||||
public ScraperFields getScraperFields()
|
public ScraperFields getScraperFields()
|
||||||
{
|
{
|
||||||
return getMobyGamesPanel().getScraperFields();
|
return getMobyGamesPanel().getScraperFields();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean showDialog()
|
public boolean showDialog()
|
||||||
{
|
{
|
||||||
getMobyGamesPanel().getUrlTextField().requestFocusInWindow();
|
getMobyGamesPanel().getUrlTextField().requestFocusInWindow();
|
||||||
this.getRootPane().setDefaultButton(getMobyGamesPanel().getConnectButton());
|
this.getRootPane().setDefaultButton(getMobyGamesPanel().getConnectButton());
|
||||||
|
|
||||||
return super.showDialog();
|
return super.showDialog();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private JPanel getScraperSelectionPanel()
|
||||||
|
{
|
||||||
|
if (scraperSelectionPanel == null)
|
||||||
|
{
|
||||||
|
scraperSelectionPanel = new JPanel();
|
||||||
|
GridBagLayout gbl_scraperSelectionPanel = new GridBagLayout();
|
||||||
|
scraperSelectionPanel.setLayout(gbl_scraperSelectionPanel);
|
||||||
|
GridBagConstraints gbc_scraperInfoLabel = new GridBagConstraints();
|
||||||
|
gbc_scraperInfoLabel.insets = new Insets(10, 10, 5, 5);
|
||||||
|
gbc_scraperInfoLabel.gridx = 0;
|
||||||
|
gbc_scraperInfoLabel.gridy = 0;
|
||||||
|
scraperSelectionPanel.add(getScraperInfoLabel(), gbc_scraperInfoLabel);
|
||||||
|
GridBagConstraints gbc_scraperComboBox = new GridBagConstraints();
|
||||||
|
gbc_scraperComboBox.insets = new Insets(10, 0, 5, 5);
|
||||||
|
gbc_scraperComboBox.gridx = 1;
|
||||||
|
gbc_scraperComboBox.gridy = 0;
|
||||||
|
scraperSelectionPanel.add(getScraperComboBox(), gbc_scraperComboBox);
|
||||||
|
}
|
||||||
|
return scraperSelectionPanel;
|
||||||
|
}
|
||||||
|
|
||||||
|
private JLabel getScraperInfoLabel()
|
||||||
|
{
|
||||||
|
if (scraperInfoLabel == null)
|
||||||
|
{
|
||||||
|
scraperInfoLabel = new JLabel("Select a site to scrape:");
|
||||||
|
}
|
||||||
|
return scraperInfoLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
private JComboBox getScraperComboBox()
|
||||||
|
{
|
||||||
|
if (scraperComboBox == null)
|
||||||
|
{
|
||||||
|
scraperComboBox = new JComboBox();
|
||||||
|
scraperComboBox.addActionListener(new ActionListener()
|
||||||
|
{
|
||||||
|
public void actionPerformed(ActionEvent arg0)
|
||||||
|
{
|
||||||
|
if (scraperComboBox.getSelectedItem().equals("www.mobygames.com"))
|
||||||
|
{
|
||||||
|
cardLayout.show(cardPanel, "moby");
|
||||||
|
scraper.setScrapertoUse(SCRAPER.moby);
|
||||||
|
getRootPane().setDefaultButton(getMobyGamesPanel().getConnectButton());
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
cardLayout.show(cardPanel, "c64com");
|
||||||
|
scraper.setScrapertoUse(SCRAPER.c64com);
|
||||||
|
getRootPane().setDefaultButton(getC64comPanel().getConnectButton());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
scraperComboBox.addItem("www.mobygames.com");
|
||||||
|
scraperComboBox.addItem("www.c64.com");
|
||||||
|
}
|
||||||
|
return scraperComboBox;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,65 +8,87 @@ import se.lantz.model.InfoModel;
|
||||||
import se.lantz.model.MainViewModel;
|
import se.lantz.model.MainViewModel;
|
||||||
import se.lantz.model.SystemModel;
|
import se.lantz.model.SystemModel;
|
||||||
import se.lantz.model.data.ScraperFields;
|
import se.lantz.model.data.ScraperFields;
|
||||||
|
import se.lantz.scraper.C64comScraper;
|
||||||
import se.lantz.scraper.MobyGamesScraper;
|
import se.lantz.scraper.MobyGamesScraper;
|
||||||
|
import se.lantz.scraper.Scraper;
|
||||||
|
|
||||||
public class ScraperManager
|
public class ScraperManager
|
||||||
{
|
{
|
||||||
MobyGamesScraper scraper = new MobyGamesScraper();
|
public enum SCRAPER {
|
||||||
|
moby, c64com
|
||||||
|
}
|
||||||
|
Scraper mobyScraper = new MobyGamesScraper();
|
||||||
|
Scraper c64comScraper = new C64comScraper();
|
||||||
|
Scraper usedScraper = mobyScraper;
|
||||||
|
|
||||||
List<BufferedImage> screenshotsList = new ArrayList<>();
|
List<BufferedImage> screenshotsList = new ArrayList<>();
|
||||||
private InfoModel infoModel;
|
private InfoModel infoModel;
|
||||||
private SystemModel systemModel;
|
private SystemModel systemModel;
|
||||||
private ScraperFields fields;
|
private ScraperFields fields;
|
||||||
|
|
||||||
public ScraperManager(MainViewModel model)
|
public ScraperManager(MainViewModel model)
|
||||||
{
|
{
|
||||||
this.infoModel = model.getInfoModel();
|
this.infoModel = model.getInfoModel();
|
||||||
this.systemModel = model.getSystemModel();
|
this.systemModel = model.getSystemModel();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setScrapertoUse(SCRAPER scraper)
|
||||||
|
{
|
||||||
|
switch (scraper)
|
||||||
|
{
|
||||||
|
case moby:
|
||||||
|
usedScraper = mobyScraper;
|
||||||
|
break;
|
||||||
|
case c64com:
|
||||||
|
usedScraper = c64comScraper;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public void connectScraper(String url) throws Exception
|
public void connectScraper(String url) throws Exception
|
||||||
{
|
{
|
||||||
scraper.connectToMobyGames(url);
|
usedScraper.connect(url);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void scrapeGameInformation(ScraperFields fields)
|
public void scrapeGameInformation(ScraperFields fields)
|
||||||
{
|
{
|
||||||
this.fields = fields;
|
this.fields = fields;
|
||||||
scraper.scrapeInformation(fields);
|
usedScraper.scrapeInformation(fields);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void scrapeScreenshots()
|
public void scrapeScreenshots()
|
||||||
{
|
{
|
||||||
screenshotsList = scraper.scrapeScreenshots();
|
screenshotsList = usedScraper.scrapeScreenshots();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public List<BufferedImage> getScreenshots()
|
public List<BufferedImage> getScreenshots()
|
||||||
{
|
{
|
||||||
return screenshotsList;
|
return screenshotsList;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateModelWithGamesInfo()
|
public void updateModelWithGamesInfo()
|
||||||
{
|
{
|
||||||
if (fields.isTitle())
|
if (fields.isTitle())
|
||||||
{
|
{
|
||||||
infoModel.setTitle(scraper.getTitle());
|
infoModel.setTitle(usedScraper.getTitle());
|
||||||
}
|
}
|
||||||
if (fields.isAuthor())
|
if (fields.isAuthor())
|
||||||
{
|
{
|
||||||
infoModel.setAuthor(scraper.getAuthor());
|
infoModel.setAuthor(usedScraper.getAuthor());
|
||||||
}
|
}
|
||||||
if (fields.isYear())
|
if (fields.isYear())
|
||||||
{
|
{
|
||||||
infoModel.setYear(scraper.getYear());
|
infoModel.setYear(usedScraper.getYear());
|
||||||
}
|
}
|
||||||
if (fields.isDescription())
|
if (fields.isDescription())
|
||||||
{
|
{
|
||||||
infoModel.setDescription(scraper.getDescription());
|
infoModel.setDescription(usedScraper.getDescription());
|
||||||
}
|
}
|
||||||
if (fields.isGenre())
|
if (fields.isGenre())
|
||||||
{
|
{
|
||||||
String genre = scraper.getGenre();
|
String genre = usedScraper.getGenre();
|
||||||
if (!genre.isEmpty())
|
if (!genre.isEmpty())
|
||||||
{
|
{
|
||||||
infoModel.setGenre(genre);
|
infoModel.setGenre(genre);
|
||||||
|
@ -74,14 +96,14 @@ public class ScraperManager
|
||||||
}
|
}
|
||||||
if (fields.isComposer())
|
if (fields.isComposer())
|
||||||
{
|
{
|
||||||
infoModel.setComposer(scraper.getComposer());
|
infoModel.setComposer(usedScraper.getComposer());
|
||||||
}
|
}
|
||||||
if (fields.isCover())
|
if (fields.isCover())
|
||||||
{
|
{
|
||||||
infoModel.setCoverImage(scraper.getCover());
|
infoModel.setCoverImage(usedScraper.getCover());
|
||||||
}
|
}
|
||||||
//Set system based on the scraped URL
|
//Set system based on the scraped URL
|
||||||
if (scraper.isC64())
|
if (usedScraper.isC64())
|
||||||
{
|
{
|
||||||
systemModel.setC64(true);
|
systemModel.setC64(true);
|
||||||
}
|
}
|
||||||
|
@ -90,7 +112,7 @@ public class ScraperManager
|
||||||
systemModel.setVic(true);
|
systemModel.setVic(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateModelWithScreenshotImages(BufferedImage screen1, BufferedImage screen2)
|
public void updateModelWithScreenshotImages(BufferedImage screen1, BufferedImage screen2)
|
||||||
{
|
{
|
||||||
infoModel.setScreen1Image(screen1);
|
infoModel.setScreen1Image(screen1);
|
||||||
|
|
|
@ -21,6 +21,7 @@ import se.lantz.model.data.GameListData;
|
||||||
import se.lantz.model.data.GameView;
|
import se.lantz.model.data.GameView;
|
||||||
import se.lantz.model.data.ScraperFields;
|
import se.lantz.model.data.ScraperFields;
|
||||||
import se.lantz.scraper.MobyGamesScraper;
|
import se.lantz.scraper.MobyGamesScraper;
|
||||||
|
import se.lantz.scraper.Scraper;
|
||||||
import se.lantz.util.FileManager;
|
import se.lantz.util.FileManager;
|
||||||
|
|
||||||
public class MainViewModel extends AbstractModel
|
public class MainViewModel extends AbstractModel
|
||||||
|
@ -49,7 +50,7 @@ public class MainViewModel extends AbstractModel
|
||||||
|
|
||||||
private GameListData selectedData;
|
private GameListData selectedData;
|
||||||
|
|
||||||
MobyGamesScraper scraper = new MobyGamesScraper();
|
Scraper scraper = new MobyGamesScraper();
|
||||||
|
|
||||||
public void initialize()
|
public void initialize()
|
||||||
{
|
{
|
||||||
|
|
|
@ -10,73 +10,100 @@ public class ScraperFields
|
||||||
private boolean cover = true;
|
private boolean cover = true;
|
||||||
private boolean screenshots = true;
|
private boolean screenshots = true;
|
||||||
private boolean composer = true;
|
private boolean composer = true;
|
||||||
|
private boolean game = false;
|
||||||
|
|
||||||
public ScraperFields()
|
public ScraperFields()
|
||||||
{
|
{
|
||||||
|
//Empty
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isTitle()
|
public boolean isTitle()
|
||||||
{
|
{
|
||||||
return title;
|
return title;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setTitle(boolean title)
|
public void setTitle(boolean title)
|
||||||
{
|
{
|
||||||
this.title = title;
|
this.title = title;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isAuthor()
|
public boolean isAuthor()
|
||||||
{
|
{
|
||||||
return author;
|
return author;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setAuthor(boolean author)
|
public void setAuthor(boolean author)
|
||||||
{
|
{
|
||||||
this.author = author;
|
this.author = author;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isYear()
|
public boolean isYear()
|
||||||
{
|
{
|
||||||
return year;
|
return year;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setYear(boolean year)
|
public void setYear(boolean year)
|
||||||
{
|
{
|
||||||
this.year = year;
|
this.year = year;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isDescription()
|
public boolean isDescription()
|
||||||
{
|
{
|
||||||
return description;
|
return description;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setDescription(boolean description)
|
public void setDescription(boolean description)
|
||||||
{
|
{
|
||||||
this.description = description;
|
this.description = description;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isCover()
|
public boolean isCover()
|
||||||
{
|
{
|
||||||
return cover;
|
return cover;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setCover(boolean cover)
|
public void setCover(boolean cover)
|
||||||
{
|
{
|
||||||
this.cover = cover;
|
this.cover = cover;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isScreenshots()
|
public boolean isScreenshots()
|
||||||
{
|
{
|
||||||
return screenshots;
|
return screenshots;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setScreenshots(boolean screenshots)
|
public void setScreenshots(boolean screenshots)
|
||||||
{
|
{
|
||||||
this.screenshots = screenshots;
|
this.screenshots = screenshots;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isGenre()
|
public boolean isGenre()
|
||||||
{
|
{
|
||||||
return genre;
|
return genre;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setGenre(boolean genre)
|
public void setGenre(boolean genre)
|
||||||
{
|
{
|
||||||
this.genre = genre;
|
this.genre = genre;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isComposer()
|
public boolean isComposer()
|
||||||
{
|
{
|
||||||
return composer;
|
return composer;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setComposer(boolean composer)
|
public void setComposer(boolean composer)
|
||||||
{
|
{
|
||||||
this.composer = composer;
|
this.composer = composer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isGame()
|
||||||
|
{
|
||||||
|
return game;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGame(boolean game)
|
||||||
|
{
|
||||||
|
this.game = game;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,12 +16,13 @@ import org.jsoup.select.Elements;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import se.lantz.model.data.ScraperFields;
|
||||||
import se.lantz.util.ExceptionHandler;
|
import se.lantz.util.ExceptionHandler;
|
||||||
|
|
||||||
public class C64comScraper
|
public class C64comScraper implements Scraper
|
||||||
{
|
{
|
||||||
private static final Logger logger = LoggerFactory.getLogger(C64comScraper.class);
|
private static final Logger logger = LoggerFactory.getLogger(C64comScraper.class);
|
||||||
private String c64comGameUrl = "http://www.c64.com/games/259";
|
private String c64comGameUrl = "http://www.c64.com/games/53";
|
||||||
|
|
||||||
private String screenshotCssQuery = "html > body > table > tbody > tr > td:eq(0) > table > tbody > tr:eq(1) > td > table:eq(1) > tbody > tr > td:eq(4) > table > tbody > tr:eq(0) > td > img";
|
private String screenshotCssQuery = "html > body > table > tbody > tr > td:eq(0) > table > tbody > tr:eq(1) > td > table:eq(1) > tbody > tr > td:eq(4) > table > tbody > tr:eq(0) > td > img";
|
||||||
|
|
||||||
|
@ -34,16 +35,17 @@ public class C64comScraper
|
||||||
|
|
||||||
|
|
||||||
private String scrapedTitle;
|
private String scrapedTitle;
|
||||||
private String scrapedYear;
|
private int scrapedYear;
|
||||||
private String scrapedAuthor;
|
private String scrapedAuthor;
|
||||||
private List<String> scrapedMusicList = new ArrayList<>();
|
private List<String> scrapedMusicList = new ArrayList<>();
|
||||||
|
|
||||||
private String scrapedGenre;
|
private String scrapedGenre;
|
||||||
|
private BufferedImage scrapedCover;
|
||||||
|
|
||||||
public static void main(String[] args)
|
public static void main(String[] args)
|
||||||
{
|
{
|
||||||
C64comScraper scraper = new C64comScraper();
|
C64comScraper scraper = new C64comScraper();
|
||||||
scraper.scrapeInformation();
|
scraper.scrapeInformation(null);
|
||||||
scraper.scrapeScreenshots();
|
scraper.scrapeScreenshots();
|
||||||
}
|
}
|
||||||
public C64comScraper()
|
public C64comScraper()
|
||||||
|
@ -51,14 +53,16 @@ public class C64comScraper
|
||||||
// TODO Auto-generated constructor stub
|
// TODO Auto-generated constructor stub
|
||||||
}
|
}
|
||||||
|
|
||||||
public void connectToC64Com(String url) throws IOException
|
@Override
|
||||||
|
public void connect(String url) throws IOException
|
||||||
{
|
{
|
||||||
this.c64comGameUrl = "";
|
this.c64comGameUrl = "";
|
||||||
Jsoup.connect(url).method(Connection.Method.GET).execute();
|
Jsoup.connect(url).method(Connection.Method.GET).execute();
|
||||||
this.c64comGameUrl = url;
|
this.c64comGameUrl = url;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void scrapeInformation()//ScraperFields fields)
|
@Override
|
||||||
|
public void scrapeInformation(ScraperFields fields)
|
||||||
{
|
{
|
||||||
Document doc;
|
Document doc;
|
||||||
try
|
try
|
||||||
|
@ -82,7 +86,7 @@ public class C64comScraper
|
||||||
Elements yearElements = mainFrameDocument.select(yearCssQuery);
|
Elements yearElements = mainFrameDocument.select(yearCssQuery);
|
||||||
if (yearElements.first() != null)
|
if (yearElements.first() != null)
|
||||||
{
|
{
|
||||||
scrapedYear = yearElements.first().text();
|
scrapedYear = Integer.parseInt(yearElements.first().text().trim());
|
||||||
}
|
}
|
||||||
logger.debug("scraped year: {}", scrapedYear);
|
logger.debug("scraped year: {}", scrapedYear);
|
||||||
|
|
||||||
|
@ -110,11 +114,27 @@ public class C64comScraper
|
||||||
String music = child.select("td:eq(1)").first().text();
|
String music = child.select("td:eq(1)").first().text();
|
||||||
scrapedMusicList.add(music);
|
scrapedMusicList.add(music);
|
||||||
logger.debug("scraped music: {}", music);
|
logger.debug("scraped music: {}", music);
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
else if (info.equalsIgnoreCase("Genre:"))
|
if (info.equalsIgnoreCase("Genre:"))
|
||||||
{
|
{
|
||||||
scrapedGenre = child.select("td:eq(1)").first().text();
|
scrapedGenre = child.select("td:eq(1)").first().text();
|
||||||
logger.debug("scraped genre: {}", scrapedGenre);
|
logger.debug("scraped genre: {}", scrapedGenre);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (info.startsWith("Inlay"))
|
||||||
|
{
|
||||||
|
String url = child.select("td:eq(1) > a").first().attr("href");
|
||||||
|
//Select the right part
|
||||||
|
url = url.substring(url.indexOf("'")+1);
|
||||||
|
url = url.substring(0, url.indexOf("'"));
|
||||||
|
url = url.substring(url.indexOf("=")+1);
|
||||||
|
url = "http://www.c64.com/games/" + url;
|
||||||
|
URL imageUrl = new URL(url);
|
||||||
|
scrapedCover = ImageIO.read(imageUrl);
|
||||||
|
logger.debug("Cover url: {}", url);
|
||||||
|
|
||||||
|
// http://www.c64.com/games/inlay.php?url=inlays/a/arkanoid.png
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -125,7 +145,8 @@ public class C64comScraper
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<BufferedImage> scrapeScreenshots()
|
@Override
|
||||||
|
public List<BufferedImage> scrapeScreenshots()
|
||||||
{
|
{
|
||||||
List<BufferedImage> screensList = new ArrayList<>();
|
List<BufferedImage> screensList = new ArrayList<>();
|
||||||
Document doc;
|
Document doc;
|
||||||
|
@ -154,8 +175,58 @@ public class C64comScraper
|
||||||
}
|
}
|
||||||
catch (IOException e)
|
catch (IOException e)
|
||||||
{
|
{
|
||||||
ExceptionHandler.handleException(e, "Could not scrape screenshot");
|
logger.warn("Could not scrape all six screenshots", e);
|
||||||
}
|
}
|
||||||
return screensList;
|
return screensList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getTitle()
|
||||||
|
{
|
||||||
|
return scrapedTitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getAuthor()
|
||||||
|
{
|
||||||
|
return scrapedAuthor;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int getYear()
|
||||||
|
{
|
||||||
|
return scrapedYear;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getDescription()
|
||||||
|
{
|
||||||
|
//Not supported, no description on c64.com
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getGenre()
|
||||||
|
{
|
||||||
|
return scrapedGenre;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String getComposer()
|
||||||
|
{
|
||||||
|
return String.join(", ", scrapedMusicList);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public BufferedImage getCover()
|
||||||
|
{
|
||||||
|
return scrapedCover;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isC64()
|
||||||
|
{
|
||||||
|
// Only C64 games available
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,7 @@ import org.slf4j.LoggerFactory;
|
||||||
import se.lantz.model.data.ScraperFields;
|
import se.lantz.model.data.ScraperFields;
|
||||||
import se.lantz.util.ExceptionHandler;
|
import se.lantz.util.ExceptionHandler;
|
||||||
|
|
||||||
public class MobyGamesScraper
|
public class MobyGamesScraper implements Scraper
|
||||||
{
|
{
|
||||||
private static final Logger logger = LoggerFactory.getLogger(MobyGamesScraper.class);
|
private static final Logger logger = LoggerFactory.getLogger(MobyGamesScraper.class);
|
||||||
|
|
||||||
|
@ -72,13 +72,15 @@ public class MobyGamesScraper
|
||||||
genreMap.put("Sports", "sport");
|
genreMap.put("Sports", "sport");
|
||||||
}
|
}
|
||||||
|
|
||||||
public void connectToMobyGames(String url) throws IOException
|
@Override
|
||||||
|
public void connect(String url) throws IOException
|
||||||
{
|
{
|
||||||
this.mobyGamesGameUrl = "";
|
this.mobyGamesGameUrl = "";
|
||||||
Jsoup.connect(url).method(Connection.Method.GET).execute();
|
Jsoup.connect(url).method(Connection.Method.GET).execute();
|
||||||
this.mobyGamesGameUrl = url;
|
this.mobyGamesGameUrl = url;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void scrapeInformation(ScraperFields fields)
|
public void scrapeInformation(ScraperFields fields)
|
||||||
{
|
{
|
||||||
Document doc;
|
Document doc;
|
||||||
|
@ -142,36 +144,43 @@ public class MobyGamesScraper
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String getTitle()
|
public String getTitle()
|
||||||
{
|
{
|
||||||
return scrapedTitle;
|
return scrapedTitle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String getAuthor()
|
public String getAuthor()
|
||||||
{
|
{
|
||||||
return scrapedAuthor;
|
return scrapedAuthor;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public int getYear()
|
public int getYear()
|
||||||
{
|
{
|
||||||
return scrapedYear;
|
return scrapedYear;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String getDescription()
|
public String getDescription()
|
||||||
{
|
{
|
||||||
return scrapedDescription;
|
return scrapedDescription;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String getGenre()
|
public String getGenre()
|
||||||
{
|
{
|
||||||
return scrapedGenre;
|
return scrapedGenre;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public String getComposer()
|
public String getComposer()
|
||||||
{
|
{
|
||||||
return scrapedComposer;
|
return scrapedComposer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public BufferedImage getCover()
|
public BufferedImage getCover()
|
||||||
{
|
{
|
||||||
return scrapedCover;
|
return scrapedCover;
|
||||||
|
@ -305,6 +314,7 @@ public class MobyGamesScraper
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public List<BufferedImage> scrapeScreenshots()
|
public List<BufferedImage> scrapeScreenshots()
|
||||||
{
|
{
|
||||||
List<BufferedImage> returnList = new ArrayList<>();
|
List<BufferedImage> returnList = new ArrayList<>();
|
||||||
|
@ -359,6 +369,7 @@ public class MobyGamesScraper
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public boolean isC64()
|
public boolean isC64()
|
||||||
{
|
{
|
||||||
return mobyGamesGameUrl.contains("c64");
|
return mobyGamesGameUrl.contains("c64");
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
package se.lantz.scraper;
|
||||||
|
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import se.lantz.model.data.ScraperFields;
|
||||||
|
|
||||||
|
public interface Scraper
|
||||||
|
{
|
||||||
|
|
||||||
|
void connect(String url) throws IOException;
|
||||||
|
|
||||||
|
void scrapeInformation(ScraperFields fields);
|
||||||
|
|
||||||
|
String getTitle();
|
||||||
|
|
||||||
|
String getAuthor();
|
||||||
|
|
||||||
|
int getYear();
|
||||||
|
|
||||||
|
String getDescription();
|
||||||
|
|
||||||
|
String getGenre();
|
||||||
|
|
||||||
|
String getComposer();
|
||||||
|
|
||||||
|
BufferedImage getCover();
|
||||||
|
|
||||||
|
List<BufferedImage> scrapeScreenshots();
|
||||||
|
|
||||||
|
boolean isC64();
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue